c – 从信号处理程序打印堆栈跟踪
发布时间:2020-12-16 03:48:20 所属栏目:百科 来源:网络整理
导读:我需要从Linux上运行的64位多线程C应用程序的信号处理程序打印堆栈跟踪.虽然我找到了几个代码示例,但它们都没有编译.我的阻塞点是从ucontext_t结构获取调用者(生成信号的点)地址.我能找到的所有信息都指向EIP寄存器为ucontext.gregs [REG_EIP]或ucontext.eip
我需要从Linux上运行的64位多线程C应用程序的信号处理程序打印堆栈跟踪.虽然我找到了几个代码示例,但它们都没有编译.我的阻塞点是从ucontext_t结构获取调用者(生成信号的点)地址.我能找到的所有信息都指向EIP寄存器为ucontext.gregs [REG_EIP]或ucontext.eip.看起来它们都是x86特有的.我需要适用于Intel和AMD CPU的64位兼容代码.有人可以帮忙吗? 最佳答案
有一个glibc函数回溯.手册页列出了调用的示例:
有关更多上下文,请参见手册页. 很难说这是否真的可以保证从信号处理程序中起作用,因为posix只列出了几个可以保证工作的重入函数.请记住:当您的进程的其余部分正好在malloc调用的中间时,可以调用信号处理程序. 我的猜测是,这通常有效,但可能会不时失败.对于调试,这可能已经足够了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |