繁体   English   中英

如何用C语言的内存地址映射功能名称和行​​号?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM