为什么GDB不能停在断点?

我用这个简单的代码来testing我的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 

并debugging它像:

 (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

几个我能想到的原因:

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

排除上面提到的另外两个选项。 刚才发现你的linux正在docker上运行。 在这种情况下,你的testing程序是在docker上运行的进程,我假设在本地机器上调用gdb。 您可能需要使用lxc-attach将docker连接到gdb。