为什么GDB没有在破发点停止?

时间:2016-09-16 08:35:01

标签: c++ docker gdb

我使用这个简单的代码来测试我的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上?

1 个答案:

答案 0 :(得分:0)

我能想到的几个原因:

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

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