drwtsn32 调试windows程序

时间:2022-11-08 23:19:53

一直忙着调试代码,写服务器的代码,有时候真叫人郁闷,郁闷的是要高性能的保持程序继续运行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程序调试》