gpt4 book ai didi

c++ - GDB 以无序的方式跳到错误的行

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:19 24 4
gpt4 key购买 nike

应用设置:我有使用以下第 3 方库的 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 block )

网络上的类似问题在“关闭所有 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 best known methods ,我们隐藏了符号的可见性,只有我们想公开的类被公开(也许这是相关的???)

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

最佳答案

这类问题通常是 GIGO —— gdb 只是按照编译器指示的方式运行。因此,它通常是编译器错误而不是 gdb 错误。即使使用 -O0 编译,我也看到过这种情况。我想到的例子是,某些版本的 g++ 在发出对变量的析构函数的调用时会发出变量声明的位置。这会导致直线代码出现这种奇怪的跳跃行为。

关于c++ - GDB 以无序的方式跳到错误的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com