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 定位代码位置的主要内容,如果未能解决你的问题,请参考以下文章