Debugging 对于设置常规帧指针的函数,是否有一个简单的DWARF CFI表示? 我在C、C++和汇编的混合编程中,我想从代码的任何部分得到可靠的回溯。 这对于C和C++代码来说是很好的,因为我可以用 -g/>代码生成调试信息,这对于现代x86编译器和平台生成调试信息,这意味着最终二进制包括CFI(调用帧信息)。此信息允许向后遍历当前调用堆栈中的函数。它可以支持复杂的场景,例如没有基指针的函数以及rsp以动态方式更改的函数。对于C和C++代码,我不必关心:编译器只生成优化的代码,即使是优化的代码。

Debugging 对于设置常规帧指针的函数,是否有一个简单的DWARF CFI表示? 我在C、C++和汇编的混合编程中,我想从代码的任何部分得到可靠的回溯。 这对于C和C++代码来说是很好的,因为我可以用 -g/>代码生成调试信息,这对于现代x86编译器和平台生成调试信息,这意味着最终二进制包括CFI(调用帧信息)。此信息允许向后遍历当前调用堆栈中的函数。它可以支持复杂的场景,例如没有基指针的函数以及rsp以动态方式更改的函数。对于C和C++代码,我不必关心:编译器只生成优化的代码,即使是优化的代码。,debugging,x86,nasm,backtrace,dwarf,Debugging,X86,Nasm,Backtrace,Dwarf,对于我用nasm编写的x86汇编代码,CFI是一个问题。nasm和语法兼容的竞争对手yasm对生成DWARF信息的支持有限,但它主要涉及到指向行映射的指令指针,不包括任何CFI1(事实上,an程序集无法真正生成此命令,即使它需要,因为程序集级别太低,无法明确地表达调用/返回语义). 我想为汇编生成的例程添加CFI,但我不需要CFI的全部灵活性来根据对rsp的指令粒度更改来识别CFA,诸如此类:我非常乐意为每个汇编函数在rbp中设置一个标准帧指针,并使其在整个函数中保持不变。DWARF3是否通过

对于我用nasm编写的x86汇编代码,CFI是一个问题。nasm和语法兼容的竞争对手yasm对生成DWARF信息的支持有限,但它主要涉及到指向行映射的指令指针,不包括任何CFI1(事实上,an程序集无法真正生成此命令,即使它需要,因为程序集级别太低,无法明确地表达调用/返回语义).

我想为汇编生成的例程添加CFI,但我不需要CFI的全部灵活性来根据对
rsp
的指令粒度更改来识别CFA,诸如此类:我非常乐意为每个汇编函数在
rbp
中设置一个标准帧指针,并使其在整个函数中保持不变。DWARF3是否通过一点简单的CFI信息支持这个场景,希望我可以用汇编宏生成一个CFI信息


1 yasm的实验性“nextgen”确实支持CFI指令,但该项目已经5年没有更新了。有一种方法可以将此支持移植回yasm的主线版本