gdb 设置位置

隐身守侯 提交于 2020-04-13 18:19:47

【今日推荐】:为什么一到面试就懵逼!>>>

三种:行定位;反汇编后的地址;

  • 行相关定位

    行相关定位格式: [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是存储返回值的寄存器
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!