rCore-Tutorial-Book-v3 icon indicating copy to clipboard operation
rCore-Tutorial-Book-v3 copied to clipboard

添加GDB Debug大致流程

Open leoleoasd opened this issue 3 years ago • 3 comments

不太会这个标记语言的语法,可能修要大修😂

leoleoasd avatar Jun 03 '21 08:06 leoleoasd

最近忙于考试,可能要考完之后才能合并了,请见谅。

wyfcyx avatar Jun 11 '21 04:06 wyfcyx

最近忙于考试,可能要考完之后才能合并了,请见谅。

ok, 没问题。

leoleoasd avatar Jun 11 '21 05:06 leoleoasd

(找不到改成draft的按钮了) 在macos上调试还有一些奇怪的bug。同样的代码,同样的qemu,在mac上跑会在pc=0x2000000(忘了几个0了)和0x0产生load fault 中断,linux里就没问题。 还需要更多调查

leoleoasd avatar Jun 17 '21 10:06 leoleoasd

@leoleoasd hi 我按照你的说明配置以后,断点处似乎无法停下,他就直接进入这样的界面了: image 尽管我: image

LimingFang avatar Jan 27 '23 15:01 LimingFang

抱歉,过的有点久,我可能不能完整回忆了;你可以试试:

  1. 如果qemu用的是gdb启动,在gdb连接前应该不会开始运行,可以用于判断qemu是否配置正确
  2. 可以用命令行手动调用gdb试试,印象里target remote后也是需要手动continue还是啥来着,来继续运行,在运行开始前可以用 l 看看是否能正确看到源代码,以及用 b _rust_main 看看能不能正确找到断点
  3. 如果上面成功、且能看到rust源代码(而不是机器语言parse出的汇编),那应该就是ide配置问题,否则就是gdb的配置(如 directory mapping)啥的
  4. 同时可以参考这个: https://leoleoasd.me/2020/11/08/debug-pintos-in-clion/ 是配置调试另一个操作系统实验(PintOS)的gdb的过程,你可以参考一下

leoleoasd avatar Jan 27 '23 15:01 leoleoasd

感谢回复。 我全部在 terminal 下运行确实最开始 target remote 后会停下。如果前面有 file target/riscv64gc-unknown-none-elf/release/os 那么能够 b _rust_main( 如果只有 target remote 则不行,符合预期)或者 b os::rust_main(这个是 main.rs 里的,前面那个是汇编里的) 但是在 clion 里,我发现它在最开头就不能停下: image

另外,我不太理解你 commit 里 mapping 里的 remote 只写一个 src 是啥意思呢,感觉没用到

LimingFang avatar Jan 27 '23 16:01 LimingFang

clion里的remote配置错了。在产出的binary的调试信息里,没有完整路径(为了保护隐私),应该就是src之类的。你应该能在clion的gdb log里找到类似could not find file xxx 之类的错误提示。所以实际上断点没加上去

同时,clion在开始gdb后就会自动continue,所以如果没hit断点就会一直运行,也符合预期。

在命令行gdb看看binary里面的文件名和路径名是什么,对应改一下

leoleoasd avatar Jan 27 '23 16:01 leoleoasd

感谢,我目前这么配置了一下,ok 了,应该就是 mapping 的问题,学到了。 image

LimingFang avatar Jan 28 '23 05:01 LimingFang

很好的建议和交流!

chyyuu avatar Feb 16 '23 02:02 chyyuu