chenzhiy2001
released this
20 Apr 07:42
·
169 commits
to master
since this release
What's Changed
- 支持一个断点对应多个断点组
- 边界断点现在包含在断点组里面,而不是排除在断点组外,从而排除了由于当前在用户态,内核态符号表已经被卸载,造成无法设置位于内核的边界断点的情况
- 现在没有入口断点,只有出口断点。原来的内核入口断点改为用户态程序的出口断点(这个出口断点在rCore-Tutorial-v3用户库代码里面,属于一个断点对应多个断点组的情况)
- 之前在内核出口边界设用户态程序开头位置的断点,然后直接 continue 就可以跳转到这个断点。这是因为
rCore-Tutorial-v3 用了跳板页(详见https://scpointer.github.io/rcore2oscomp/docs/lab2/gdb.html)
。在没有跳板页,且是双页表的 OS 的情况下,这个策略不会起作用。这个更新中使用了更稳妥的策略:通过不
断的自动的单步(step instruction)每单步一次就查看内存地址来确定是否到达新的特权级。 - 将断点组切换的逻辑整理为一个状态机,提高代码的抽象程度,使得对断点组切换机制的学习、维护和升级变得
容易 - 添加钩子断点(就是某个断点触发后可以执行一段用户自定义的 GDB 行为),从而可以在内核获取下一个进程
的进程名 - 用户可以在 launch.json 里提交自定义代码,自定义 1)文件名转断点组,2)断点组名转符号表所在的位置 3)
钩子断点的位置钩子断点触发之后的信息收集行为 - 添加足够多的代码抽象(断点,钩子断点,状态机),方便同学维护以及添加新功能。
- 边界断点现在除了通过配置文件添加,也可以通过右键菜单添加(甚至可以取消)
- 删除冗余代码,类似"地址空间"的变量名全部改成“断点组”。难以辨识的无意义变量名(比如 num)改成有意义
的 - 解决了由调试器自动设置的断点不会在 VSCode 里面显示出来的问题
- 添加了 showInformationMessage 函数,代替 mibase.ts 中无法使用的 console.log
- launch.json 支持${workspacefolder}插值(之前有一些参数是不能用这个插值的),大大提升了配置文件的便
携性 - 修改插件本身的编译配置文件 tsconfig.json 和 .vscodeignore,使得编译本插件的时候忽略文档文件夹和根
文件夹下 60m 的“演示视频.mp4” 以及 3m 的“最终报告.pdf”,从而极大减小编译出的插件二进制包的大小 - 修改 __metadata 属性
- 通过 Github Action 自动上传到 VS Code Extension Marketplace 和 Open VSX Registry
- 编写插件商店的主页
README-ExtensionMarkets.md
。这个主页不会直接用相对路径链接到docs/
文件夹和根
目录下的视频、文档,所以可以放心地在编译时去掉它们。插件商店的主页会链接到 Github 仓库主页
Full Changelog: https://github.com/chenzhiy2001/code-debug/blob/master/docs/2024-04-19.md