C 获取进行(非法)内存访问的函数名
出于调试原因,我试图打印进行非法内存访问(例如超出范围)的函数的名称 我已经编写了一个SIGSEGV信号处理程序来打印指令指针(IP)和故障内存地址,但是我无法创建一个方法,以便能够获取函数名而不是IP 是否有方法修改信号处理程序的签名,以将函数作为参数传递,或者是否有其他方法C 获取进行(非法)内存访问的函数名,c,memory,signals,C,Memory,Signals,出于调试原因,我试图打印进行非法内存访问(例如超出范围)的函数的名称 我已经编写了一个SIGSEGV信号处理程序来打印指令指针(IP)和故障内存地址,但是我无法创建一个方法,以便能够获取函数名而不是IP 是否有方法修改信号处理程序的签名,以将函数作为参数传递,或者是否有其他方法 注意:该程序是用C编写的,我尝试在Linux环境中执行此操作。您可以使用backtrace和backtrace\u symbols\u fd打印带有调用堆栈的函数名 检查手册页中是否有backtrace和backtrac
注意:该程序是用C编写的,我尝试在Linux环境中执行此操作。您可以使用
backtrace
和backtrace\u symbols\u fd
打印带有调用堆栈的函数名
检查手册页中是否有backtrace
和backtrace\u符号
或backtrace\u符号
例如:
这有什么用?对于未定义的行为,您甚至不能指望获得SEGFULT。在开发过程中使用调试器,可能是对核心转储进行后期调试。在运行时,尝试优雅的终止,就这样。而
\uuuu函数\uuuu
不是一个变量,而是一个预处理器宏。为什么不使用这样的调试工具呢?它可以帮助您处理与内存调试相关的所有事情。您需要获取线程的堆栈跟踪(回溯)。看看这个。这里有更多细节:@Olaf我试图捕获所有函数对定义良好的堆分配内存的每次内存访问。我认为函数是一个变量,因为gcc文档说明了这一点。()