首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么对一个不定会崩溃的程序进行调试

2013-12-10 
如何对一个不定会崩溃的程序进行调试一个很长的程序,运行一段时间久崩溃,然后调试找不到断点或者无法得知

如何对一个不定会崩溃的程序进行调试
一个很长的程序,运行一段时间久崩溃,然后调试找不到断点或者无法得知是什么原因造成的,用什么方法才比能确切地找出问题所在,最后能详细点
[解决办法]
在程序中增加日志输出,这样能够缩小问题的范围。

引用:
一个很长的程序,运行一段时间久崩溃,然后调试找不到断点或者无法得知是什么原因造成的,用什么方法才比能确切地找出问题所在,最后能详细点

[解决办法]
如果觉得某些地方可能有问题, 可以试下以下的办法
1. 让某些地方故意返回错误(return FAIL, 或者返回错误值),如果是因为返回错误造成的问题,能够比较快找到原因。
2. 让某些地方更加频繁执行(比如说原先很长时间才执行一次的代码改为比较频率执行)
3. 填充错误数据, 如果是在错误数据的情况发生的异常, 故意填充错误数据能够比较快地找到问题发生的地方。
4. 还没想到~~
[解决办法]
让它崩溃时生成 DUMP 文件,从此文件中可以看到崩溃时的堆栈信息以及定位导致崩溃的语句。
[解决办法]
调试找不到断点,可以肯定你这个问题是发生在多线程同步上,可以从这方面入手查找。
[解决办法]
WinXP:
drwtsn32 -i
drwtsn32

Win7:
http://www.nirsoft.net/utils/app_crash_view.html

Linux:
进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core或core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。
如果进程意外退出不产生core文件,参考“ulimit -c core文件最大块大小”命令

[解决办法]
综上:
1、增加日志
2、编译为debug
3、使用dump文件
4、可以看看系统的日志,一般都记录了致命的错误
5、根据跑的业务先确定问题的大致范围,再一步一步缩小

[解决办法]
驱动程序崩溃用dump,应用程序直接gdb,崩溃看堆栈就可以了

热点排行