【问题标题】:Skip library function in arm assembly GDB在 arm 程序集 GDB 中跳过库函数
【发布时间】: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 代码。我需要跳过外部库函数,只浏览我的代码。该怎么做?

【问题讨论】:

    标签: assembly gdb arm


    【解决方案1】:

    在 GDB 中使用 finish 命令让应用程序继续运行,直到它从当前堆栈帧返回。 (可简写为fin。)

    【讨论】:

      【解决方案2】:

      使用ni (nexti) 代替sistep over function calls

      nexti
      nexti arg
      ni

      执行一条机器指令,但如果它是一条 函数调用,直到函数返回。 参数是重复计数,如next

      【讨论】:

      • 这似乎没有通过整个函数,我不得不多次发出命令直到返回..
      • 您很可能需要汇编器中的额外 .debug 信息才能使其工作。例如,.type foo3, %function;.sizeof foo3, . - foo3;.fnend 等。这适用于直接 C 代码或适当注释的汇编程序。
      • @Madushan:您应该在输入printf 之前 使用它,即在mov r1,r3 之后(或者您可以只使用ni 而不是si all时间)。
      【解决方案3】:

      虽然完成(一旦您输入函数),但如果您需要重复执行此操作,还请查看 gdb 的 skip 命令。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2013-08-22
        • 1970-01-01
        • 2012-03-29
        相关资源
        最近更新 更多