dai*_*isy 2 c linux reflection debugging gcc
如何在GCC中将函数名称和行号映射回内存地址?
即假设C语言的原型:
void func() {
// Get the address of caller , maybe this could be avoided
MemoryAddress = get_call_address();
// Which line from source code is executing , which calls func()
LineNumber = get_lineno_from_symbol ( &MemoryAddress );
// Grab the name who calls func()
FunctionName = get_func_from_symbol ( &MemoryAddress );
}
Run Code Online (Sandbox Code Playgroud)
那么GCC提供的任何现有API都可以满足我的要求吗?
非常感谢你的回应;-P
如果包含标题
#include <execinfo.h>
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该backtrace()函数来确定调用行的地址,并backtrace_symbols()检索函数的名称.但是,这不会给你行号(虽然它可能提供足够的信息来帮助调试,如果这是你需要的).
如果您确实需要行号,那么您需要:
-g标记为gcc)addr2line程序将地址(从中检索backtrace())转换为文件/行号引用.例如,您可以使用程序调用此方法system().它会将输出发送到stdout,但您可以使用重定向或管道来捕获输出(如果需要).