[英]How to map a function name and line number by a memory address in C language?
如何在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 );
}
那么,是否有GCC提供的任何现有API可以满足我的要求?
非常感谢您的任何答复;-P
如果包含标题
#include <execinfo.h>
那么您可以使用backtrace()
函数确定调用行的地址,并使用backtrace_symbols()
检索函数的名称。 但是,这不会给您行号(尽管如果您需要的话,它可能会提供足够的信息来帮助调试)。
如果您确实需要线号,则需要:
-g
gcc标志) addr2line
程序将地址(从backtrace()
检索)转换为文件/行号引用。 例如,您可以使用system()
从程序中调用它。 它将把输出发送到stdout,但是如果需要,您可以使用重定向或管道来捕获输出。 使用gcc,您可以使用回溯功能来做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.