rCore-Tutorial-Book-v3
rCore-Tutorial-Book-v3 copied to clipboard
添加GDB Debug大致流程
不太会这个标记语言的语法,可能修要大修😂
最近忙于考试,可能要考完之后才能合并了,请见谅。
最近忙于考试,可能要考完之后才能合并了,请见谅。
ok, 没问题。
(找不到改成draft的按钮了) 在macos上调试还有一些奇怪的bug。同样的代码,同样的qemu,在mac上跑会在pc=0x2000000(忘了几个0了)和0x0产生load fault 中断,linux里就没问题。 还需要更多调查
@leoleoasd hi 我按照你的说明配置以后,断点处似乎无法停下,他就直接进入这样的界面了:
尽管我:
抱歉,过的有点久,我可能不能完整回忆了;你可以试试:
- 如果qemu用的是gdb启动,在gdb连接前应该不会开始运行,可以用于判断qemu是否配置正确
- 可以用命令行手动调用gdb试试,印象里
target remote
后也是需要手动continue
还是啥来着,来继续运行,在运行开始前可以用l
看看是否能正确看到源代码,以及用b _rust_main
看看能不能正确找到断点 - 如果上面成功、且能看到rust源代码(而不是机器语言parse出的汇编),那应该就是ide配置问题,否则就是gdb的配置(如 directory mapping)啥的
- 同时可以参考这个: https://leoleoasd.me/2020/11/08/debug-pintos-in-clion/ 是配置调试另一个操作系统实验(PintOS)的gdb的过程,你可以参考一下
感谢回复。
我全部在 terminal 下运行确实最开始 target remote 后会停下。如果前面有 file target/riscv64gc-unknown-none-elf/release/os
那么能够 b _rust_main
( 如果只有 target remote 则不行,符合预期)或者 b os::rust_main
(这个是 main.rs 里的,前面那个是汇编里的)
但是在 clion 里,我发现它在最开头就不能停下:
另外,我不太理解你 commit 里 mapping 里的 remote 只写一个 src 是啥意思呢,感觉没用到
clion里的remote配置错了。在产出的binary的调试信息里,没有完整路径(为了保护隐私),应该就是src之类的。你应该能在clion的gdb log里找到类似could not find file xxx
之类的错误提示。所以实际上断点没加上去
同时,clion在开始gdb后就会自动continue,所以如果没hit断点就会一直运行,也符合预期。
在命令行gdb看看binary里面的文件名和路径名是什么,对应改一下
感谢,我目前这么配置了一下,ok 了,应该就是 mapping 的问题,学到了。
很好的建议和交流!