1、info line 函数名 //显示函数的地址
2、info frame
3、info argc info locals
4、info breakpoints
5、info watchpoints
6、info threads
7、thread n
8、bt full
9、break n if i==10
10、delete n
11、disable n
12、enable n
13、disassemble func
14、until 跳出循环体
15、finish 跳出正在执行的函数
16、display var
17、watch var //如果是观察某个局部变量,需先在该函数设置断点
18、info display
19、undisplay n
20、set args xx xx
21、set var i=10
22、set print elements 0 设置最大限制数
23、p array 打印数组的值
24、p array[10]@6 从下标为10的元素开始连续打印6个元素的值
25、p *array@6 从下标为0的元素开始连续打印6个元素的值
26、set print array-indexes on 打印数组下标
27 、i files or i proc mapping 打印进程内存信息
28、whatis i
29、x /nfu u可为b h w g
30、set print pretty on
31、thread apply all bt
32、set logging on
33、info sharedlibrary
34、add-symbol-file xxx.sym +addr 利用coredump文件加载动态库
35、symbol-file xxx.sym 调试某个进程
36、gdb xxx.sym coredump
37、
i registers
gdb默认显示汇编指令格式是AT&T格式
1、
set disassembly-flavor intel
2、 如果要把断点设置在汇编指令层次函数的开头,要使用如下命令:“b *func”
3、如果要在任意情况下反汇编后面要执行的代码:
(gdb) set disassemble-next-line on
如果要在后面的代码没有源码的情况下才反汇编后面要执行的代码:
(gdb) set disassemble-next-line auto
关闭这个功能:
(gdb) set disassemble-next-line off
4、 可以用“disas /m fun”(disas是disassemble命令缩写)命令将函数代码和汇编指令映射起来
如果只想查看某一行所对应的地址范围,可以:
(gdb) i line 13 Line 13 of "foo.c" starts at address 0x4004e9 <main+37> and ends at 0x40050c <main+72>.
如果只想查看这一条语句对应的汇编代码,可以使用“
disassemble [Start],[End]
”命令:(gdb) disassemble 0x4004e9, 0x40050c Dump of assembler code from 0x4004e9 to 0x40050c: 0x00000000004004e9 <main+37>: mov -0x14(%rbp),%esi 0x00000000004004ec <main+40>: mov -0x18(%rbp),%ecx 0x00000000004004ef <main+43>: mov -0x1c(%rbp),%edx 0x00000000004004f2 <main+46>: mov -0x20(%rbp),%ebx 0x00000000004004f5 <main+49>: mov $0x400618,%eax 0x00000000004004fa <main+54>: mov %esi,%r8d 0x00000000004004fd <main+57>: mov %ebx,%esi 0x00000000004004ff <main+59>: mov %rax,%rdi 0x0000000000400502 <main+62>: mov $0x0,%eax 0x0000000000400507 <main+67>: callq 0x4003b8 <printf@plt> End of assembler dump.
100个gdb小技巧