2016-09-16 9 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でなければならない。

上記の他の2つのオプションを除外する。ちょうどあなたのLinuxがドッカーで動作していることがわかりました。この場合、テストプログラムはドッカー上で実行されているプロセスであり、gdbはネイティブマシン上で呼び出されると仮定します。 lxc-attachを使用して、ドッカーをgdbに接続する必要があります。

関連する問題