【问题标题】:arm-elf-gdb stepping through the programarm-elf-gdb 单步执行程序
【发布时间】:2013-11-07 21:49:57
【问题描述】:

在我的学校实验室中,我被要求使用 arm-elf-gdb 逐步调试程序(用汇编编写)。当我在 _start 处设置断点然后运行程序并单步执行以显示寄存器的当前值时。但是,当我尝试单步执行时,调试器不会显示寄存器的值。我使用“i r”来显示寄存器的最终值,但我需要看到这些值逐步变化。知道为什么调试器不显示值吗?

提前致谢。

汇编代码:

        .text                          @ Executable code below

_start: .global _start                 @ "_start" is required by the linker
        .global main                   @ "main" is the main program

        b       main                   @ Start the main program

main:                                  @ Entry to function "main"

        mov     r0, #10
        mov     r1, #3
        add     r2, r1, r0             @ r2 = r1 + r0
        sub     r3, r0, r1             @ r3 = r1 - r0
        mul     r1, r0, r1             @ r1 = r0 * r1
        swi     0x11                   @ Software interrupt to terminate

        .end

【问题讨论】:

    标签: assembly gdb arm


    【解决方案1】:

    您可以创建一个 gdb 宏来在每一步之后显示寄存器:

    (gdb) def z
    Type commands for definition of "z".
    End with a line saying just "end".
    >si
    >i r
    >end
    (gdb) z
    r0             0x1  1
    r1             0x69b6cae8   1773587176
    r2             0x0  0
    r3             0x69b6502c   1773555756
    r4             0x620f14c0   1645155520
    r5             0x68613870   1751201904
    r6             0x0  0
    r7             0x632aa214   1663738388
    r8             0x699c5c50   1771854928
    r9             0x632aa20c   1663738380
    

    【讨论】:

      【解决方案2】:

      您可以使用 gdb 的 display 命令。但是您确实需要手动添加所有寄存器。

      display $r0
      display $r1
      ...
      

      您可以使用 gdb 启动脚本(-x 参数)来节省一些输入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多