简体   繁体   中英

GDB Getting the correct stop point when breakpoint set on variable declaration

Given the following code sippet:

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

When you set a breakpoint on line 2: in the above code and start debugging in GDB the execution actually stops on line 4:. This is the correct behavior of course BUT is it possible to query GDB for the correct stop point number before debugging... right after the creation of the breakpoint.

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

This is what info b shows:

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

and you need to do this for address in the column "Address":

(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>.

As you can see the real breakpoint on "Line 4 of main.cpp"

Probably you are looking for

info b

(which is short for info breakpoints ) and gives the number in the first "column".

If you want to break when the variable gets modified, use a watch point instead. GDB will always break at the nearest executable code line after the breakpoint (if set by line). A variable declaration isn't executable code and therefore the assignment on the next (non-empty) line will be used.

If what you are looking for is to know at exactly which line it stops, I think there is no such thing on the GDB prompt. However, you can still use a watch point and customize what happens on your break and watch points using commands .


From the comment skwllsp wrote, here's how it would look:

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

Which says there is one breakpoint ( 1 ), which is enabled and it shows you the line, too. Disposition (Disp) and enabled (Enb) are useful, but please read the manual for a proper description. I can also warmly recommend the book "Art of Debugging" from Nostarch.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM