2016-09-16 25 views
1

我去这个简单的代码来测试我的GDB(GNU GDB(Ubuntu的7.11.1-0ubuntu1〜16.04)7.11.1),我的Linux泊坞窗内运行,而且代码:为什么GDB不能在断点处停下来?

// 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

+3

可能不是你的主要问题,但'out.a'是一个非常糟糕的可执行文件命名选择。 –

+1

看起来非常类似于这个问题http://stackoverflow.com/q/34856092/72178。试试'docker run --privileged'。 – ks1322

+0

@PaulR:只是着名的'a.out'的一个笑话,我认为GDB不会把它当作一个静态库来对待:) – coanor

回答

0

的原因情侣我能想到的:

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

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