获取进行(非法)内存访问的函数名称

时间:2016-02-22 15:18:56

标签: c memory signals

出于调试原因,我试图打印进行非法内存访问的函数名称(例如,超出范围)。

我编写了一个SIGSEGV信号处理程序来打印指令指针(IP)和故障内存地址,但我无法创建一个方法,以便我可以获取函数名而不是IP。

有没有办法修改信号处理程序的签名以将__ FUNCTION __变量作为参数传递,还是有其他方法可以执行此操作?

注意:程序是用C语言编写的,我试图在Linux环境中执行此操作。

1 个答案:

答案 0 :(得分:3)

您可以使用backtracebacktrace_symbols_fd使用调用堆栈打印函数名称。

查看backtracebacktrace_symbolsbacktrace_symbols_fd的手册页。

这里有一个例子:

http://man7.org/linux/man-pages/man3/backtrace.3.html