feat(debug): 【任务发布】实现新的内核traceback机制
目前的问题
目前使用mini-backtrace进行内核栈回溯。
- 由于mini-backtrace不支持riscv64,因此在riscv下,我们暂时无法traceback。
- 内核栈回溯所需的符号表是使用C代码生成的,且大小比较大。
- 无法进行栈帧展开以释放资源。
需求
- 要实现的新的traceback机制,需要使用纯rust进行编写
- 支持x86_64和riscv
- 要适当的压缩符号表
- 要支持栈帧展开(可作为后续pr引入)
具体实现感觉可以引入rust官方的backtrace相关的库。
如果是使用基于fp进行的内核栈回溯,应该很好实现,这种方式只能打印调用链不能释放资源。如果需要进行栈帧回溯并且释放资源,则可能需要基于DWARF进行。 基于fp的回溯,只需要让内核在编译的时候指定编译参数就可以。如果内核支持initrd,也许可以将符号表放到initrd中?
如果是使用基于fp进行的内核栈回溯,应该很好实现,这种方式只能打印调用链不能释放资源。如果需要进行栈帧回溯并且释放资源,则可能需要基于DWARF进行。 基于fp的回溯,只需要让内核在编译的时候指定编译参数就可以。如果内核支持initrd,也许可以将符号表放到initrd中?
目前现有的traceback就是生成了一个符号表然后链接到内核来实现的。主要是想实现资源释放这个
panic释放资源这个没实现,暂时不计划了。我感觉,我们要对panic的使用更加慎重。各种api应该要慢慢修改,改为发sigkill之类的来终结当前进程。而不是panic
panic释放资源是有的吧
panic释放资源是有的吧
我指的是展开frame,把里面的那些东西给释放掉哦
对啊,基于unwind的panic会释放栈帧内的资源的啊