3.1break 命令进阶
| break |
在(file文件的)function函数中设置一个断点 |
| [file:]function |
|
3.1.1 break<行号>
wangguangbo@DESKTOP-O5D0MDL:/mnt/d/CMD$ g++ main.cpp FUN2.h FUN2.cpp -o cmd -g
wangguangbo@DESKTOP-O5D0MDL:/mnt/d/CMD$ gdb -q cmd
(gdb) info b
No breakpoints, watchpoints, tracepoints, or catchpoints.
(gdb) i b
No breakpoints, watchpoints, tracepoints, or catchpoints.
(gdb) b 49
Breakpoint 1 at 0x15b2: file main.cpp, line 49.
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000000015b2 in main(int, char**) at main.cpp:49
(gdb) b main.cpp:5
Breakpoint 2 at 0x17ac: file main.cpp, line 12.
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000000015b2 in main(int, char**) at main.cpp:49
2 breakpoint keep y 0x00000000000017ac in FUNC::testFun1() at main.cpp:12
3.1.2 break<文件名>:<行号>#跨文件指定行
(gdb) b main.cpp:5
Breakpoint 2 at 0x17ac: file main.cpp, line 12.
3.1.3 break<函数名>
(gdb) b testFun
Breakpoint 3 at 0x1379: testFun. (2 locations)
3.1.4 break<类名><函数名>(C++类成员函数)
(gdb) b FUNC::testFun1()
Note: breakpoint 2 also set at pc 0x17ac.
Breakpoint 8 at 0x17ac: file main.cpp, line 12.
3.1.5 break<文件名>:<函数名>(跨文件指定函数)
(gdb) b main.cpp:testFun
FUNC::testFun1()
testFun(int)
testFun(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
(gdb) b main.cpp:testFun(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
Breakpoint 6 at 0x555555555379: file main.cpp, line 17.
3.1.6 break<位置>if<条件表达式>
(gdb) b 61 if sum > 500
Breakpoint 7 at 0x555555555662: file main.cpp, line 61.
(gdb) b i
Function "i" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) i b
Num Type Disp Enb Address What
4 breakpoint keep y 0x0000555555555458 in main(int, char**) at main.cpp:36
breakpoint already hit 1 time
5 breakpoint keep y 0x0000555555555458 in main(int, char**) at main.cpp:36
breakpoint already hit 1 time
6 breakpoint keep y 0x0000555555555379 in testFun(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) at main.cpp:17
breakpoint already hit 1 time
7 breakpoint keep y 0x0000555555555662 in main(int, char**) at main.cpp:61
stop only if sum > 500
(gdb) c
Continuing.
str:xxxx
str:vvvv
FUNC1 FUNC1 FUNC1
FUNC2 FUNC2 FUNC2
Breakpoint 7, main (argc=1, argv=0x7fffffffdea8) at main.cpp:61
61 sum+=i;
(gdb) p i
$1 = 33
(gdb) p sum
$2 = 528
(gdb)
3.1.7 tbreak<位置>(语法与break相同)
(gdb) tb 51
Temporary breakpoint 8 at 0x5555555555e0: file main.cpp, line 51.
(gdb) i b\
Quit
(gdb) i b
Undefined info command: "bi b ". Try "help info".
(gdb) b i
Function "i" not defined.
Make breakpoint pending on future shared library load? (y or [n]) Quit
(gdb) i b
Num Type Disp Enb Address What
8 breakpoint del y 0x00005555555555e0 in main(int, char**) at main.cpp:51
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /mnt/d/CMD/cmd
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
argv[0]:/mnt/d/CMD/cmd
num:9988
cnt:199
buf:zzxx
Temporary breakpoint 8, main (argc=1, argv=0x7fffffffdea8) at main.cpp:51
51 testFun("xxxx");
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /mnt/d/CMD/cmd
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
argv[0]:/mnt/d/CMD/cmd
num:9988
cnt:199
buf:zzxx
str:xxxx
str:vvvv
FUNC1 FUNC1 FUNC1
FUNC2 FUNC2 FUNC2
[Inferior 1 (process 10523) exited normally]
3.1.8 break*<内存地址>
(gdb) r
Starting program: /mnt/d/CMD/cmd
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, 0x0000555555555443 in main ()
(gdb) disassemble
Dump of assembler code for function main:
0x000055555555543b <+0>: endbr64
0x000055555555543f <+4>: push %rbp
0x0000555555555440 <+5>: mov %rsp,%rbp
=> 0x0000555555555443 <+8>: push %rbx
0x0000555555555444 <+9>: sub $0x118,%rsp
0x000055555555544b <+16>: mov %edi,-0x114(%rbp)
0x0000555555555451 <+22>: mov %rsi,-0x120(%rbp)
0x0000555555555458 <+29>: mov %fs:0x28,%rax
0x0000555555555461 <+38>: mov %rax,-0x18(%rbp)
0x0000555555555465 <+42>: xor %eax,%eax
0x0000555555555467 <+44>: movl $0x7b,-0xf4(%rbp)
0x0000555555555471 <+54>: movq $0x363534,-0xa0(%rbp)
0x000055555555547c <+65>: movq $0x0,-0x98(%rbp)
0x0000555555555487 <+76>: movq $0x0,-0x90(%rbp)
0x0000555555555492 <+87>: movq $0x0,-0x88(%rbp)
0x000055555555549d <+98>: movq $0x0,-0x80(%rbp)
--Type <RET> for more, q to quit, c to continue without paging--
0x00005555555554a5 <+106>: movq $0x0,-0x78(%rbp)
0x00005555555554ad <+114>: movq $0x0,-0x70(%rbp)
0x00005555555554b5 <+122>: movq $0x0,-0x68(%rbp)
0x00005555555554bd <+130>: movq $0x0,-0x60(%rbp)
0x00005555555554c5 <+138>: movq $0x0,-0x58(%rbp)
0x00005555555554cd <+146>: movq $0x0,-0x50(%rbp)
0x00005555555554d5 <+154>: movq $0x0,-0x48(%rbp)
0x00005555555554dd <+162>: movq $0x0,-0x40(%rbp)
0x00005555555554e5 <+170>: movq $0x0,-0x38(%rbp)
0x00005555555554ed <+178>: movq $0x0,-0x30(%rbp)
0x00005555555554f5 <+186>: movq $0x0,-0x28(%rbp)
0x00005555555554fd <+194>: lea -0x101(%rbp),%rax
0x0000555555555504 <+201>: mov %rax,-0xf0(%rbp)
0x000055555555550b <+208>: nop
0x000055555555550c <+209>: nop
0x000055555555550d <+210>: lea -0x101(%rbp),%rdx
0x0000555555555514 <+217>: lea -0xe0(%rbp),%rax
--Type <RET> for more, q to quit, c to continue without paging--q
Quit
(gdb) b *0x000055555555544b
Breakpoint 2 at 0x55555555544b
(gdb) i b
Num Type Disp Enb Address What
1 breakpoint keep y 0x0000555555555443 <main+8>
breakpoint already hit 1 time
2 breakpoint keep y 0x000055555555544b <main+16>
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /mnt/d/CMD/cmd
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Breakpoint 1, 0x0000555555555443 in main ()
(gdb) c
Continuing.
Breakpoint 2, 0x000055555555544b in main ()