我目前正在将我们的代码从alpha (Tru64)移植到C语言的i386处理器(Linux)上,在我研究移植我们的异常处理例程之前,一切都进行得相当顺利。目前我们有一个父进程,它产生很多子进程,并且当这些子进程中的一个致命的(未绑定的)时,我有捕获该进程的例程。
我目前正在努力寻找实现回溯例程的最佳方法,该例程可以在错误日志中列出函数地址,目前我的例程只打印导致异常的信号和异常限定符代码。
任何帮助都会很受欢迎,理想情况下,我会为所有处理器编写错误处理,但是在这个阶段,我只关心i386和x86_64。
谢谢
标记
发布于 2010-03-08 20:04:13
来自execinfo.h的glibc函数backtrace()和backtrace_symbols()可能会有用。
发布于 2010-03-08 18:28:42
你可以看看http://tlug.up.ac.za/wiki/index.php/Obtaining_a_stack_trace_in_C_upon_SIGSEGV。它涵盖了您需要的功能。但是,您必须针对libgdb和libdl进行链接,使用-rdynamic进行编译(在可执行文件中包含更多符号),并放弃使用某些优化。
发布于 2010-03-08 20:00:08
有两个GNU (non-POSIX)函数可以帮助您- backtrace()和backtrace_symbols() -第一个返回函数地址数组,第二个将地址解析为名称。不幸的是,静态函数的名称无法解析。
为了让它正常工作,你需要使用-rdynamic标志来编译你的二进制文件。
https://stackoverflow.com/questions/2400424
复制相似问题