2016-09-16 180 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。