C语言调试的几种方法
2015-05-31 18:33
288 查看
linux系统下,在不gdb调试的情况下,我们如何解决程序崩溃问题呢?首先想到的就是添加log日志信息,其次还有以下几种方法可以帮助我们分析存在的问题:
(一)add2line
程序崩溃时会打出一些崩溃地方的地址空间,可以使用此方法显示崩溃地方对应的函数或者某一行,使用方法如下:
echo "0x63d8a9" | addr2line -e bin/httpd -f : 崩溃查对应代码行
(二)把出错时的堆栈信息打印出来,类似gdb调试中bt功能。
参考:
1、http://www.justcodeit.info/
(一)add2line
程序崩溃时会打出一些崩溃地方的地址空间,可以使用此方法显示崩溃地方对应的函数或者某一行,使用方法如下:
echo "0x63d8a9" | addr2line -e bin/httpd -f : 崩溃查对应代码行
(二)把出错时的堆栈信息打印出来,类似gdb调试中bt功能。
#define BACKTRACE() \ do { \ void* array[20]; \ size_t size; \ char** strings; \ size_t i; \ size = backtrace(array, 20); \ strings = backtrace_symbols(array, size); \ for (i=0; i< size; i++) { \ printf("%s\n", strings[i]); \ } \ free(strings); \ } while(0) static void signal_handler(int sig) { switch(sig) { case SIGSEGV: /* segmentation fault */ case SIGFPE: /* erroneous arithmetic operation */ case SIGBUS: /* bus error */ BACKTRACE(); exit(EXIT_FAILURE); break; default: break; } } int main() { signal(SIGSEGV, signal_handler); signal(SIGFPE, signal_handler); signal(SIGBUS, signal_handler); }
参考:
1、http://www.justcodeit.info/
相关文章推荐
- 一起talk C栗子吧(第四回:C语言实例--斐波那契数列)
- 浅析c++中virtual关键字
- 浅谈c语言的变量与函数存储类型
- (各个公司面试原题)在线做了一套CC++综合测试题,也来测一下你的水平吧(一)
- c++基础学习(03PM)
- 内联函数的好处?非内联函数被调用的过程是怎么样的?
- HDU 2024 C语言合法标识符
- Effective C++ 之 Item 4:确定对象被使用前已先被初始化
- 重载,覆盖与隐藏
- C++中placement new操作符(经典)
- 【C++总结】对象和类,this指针
- C++中构造函数后的初始化列表
- 通讯录(C语言、文件保存)
- c(API) 对文件内容的增删查改
- 一起talk C栗子吧(第三回:C语言实例--求阶乘)
- C++中限制对象的申请
- C语言关于线性表的相关操作
- C语言实现链表插入,删除相关操作
- C++ 学习笔记(四) GCC常用参数
- C/C++中extern关键字详解