一直忙着调试代码,写服务器的代码,有时候真叫人郁闷,郁闷的是要高性能的保持程序继续运行n多天还没有事情,本来这也是程序员该做的事情,但是有时候一些长期积累下来的问题会造成程序指明性的打击~~~
在写这个程序的时候,本机调试代码的时候都没有遇到任何内存泄漏的问题,调试的时候都很清晰,但是到客户那里运行一天到两天就没名的挂掉,真让人郁闷
而且没有任何报错~~无奈,
打开了drwtsn32来检测程序的运行报错情况
drwtsn32是windows调试的利器,调试不常见错误的程序的时候,累积错误的时候,都可以用它.
在命令行窗口,输入drwtsn32
然后就可以看到drwtsn32的运行界面
然后设置"转存到符号表"
"转储全部线程上下文"会在出错的时候把程序运行的上下文都记录下来,如果只想知道出错那个地方的记录,就不要选这个,看起来方便很多
然后确定保存这些信息
相应的windows程序生成的时候,也得做一些改动,要生成map文件,这样好找到出问题的代码地方
vc设置:
1、配置属性-〉c/c++-〉常规-〉调试信息格式, 选择“程序数据库(/Zi)”
2、配置属性-〉c/c++-〉优化,选择“禁用(/Od)”
3、配置属性-〉连接器-〉调试-〉生成调试信息,选择 “是(/DEBUG)”
4、配置属性-〉连接器-〉调试-〉生成影射文件,选择 “是(/MAP)”
5、配置属性-〉连接器-〉调试-〉影射文件名,选择“$(OutDir)/$(ProjectName).map”
6、配置属性-〉连接器-〉调试-〉影射导出,选择“是(/MAPINFO:EXPORTS)”
7、配置属性-〉连接器-〉调试-〉影射行,选择“是(/MAPINFO:LINES)”
8、配置属性-〉连接器-〉高级->固定基址,选择“生成重定位节(/FIXED:NO)”
然后命令行运行drwtsn32
等待程序出错~~
程序出错以后会把log和一个dmp文件存储到故障转存 和日志文件路径 那个目录下面,这个目录可以自己设置.
在log信息里面有这样的信息
Microsoft (R) Windows 2000 (TM) Version 5.00 DrWtsn32
Copyright (C) 1985-1999 Microsoft Corp. All rights reserved.
发生应用程序意外错误:
应用程序: (pid=1248)
时间: 2006-4-27 @ 09:49:29.613
意外情况编号: c0000005 (访问侵犯)
*----> 系统信息 <----*
计算机名: F6B2548C83754CF
用户名: Administrator
处理器数量: 1
处理器类型: x86 Family 6 Model 8 Stepping 6
…………
0041e6bb 8b45e0 mov eax,[ebp+0xe0] ss:00d9907e=????????
错误 ->0041e6be 8b500c mov edx,[eax+0xc] ds:00c69ee6=????????
0041e6c1 52 push edx
0041e6c2 ff1518af4300 call dword ptr [0043af18] ds:0043af18=7c177c00
…………………………
很多信息
然后对应的去找你vc 生成的map文件的地方~~
找到代码出现那样情况的地方~~
~~~然后让你的程序VC调试,反汇编,找到对应的地方~~
ps:这只是一种最简单的方法:)
更多的方法,看《windows程序调试》