Gdb:目标远程连接在错误的地方?



我正在学习如何使用OpenOCD和GDB根据Rust嵌入式书。

当您连接到正在运行的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

如果您断开连接并重新连接,远程目标可能仍然有$pc值为0x08000bbe,这是GDB将看到的。

正如在注释中提到的,GDB只是试图将$pc值映射到程序中的调试信息。??显示GDB在地址0x0上找不到任何符号。而GDB确实在地址0x08000bbe附近找到了符号__c_m_sh_syscall。然而,在这一点上,这些信息并没有多大意义,您还没有将任何东西加载到目标上,所以在函数__c_m_sh_syscall中您并不是真正的,它只是远程的当前地址。

当您执行load命令时,这是GDB将可执行文件加载到目标上,并写入$pc的时候。

TL,博士;如果你的工作流程是target remote,然后是load,不要担心target remote之后的目标状态,这只是当你连接时目标中碰巧出现的随机状态。

最新更新