【问题标题】:Why GDB not stopped on break point?为什么 GDB 没有在断点处停止?
【发布时间】:2017-01-24 10:04:57
【问题描述】:

我用这个简单的代码来测试我的 GDB(GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1),我的 linux 在 docker 中运行,代码是:

// hello.cc
#include <iostream>

int main() {
    std::cout << "hello world!" << std::endl;
}

我编译它:

$ g++ -g -o out.a hello.cc

并像这样调试它:

(gdb) file out.a
(gdb) b main
Note: breakpoint 1 also set at pc 0x40084a.
(gdb) info b
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000000040084a in main() at hello.cc:3
(gdb) r
hello world!
During startup program exited normally.

为什么 gdb 没有在 main 上停止?

【问题讨论】:

  • 可能不是您的主要问题,但out.a 是一个非常糟糕的可执行文件命名选择。
  • 看起来非常类似于这个问题stackoverflow.com/q/34856092/72178。试试docker run --privileged
  • @PaulR:只是对著名的a.out 的一个玩笑,我认为GDB 不会把它当作一个静态库:)

标签: c++ docker gdb


【解决方案1】:

我能想到的几个原因:

  • 我使用的 gdb 版本是 7.0-0.4.16,它按预期工作(即,在 main 处停止)。可能与您拥有的 gdb 版本有关。
  • 我对您的 gdb 案例中的信息输出感到有点惊讶。它显示断点的行号为“3”。理想情况下应该是 4。

排除上面提到的其他两个选项。刚刚观察到您的 linux 正在 docker 上运行。在这种情况下,您的测试程序是在 docker 上运行的进程,我假设 gdb 是在本机机器上调用的。您可能需要使用 lxc-attach 将 docker 附加到 gdb。

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多