【问题标题】:Different GDBs, different debugging behaviors不同的 GDB,不同的调试行为
【发布时间】:2013-03-21 17:09:11
【问题描述】:

背景

我正在尝试调试使用一些个人动态库的 C++ 代码。我正在使用 Mac OSX,但我没有使用 llvm/clang 来编译我的代码或库。目前,我使用的是自制软件提供的 GNU g++ 编译器(4.7)。

问题

在这个环境下,我有两种调试器可供选择:Mac Developer Tools 提供的 gdb 版本(GNU gdb 6.3.50-20050815(Apple 版本 gdb-1824))和使用 homebrew 安装的 gdb(GNU gdb (GDB) 7.5 .1)。我更喜欢使用后者,但是在使用它时,它会将许多重要的变量显示为优化

例如,这是我使用 gdb 7.5.1 的程序输出的摘录:

Breakpoint 1, MWE::Outputs (this=<optimized out>, time=<optimized out>)
    at /Users/ynet/temp/mwe.cpp:203
203     cout << "example" << endl;
(gdb) p this
$1 = <optimized out>

虽然 gdb 6.3.50 显示:

Breakpoint 1, MWE::Outputs (this=0x100601080, time=0.64300000000000046) at /Users/ynet/temp/mwe.cpp:203
203     cout << "example" << endl;
(gdb) p this
$1 = (MWE * const) 0x100601080

两个程序是相同的(即它是相同的可执行文件);它是用自制的 g++-4.7 编译的,而不是 Apple Developer Tools 提供的 llvm/clang 编译器。 与关于 gdb 的优化结果的问题不同,我检查了我正在使用“-O0”进行编译(我当前的标志是“-O0 -g -ggdb”)

问题

为什么在这种情况下我会得到两种不同的 gdb 行为,我应该怎么做才能使用没有优化值的最新 gdb 版本?

【问题讨论】:

    标签: macos gdb homebrew


    【解决方案1】:

    为什么在这种情况下我会得到两种不同的 gdb 行为,我应该怎么做才能使用没有优化值的最新 gdb 版本?

    对于未优化的代码,GDB 打印&lt;optimized out&gt; 显然是一个错误。

    您应该尝试使用从主干构建的 GDB 重现此问题,创建一个显示问题的最小测试用例,并提交错误 bugzilla。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2011-09-12
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多