出于调试原因,我试图打印进行非法内存访问的函数名称(例如,超出范围)。
我编写了一个SIGSEGV信号处理程序来打印指令指针(IP)和故障内存地址,但我无法创建一个方法,以便我可以获取函数名而不是IP。
有没有办法修改信号处理程序的签名以将__ FUNCTION __变量作为参数传递,还是有其他方法可以执行此操作?
注意:程序是用C语言编写的,我试图在Linux环境中执行此操作。
答案 0 :(得分:3)
您可以使用backtrace
和backtrace_symbols_fd
使用调用堆栈打印函数名称。
查看backtrace
和backtrace_symbols
或backtrace_symbols_fd
的手册页。
这里有一个例子: