1

次のコードsippetが与えられます:

1:    int main(int argc, char **argv) {
2:       int i;
3:    
4:       i = i + 1;
5:    
6:       ...
7:    
8:    }

上記のコードで2行目にブレークポイントを設定し、GDBでデバッグを開始すると、実際には4行目で実行が停止します。これはもちろん正しい動作ですが、デバッグの前に、ブレークポイントの作成直後に GDBに正しいストップポイント番号を照会することは可能です。

4

2 に答える 2

2
(gdb) b 2
Breakpoint 1 at 0x400547: file main.cpp, line 2.

これがinfo b示すものです:

(gdb) info b $bpnum
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x0000000000400547 in main(int, char**) at main.cpp:2

「アドレス」列のアドレスに対してこれを行う必要があります。

(gdb) info line *0x0000000000400547
Line 4 of "main.cpp" starts at address 0x400547 <main(int, char**)+11> and ends at 0x400550 <main(int, char**)+20>.

ご覧のとおり、「main.cppの4行目」に実際のブレークポイントがあります。

于 2012-12-11T13:53:03.820 に答える
0

おそらくあなたは探しています

info b

(これはの略ですinfo breakpoints)そして最初の「列」に番号を与えます。

変数が変更されたときに中断したい場合は、代わりにウォッチポイントを使用してください。GDBは、ブレークポイントの後の最も近い実行可能コード行で常にブレークします(行で設定されている場合)。変数宣言は実行可能コードではないため、次の(空でない)行の割り当てが使用されます。

探しているのが停止する行を正確に知ることである場合、GDBプロンプトにはそのようなことはないと思います。ただし、引き続きウォッチポイントを使用し、を使用して休憩ポイントとウォッチポイントで何が発生するかをカスタマイズできますcommands


skwllspが書いたコメントから、次のようになります。

(gdb) info b
Num    Type       Disp  Enb Address            What
1      breakpoint keep  y   0x0000000000400547 in main(int, char**) at main.cpp:2

1これは、有効になっているブレークポイント()が1つあることを示しており、行も表示されます。Disposition(Disp)とenabled(Enb)は便利ですが、適切な説明についてはマニュアルをお読みください。Nostarchの「ArtofDebugging」という本も温かくお勧めします。

于 2012-12-11T13:19:17.350 に答える