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

标签 c memory signals

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

我已经编写了一个 SIGSEGV 信号处理程序来打印指令指针 (IP) 和错误的内存地址,但是我无法创建一个方法来获取函数名称而不是 IP。

有没有办法修改信号处理程序的签名以将 __ FUNCTION __ 变量作为参数传递,或者是否有其他方法可以做到这一点?

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

最佳答案

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

查看 backtracebacktrace_symbolsbacktrace_symbols_fd 的手册页。

这里是一个例子:

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

关于c - 获取进行(非法)内存访问的函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35557323/

相关文章:

c# - 为什么我超出了内存限制? C#

c - 按位除以 2 的倍数

编译 LD_PRELOAD 包装器的冲突类型

c - 使用ASLR获取随机匿名映射地址

c++ - 数据类型范围作为节省内存的措施是否重要?

c++ - 如何正确处理 SIGBUS 以便我可以继续搜索地址?

multithreading - Posix 线程 :Signal a thread that is running in while loop

c++ - Qt:在 QWebView::linkClicked(QUrl) 上响应时出现问题 - 插槽信号问题

python - 防止失败的 glog CHECK 语句终止程序

c - 通过glib队列传递数据结构