应用程序崩溃问题处理办法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用程序崩溃处理办法
问题描述:基于三汇语音卡的应用程序在运行过程中出现“崩溃”(或者称为“异常退出”),所谓“崩溃”指的是应用程序报错后对应进程突然消失或者对应服务自动停止。
问题分析:一般来说,程序崩溃都是因为内存的非法访问导致。可以通过程序崩溃时产生的dump文件来分析定位问题。
问题处理:基于三汇语音卡的应用程序崩溃可以考虑以下几点:
1. 客户是否可以拿源码在出问题的机器上调试?
2. 是否可以确认在做什么操作时出现应用程序崩溃?
3. 获取应用程序崩溃时的错误信息以及dump文件
4. 获取板卡型号和驱动版本
Windows下如何获取应用程序崩溃时的错误日志以及user.dmp文件?
应用程序崩溃发生后,点击windows左下角“开始”菜单中的“运行”栏,输入drwtsn32.exe后回车,看有没有该应用程序的信息,若有,可将故障转储文件user.dmp(运行drwtsn32.exe后有转储文件的路径)获取到进行分析。
若系统没将drwtsn32.exe设为应用程序默认的调试程序,需点击windows 左下角“开始”菜单中的“运行”栏,输入drwtsn32 –i后回车,具体如何设置请看下图:
等程序崩溃发生后,“应用程序错误”下面的空白框里会显示程序的错误信息。把上图“日志文件路径”下的错误日志以及“故障转储”路径下的user.dmp获取到。
注意:Dr. Watson 只能捕获到用VC开发的程序崩溃时的dump,其他编程语言开发的应用程序崩溃Dr. Watson捕获不到。
如果用户应用程序不是用VC开发,并且按照上述方法正确设置了Dr. Wat son但是应用程序崩溃时没有产生user.dmp文件,那说明崩溃不是发生在语音卡驱动里,而是在用户应用程序里。
如果用户应用程序是用VC开发,并且按照上述方法正确设置了Dr. Watso n,需要分析应用程序崩溃时产生的user.dmp文件,定位崩溃发生在语音卡驱动里还是在应用程序里。
Dr. Watson获取应用程序崩溃时错误信息的方法,只在windows xp ,win dows 2000, windows 2003上适用,其他windows操作系统没有自带Dr. Wat son调试工具。
Linux下如何获取core dump文件?
对于linux系统而言,基于三汇语音卡的应用程序崩溃,绝大多数情况下都是因为“段错误”,一般终端上会有提示信息:“segment fault”或者“段错误”,此时可以先通过命令打开core dump文件产生的开关,待应用程序崩溃时系统就会在应用程序的当前目录下产生core dump文件。以下是获取core dump文件的方法:
1. core文件的生产开关和大小限制
使用ulimit –c size 命令(size为具体设置的core dump文件大小,单位为kbyte,例如ulimit –c 1000)可以限制产生的core dump文件的大小,ulimit –c 0则表示关闭输出core dump。若使用ulimit –c ulimited,则表示产生的core dump大小不受限制。一般建议使用ulimit –c ulimited。
2. 产生的core文件的文件名以及路径
使用ulimit –c ulimited 命令后,如果应用程序崩溃,会在应用程序的启动目录下产生一个core.xxx的dump文件(xxx表示该程序的进程标号)另外,无论是Windows系统还是Linux系统,从,在配置文件ShConfig.ini 里[SystemConfig]章节下新增了一个配置项CreateDumpWhenCrash=1驱动崩溃时产生dump文件(默认值),Windows下如果驱动崩溃,将在应用程序当前目录产生文件名为Crash-日期时间.dmp文件。VC平台在应用程序或驱动出现非法时都能输出dump文件,其他平台下只有在驱动出现非法时才会输出dump文件,Windows 2000及以下系统不支持此功能;Linux下如果驱动崩溃,将在应用程序当前目录产生文件名为"core.PID"文件,PID为应用程序进程号。
如何分析Linux下的core dump文件
因为分析Linux下的core dump文件,需要在产生core dump相同环境(相同的系统内核,相同的驱动程序,相同的应用程序)的机器上进行。所以为了能够尽快定位问题,建议用户在产生core dump的机器上按照顺序执行以下命令:
gdb ./app core.PID
bt
thread
info r
x/i $eip
thread apply all bt
以上命令中./app 为用户程序的可执行文件名,core.PID为用户应用程序异常时产生core dump文件。
执行完以上命令后,把控制台上的所有输出信息都拷贝出来,发我方技术支持分析即可。