DWARF DI生成的C代码?

时间:2016-10-08 01:01:37

标签: c dwarf

我似乎找不到任何关于DWARF DI格式的好文档来回答我的问题。我正在编写一种编译为C的语言,有没有什么方法可以将DWARF调试信息生成到C代码中,还是仅仅是汇编代码?

是否不可能将调试信息添加到某些(生成的)C代码中,而不是使用不像#line#file指令那样好的原始内容?

2 个答案:

答案 0 :(得分:2)

如果您认为编译器可以发出汇编,那么可以对某些事情进行处理。有关此示例,请参阅my favorite gdb test case

但通常不会这样做。正确起来可能很难。现在最好将编译器编写为GCC或LLVM的直接前端;或编写gdb或lldb帮助程序脚本以使调试生成的C代码更简单。

答案 1 :(得分:0)

我猜你会用调试信息(-g)编译生成的C,所以你要问的是如何有更多描述你的高级语言的DWARF记录。可以想象的方法:

(1)编辑目标文件以扩充C代码的DWARF记录。我不知道现有的工具,可能适用于libdwarfpyelftools

(2)找到一种通过编译器“走私”额外DWARF记录的方法,例如:有点像链接器命令可以通过#pragmas给出。但是我不知道支持这个的编译器。

(3)LLVM支持IR representation 中的调试记录。您可以使用clang将生成的C编译为IR(clang foo.c -S -emit-llvm -target arm -o foo.ll),然后扩充foo.ll,然后生成.o(llc foo.ll),准备链接。

第三种选择似乎最容易。