使用backtrace机制帮助debug信息
2011-09-08 15:02
176 查看
线上系统如果出现了错误而且没有堆栈信息,那将是多么的恐怖!
所以在系统可能出现错误的地方我们都要尽可能的将信息描述清楚,其中最重要的信息包括堆栈调用以及堆栈变量;
堆栈调用的打印是可以借助backtrace机制实现的,下面记录一下其用法。
以下函数说明来自:http://www.gnu.org/s/libc/manual/html_node/Backtraces.html
int backtrace (void **buffer, int size)
The
char ** backtrace_symbols (void *const *buffer, int size)
The
abi::__cxa_demangle:
http://www.ib.cnea.gov.ar/~oop/biblio/libstdc++/namespaceabi.html
1. backtrace可以在程序运行的任何地方被调用,返回各个调用函数的返回地址,可以限制最大调用栈返回层数。
2. 在backtrace拿到函数返回地址之后,backtrace_symbols可以将其转换为编译符号,这些符号是编译期间就确定的
3. 根据backtrace_symbols返回的编译符号,abi::__cxa_demangle可以找到具体地函数方法
根据以上三个函数我们就可以非常方便的在程序运行的任何时间点拿到调用信息从而辅助调试。
该方法还可以帮助我们调试信号相关功能:http://blogold.chinaunix.net/u/3425/showart_263408.html
所以在系统可能出现错误的地方我们都要尽可能的将信息描述清楚,其中最重要的信息包括堆栈调用以及堆栈变量;
堆栈调用的打印是可以借助backtrace机制实现的,下面记录一下其用法。
以下函数说明来自:http://www.gnu.org/s/libc/manual/html_node/Backtraces.html
int backtrace (void **buffer, int size)
The
backtracefunction obtains a backtrace for the current thread, as a list of pointers, and places the information into buffer.
char ** backtrace_symbols (void *const *buffer, int size)
The
backtrace_symbolsfunction translates the information obtained from the
backtracefunction into an array of strings. The argument buffer should be a pointer to an array of addresses obtained via the
backtracefunction, and size is the number of entries in that array (the return value of
backtrace).
abi::__cxa_demangle:
http://www.ib.cnea.gov.ar/~oop/biblio/libstdc++/namespaceabi.html
1. backtrace可以在程序运行的任何地方被调用,返回各个调用函数的返回地址,可以限制最大调用栈返回层数。
2. 在backtrace拿到函数返回地址之后,backtrace_symbols可以将其转换为编译符号,这些符号是编译期间就确定的
3. 根据backtrace_symbols返回的编译符号,abi::__cxa_demangle可以找到具体地函数方法
根据以上三个函数我们就可以非常方便的在程序运行的任何时间点拿到调用信息从而辅助调试。
该方法还可以帮助我们调试信号相关功能:http://blogold.chinaunix.net/u/3425/showart_263408.html
相关文章推荐
- 30.Oracle数据库SQL开发之 SQLPlus使用——从SQL获取帮助信息
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
- 使用backtrace获取堆栈信息
- 使用反射机制完成学生对象的创建并输出学生信息。
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 使用OutputDebugString帮助调试
- 可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)
- 看好你的门-确保验证机制的安全(1)-使用可靠的敏感信息
- 关于在CentOS中使用gdb出现debuginfos调试信息
- 使用 DEBUG 宏屏蔽调试信息
- MySQL基础之高效使用帮助信息
- 使用Backtrace函数打印调用栈 - Debug居家必备
- 实现应用WebView组件加载使用HTML代码添加的帮助信息
- 使用OutputDebugString帮助调试
- 使用spring事件驱动机制,实现权限信息的自动收集存库
- 服务程序使用OutputDebugString,DbgView接收不到调试信息问题
- Linux 程序开发打印 Debug 信息的使用技巧
- 使用OutputDebugString帮助调试
- 使用OutputDebugString将调试信息输出
- 使用OutputDebugString将调试信息输出