DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

feat(debug): 【任务发布】实现新的内核traceback机制

Open fslongjin opened this issue 1 year ago • 2 comments

目前的问题

目前使用mini-backtrace进行内核栈回溯。

  1. 由于mini-backtrace不支持riscv64,因此在riscv下,我们暂时无法traceback。
  2. 内核栈回溯所需的符号表是使用C代码生成的,且大小比较大。
  3. 无法进行栈帧展开以释放资源。

需求

  1. 要实现的新的traceback机制,需要使用纯rust进行编写
  2. 支持x86_64和riscv
  3. 要适当的压缩符号表
  4. 要支持栈帧展开(可作为后续pr引入)

具体实现感觉可以引入rust官方的backtrace相关的库。

fslongjin avatar Apr 23 '24 12:04 fslongjin

如果是使用基于fp进行的内核栈回溯,应该很好实现,这种方式只能打印调用链不能释放资源。如果需要进行栈帧回溯并且释放资源,则可能需要基于DWARF进行。 基于fp的回溯,只需要让内核在编译的时候指定编译参数就可以。如果内核支持initrd,也许可以将符号表放到initrd中?

Godones avatar Jul 01 '24 11:07 Godones

如果是使用基于fp进行的内核栈回溯,应该很好实现,这种方式只能打印调用链不能释放资源。如果需要进行栈帧回溯并且释放资源,则可能需要基于DWARF进行。 基于fp的回溯,只需要让内核在编译的时候指定编译参数就可以。如果内核支持initrd,也许可以将符号表放到initrd中?

目前现有的traceback就是生成了一个符号表然后链接到内核来实现的。主要是想实现资源释放这个

fslongjin avatar Jul 03 '24 06:07 fslongjin

panic释放资源这个没实现,暂时不计划了。我感觉,我们要对panic的使用更加慎重。各种api应该要慢慢修改,改为发sigkill之类的来终结当前进程。而不是panic

fslongjin avatar Jun 11 '25 18:06 fslongjin

panic释放资源是有的吧

Godones avatar Jun 12 '25 02:06 Godones

panic释放资源是有的吧

我指的是展开frame,把里面的那些东西给释放掉哦

fslongjin avatar Jun 12 '25 02:06 fslongjin

对啊,基于unwind的panic会释放栈帧内的资源的啊

Godones avatar Jun 12 '25 02:06 Godones