1、应用程序崩溃处理办法问题描述:基于三汇语音卡的应用程序在运行过程中出现“崩溃”(或者称为“异常退出”),所谓“崩溃”指的是应用程序报错后对应进程突然消失或者对应服务自动停止。问题分析:一般来说,程序崩溃都是因为内存的非法访问导致。可以通过程序崩溃时产生的 dump 文件来分析定位问题。问题处理:基于三汇语音卡的应用程序崩溃可以考虑以下几点:1. 客户是否可以拿源码在出问题的机器上调试?2. 是否可以确认在做什么操作时出现应用程序崩溃?3. 获取应用程序崩溃时的错误信息以及 dump 文件4. 获取板卡型号和驱动版本Windows 下如何获取应用程序崩溃时的错误日志以及 user.dmp 文件?
2、应用程序崩溃发生后,点击 windows 左下角“开始”菜单中的“运行”栏,输入 drwtsn32.exe 后回车,看有没有该应用程序的信息,若有,可将故障转储文件 user.dmp(运行 drwtsn32.exe 后有转储文件的路径)获取到进行分析。若系统没将 drwtsn32.exe 设为应用程序默认的调试程序,需点击 windows左下角“开始”菜单中的“运行”栏,输入 drwtsn32 i 后回车,具体如何设置请看下图:等程序崩溃发生后,“应用程序错误”下面的空白框里会显示程序的错误信息。把上图“日志文件路径”下的错误日志以及“故障转储”路径下的 user.dmp获取到。注意:Dr.
3、Watson 只能捕获到用 VC 开发的程序崩溃时的 dump,其他编程语言开发的应用程序崩溃 Dr. Watson 捕获不到。如果用户应用程序不是用 VC 开发,并且按照上述方法正确设置了 Dr. Watson 但是应用程序崩溃时没有产生 user.dmp 文件,那说明崩溃不是发生在语音卡驱动里,而是在用户应用程序里。如果用户应用程序是用 VC 开发,并且按照上述方法正确设置了 Dr. Watson,需要分析应用程序崩溃时产生的 user.dmp 文件,定位崩溃发生在语音卡驱动里还是在应用程序里。Dr. Watson 获取应用程序崩溃时错误信息的方法,只在 windows xp ,windo
4、ws 2000, windows 2003 上适用,其他 windows 操作系统没有自带 Dr. Watson 调试工具。Linux 下如何获取 core dump 文件?对于 linux 系统而言,基于三汇语音卡的应用程序崩溃,绝大多数情况下都是因为“段错误”,一般终端上会有提示信息:“segment fault”或者“段错误”,此时可以先通过命令打开 core dump 文件产生的开关,待应用程序崩溃时系统就会在应用程序的当前目录下产生 core dump 文件。以下是获取 core dump 文件的方法:1. core 文件的生产开关和大小限制使用 ulimit c size 命令(
5、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 表示该程序的进程标号)另外, 无论是 Window
6、s 系统还是 Linux 系统,从 5.3.04 版本版本驱动开始,在配置文件 ShConfig.ini 里SystemConfig章节下新增了一个配置项 CreateDumpWhenCrash=1 驱动崩溃时产生 dump 文件(默认值), Windows 下如果驱动崩溃,将在应用程序当前目录产生文件名为 Crash-日期时间.dmp 文件。VC 平台在应用程序或驱动出现非法时都能输出 dump 文件,其他平台下只有在驱动出现非法时才会输出 dump 文件,Windows 2000 及以下系统不支持此功能;Linux 下如果驱动崩溃,将在应用程序当前目录产生文件名为“core.PID“文件,
7、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 文件。执行完以上命令后,把控制台上的所有输出信息都拷贝出来,发我方技术支持分析即可。