您的位置:首页 > 编程语言 > C语言/C++

C语言调试的几种方法

2015-05-31 18:33 288 查看
linux系统下,在不gdb调试的情况下,我们如何解决程序崩溃问题呢?首先想到的就是添加log日志信息,其次还有以下几种方法可以帮助我们分析存在的问题:

(一)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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: