出于调试原因,我试图打印进行非法内存访问(例如超出范围)的函数的名称。
我已经编写了一个 SIGSEGV 信号处理程序来打印指令指针 (IP) 和错误的内存地址,但是我无法创建一个方法来获取函数名称而不是 IP。
有没有办法修改信号处理程序的签名以将 __ FUNCTION __ 变量作为参数传递,或者是否有其他方法可以做到这一点?
注意:该程序是用 C 编写的,我试图在 Linux 环境中执行此操作。
最佳答案
您可以使用backtrace
和backtrace_symbols_fd
来打印函数名称和调用堆栈。
查看 backtrace
和 backtrace_symbols
或 backtrace_symbols_fd
的手册页。
这里是一个例子:
关于c - 获取进行(非法)内存访问的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557323/