三种:行定位;反汇编后的地址;
-
行相关定位
行相关定位格式:
[filename:][linenum|function]
-
filename 文件名
- 如果有则是指明某个文件,可以是相对路径,也可以是绝对路径。如果匹配了多个匹配的文件,那么则会在多个文件设置多个断点。
- linenum 或 function
linenum
则就是在对应行设置断点function
则是搜索当前文件的函数label
则是搜索当前文件的 label:C++用于goto定位的
- 如果没有
filename
:funcname
表示所有文件所有匹配的函数,包括重载,命名空间和类成员的函数label
从当前栈帧进行搜索,如果程序没有执行不执行搜索
- 如果有则是指明某个文件,可以是相对路径,也可以是绝对路径。如果匹配了多个匹配的文件,那么则会在多个文件设置多个断点。
-
-
反汇编后的地址
break *address
disassemble [/s /m /r] start,end
disassemble start,end
disassemble /m function
disassemble /r function
disassemble /s function
新版本支持 不支持文件名,搜索的是当前的断点所在栈帧。
int foo(int x)
{
switch(x) {
case 1: return 2;
case 2: return 3;
default: return 42;
}
}
int main()
{
return foo(0);
}
(gdb) disas foo
Dump of assembler code for function foo:
0x0000000000400448 <+0>: push %rbp
0x0000000000400449 <+1>: mov %rsp,%rbp
0x000000000040044c <+4>: mov %edi,-0x4(%rbp)
0x000000000040044f <+7>: mov -0x4(%rbp),%eax
0x0000000000400452 <+10>: mov %eax,-0xc(%rbp)
0x0000000000400455 <+13>: cmpl $0x1,-0xc(%rbp)
0x0000000000400459 <+17>: je 0x400463 <foo+27>
0x000000000040045b <+19>: cmpl $0x2,-0xc(%rbp)
0x000000000040045f <+23>: je 0x40046c <foo+36>
0x0000000000400461 <+25>: jmp 0x400475 <foo+45>
0x0000000000400463 <+27>: movl $0x2,-0x8(%rbp)
0x000000000040046a <+34>: jmp 0x40047c <foo+52>
0x000000000040046c <+36>: movl $0x3,-0x8(%rbp)
0x0000000000400473 <+43>: jmp 0x40047c <foo+52>
0x0000000000400475 <+45>: movl $0x2a,-0x8(%rbp)
0x000000000040047c <+52>: mov -0x8(%rbp),%eax
0x000000000040047f <+55>: leaveq
0x0000000000400480 <+56>: retq
End of assembler dump.
(gdb) b *0x0000000000400480
Breakpoint 1 at 0x400480
(gdb) r
Breakpoint 1, 0x0000000000400480 in foo ()
(gdb) p $rax
$1 = 42
rax是存储返回值的寄存器
来源:oschina
链接:https://my.oschina.net/u/3695598/blog/3233061