Gdb:目标远程连接错误的地方?
Gdb: target remote connects at the wrong place?
我正在根据 Rust Embedded Book.
学习如何使用 OpenOCD 和 GDB
连接到 运行 OpenOCD 的那一刻:
(gdb) target remote :3333
Remote debugging using :3333
0x00000000 in ?? ()
有些东西坏了,我知道没有任何改变,现在我看到这样的东西:
(gdb) target remote :3333
Remote debugging using :3333
0x08000bbe in __c_m_sh_syscall ()
此后将无法正常工作。 0x00000000 in ?? ()
行是什么意思,如何恢复正常?
当您使用 target remote
连接到目标时,GDB 会向目标询问其当前寄存器状态,包括 $pc
值。 GDB 不会(在那个时候)以任何方式修改远程状态。
当您第一次连接遥控器时,报告的 $pc
值为 0x0
。如果遥控器由于某种原因改变了状态,比方说,你 运行 遥控器上的东西,那么 $pc
值可能会改变,比如 0x08000bbe
.
如果您随后断开连接并重新连接,远程目标可能仍然具有 0x08000bbe
的 $pc
值,这是 GDB 将看到的值。
如评论中所述,GDB 只是试图将 $pc
值映射到程序中的调试信息。 ??
表明 GDB 在地址 0x0
找不到任何符号。虽然 GDB 确实在地址 0x08000bbe
附近找到了符号 __c_m_sh_syscall
。然而,这些信息在这一点上没有多大意义,您还没有将任何东西加载到目标上,所以您在函数 __c_m_sh_syscall
中并不是 真的,它只是遥控器的当前地址。
当您执行 load
命令时,这是 GDB 将可执行文件加载到目标并写入 $pc
.
的时候
TL;DR;如果您的工作流程是 target remote
然后 load
,请不要担心 target remote
之后目标的状态,这就是 运行dom 状态恰好是什么连接时在目标中。
我正在根据 Rust Embedded Book.
学习如何使用 OpenOCD 和 GDB连接到 运行 OpenOCD 的那一刻:
(gdb) target remote :3333
Remote debugging using :3333
0x00000000 in ?? ()
有些东西坏了,我知道没有任何改变,现在我看到这样的东西:
(gdb) target remote :3333
Remote debugging using :3333
0x08000bbe in __c_m_sh_syscall ()
此后将无法正常工作。 0x00000000 in ?? ()
行是什么意思,如何恢复正常?
当您使用 target remote
连接到目标时,GDB 会向目标询问其当前寄存器状态,包括 $pc
值。 GDB 不会(在那个时候)以任何方式修改远程状态。
当您第一次连接遥控器时,报告的 $pc
值为 0x0
。如果遥控器由于某种原因改变了状态,比方说,你 运行 遥控器上的东西,那么 $pc
值可能会改变,比如 0x08000bbe
.
如果您随后断开连接并重新连接,远程目标可能仍然具有 0x08000bbe
的 $pc
值,这是 GDB 将看到的值。
如评论中所述,GDB 只是试图将 $pc
值映射到程序中的调试信息。 ??
表明 GDB 在地址 0x0
找不到任何符号。虽然 GDB 确实在地址 0x08000bbe
附近找到了符号 __c_m_sh_syscall
。然而,这些信息在这一点上没有多大意义,您还没有将任何东西加载到目标上,所以您在函数 __c_m_sh_syscall
中并不是 真的,它只是遥控器的当前地址。
当您执行 load
命令时,这是 GDB 将可执行文件加载到目标并写入 $pc
.
TL;DR;如果您的工作流程是 target remote
然后 load
,请不要担心 target remote
之后目标的状态,这就是 运行dom 状态恰好是什么连接时在目标中。