【发布时间】:2013-09-17 05:00:56
【问题描述】:
我需要调试这部分arm汇编代码,
for3:
ldrb r3,[r4,#0]
ldr r0,=format2
mov r1,r3
bl printf
add r4,r4,#1
cmp r3,#'\0'
bne for3
它包含来自 c 的 printf 语句,当我调试它时,它会经过数百行的 printf 代码。我需要跳过外部库函数,只浏览我的代码。该怎么做?
【问题讨论】:
我需要调试这部分arm汇编代码,
for3:
ldrb r3,[r4,#0]
ldr r0,=format2
mov r1,r3
bl printf
add r4,r4,#1
cmp r3,#'\0'
bne for3
它包含来自 c 的 printf 语句,当我调试它时,它会经过数百行的 printf 代码。我需要跳过外部库函数,只浏览我的代码。该怎么做?
【问题讨论】:
在 GDB 中使用 finish 命令让应用程序继续运行,直到它从当前堆栈帧返回。 (可简写为fin。)
【讨论】:
使用ni (nexti) 代替si 到step over function calls:
nextinexti argni执行一条机器指令,但如果它是一条 函数调用,直到函数返回。 参数是重复计数,如
next。
【讨论】:
.type foo3, %function; 和 .sizeof foo3, . - foo3; 和 .fnend 等。这适用于直接 C 代码或适当注释的汇编程序。
printf 之前 使用它,即在mov r1,r3 之后(或者您可以只使用ni 而不是si all时间)。
虽然完成(一旦您输入函数),但如果您需要重复执行此操作,还请查看 gdb 的 skip 命令。
【讨论】: