gdb 定位代码位置

Posted Li-Yongjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb 定位代码位置相关的知识,希望对你有一定的参考价值。

前言

接上篇《addr2line》,本篇文章使用 gdb 来定位出错代码位置。

disassemble /m func_name

(gdb) file file.ko 
Reading symbols from file.ko...
(gdb) disassemble /m hello_init
Dump of assembler code for function hello_init:
12      
   0x00000024 <+0>:     push    r4, r5, r6, r7, lr
   0x00000034 <+16>:    sub     sp, sp, #12

13              struct file *filp;

14              loff_t pos;

15              int *a = NULL;

16
17              printk("hello enter\\n");
   0x0000002c <+8>:     movw    r0, #0
   0x00000030 <+12>:    movt    r0, #0
   0x00000038 <+20>:    bl      0x38 <hello_init+20>

18
19              *a = 100;
   0x00000028 <+4>:     mov     r4, #0
   0x0000003c <+24>:    mov     r3, #100        ; 0x64
   0x00000044 <+32>:    str     r3, [r4]

20
21              filp = filp_open(FILENAME, O_RDWR | O_CREAT, 0644);
   0x00000040 <+28>:    mov     r2, #420        ; 0x1a4
   0x00000048 <+36>:    mov     r1, #66 ; 0x42
   0x0000004c <+40>:    movw    r0, #0
   0x00000050 <+44>:    movt    r0, #0
   0x00000054 <+48>:    bl      0x54 <hello_init+48>

22              if (IS_ERR(filp)) 
23                      printk("create file error\\n");

0x20 = 32,+32 对应第 19 行代码。

19              *a = 100;
   0x00000028 <+4>:     mov     r4, #0
   0x0000003c <+24>:    mov     r3, #100        ; 0x64
   0x00000044 <+32>:    str     r3, [r4]

打断点

(gdb) b *hello_init+0x20
Breakpoint 1 at 0x44: file /home/liyongjun/project/board/buildroot/override/Vexpress_4.15/file/file.c, line 19.

瞬间定位到 file.c, line 19.

以上是关于gdb 定位代码位置的主要内容,如果未能解决你的问题,请参考以下文章

为什么gdb core文件的时候无法定位出出问题的地方

Linux系统下GDB调试

怎样用GDB调试core文件

Linux开发工具vim以及git的使用详解

Linux中的gdb调试

Linux编程基础——GDB(设置断点)