GDB以无序方式跳转到错误的行

 烟台中海地产有限公司往 发布于 2023-02-05 11:32

应用程序设置:我的C++ 11应用程序使用以下第三方库:

提升1.51.0

cppnetlib 0.9.4

jsoncpp 0.5.0

应用程序代码依赖于几个内部共享对象,所有这些对象都由我的团队开发(执行这些共享对象的经典链接时间,不使用dlopen等)

我正在使用GCC 4.6.2,使用GDB 7.4 7.6 时会出现问题.

操作系统 - Red Hat Linux 7.0版(Guinness)x86-64

问题 在共享对象代码中发出断点并发出gdb next命令时,有时GDB会向后跳转到某些行,没有任何合理的原因(特别是在抛出异常之后,对于那些异常,有合适的catch块)

网上的类似问题在"关闭任何GCC优化"的方面得到了回答,但我的GCC CL显然没有使用任何优化并要求获得调试信息,请注意-O0&-g开关:

COLLECT_GCC_OPTIONS= '-D' '_DEBUG' '-O0' '-g' '-Wall' '-fmessage-length=0' '-v' '-fPIC' '-D' 'BOOST_ALL_DYN_LINK' '-D' 'BOOST_PARAMETER_MAX_ARITY=15' '-D' '_GLIBCXX_USE_NANOSLEEP' '-Wno-deprecated' '-std=c++0x' '-fvisibility=hidden' '-c' '-MMD' '-MP' '-MF' 'Debug_x64/AgentRegisterer.d' '-MT' 'Debug_x64/AgentRegisterer.d' '-MT' 'Debug_x64/AgentRegisterer.o' '-o' 'Debug_x64/AgentRegisterer.o' '-shared-libgcc' '-mtune=generic' '-march=x86-64'

另请注意,根据Linux DSO 最知名的方法,我们隐藏了符号的可见性,只有我们想要公开的类才被暴露(也许这是相关的???)

root导致此问题的后续步骤应该是什么?

1 个回答
  • 这类问题通常是GIGO - gdb只是按照编译器指示它采取行动的方式行事.因此,它通常是编译器错误而不是gdb错误.我已经看到即使使用-O0编译也会发生这种情况.想到的例子是,当发出对变量析构函数的调用时,某些版本的g ++会发出变量声明的位置.这导致在其他直线代码中的这种奇怪的跳跃行为.

    2023-02-05 11:36 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有