我在WIN2K中用.net 2003开发的程序,在NT4中运行一会就会退出,2000下运行正常,,让人无处下手,华尔医生报告如下:发生应用程序意外错误:
App: (pid=333)
When: 3/28/2005 @ 11:52:49.642
Exception number: c0000005 (访问冲突)
*----> 系统信息 <----*
Computer Name: xxxxxx
User Name: xxxxxxxxxx
Number of Processors: 1
Processor Type: x86 Family 15 Model 2 Stepping 4
Windows Version: 4.0
Current Build: 1381
Service Pack: 6
Current Type: Uniprocessor Free
Registered Organization: xxxx
Registered Owner: xxxxx
...
线程标识 0x139 的状态转储eax=00000000 ebx=00000000 ecx=00500040 edx=7803a118 esi=011f2d68 edi=00000000
eip=1f8b1f44 esp=0012fd50 ebp=0012fd6c iopl=0 nv up ei pl nz ac pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
功能:<nosymbols>
1f8b1f2b 803d24228f1f00 cmp byte ptr [1f8f2224],0x0 ds:1f8f2224=01
1f8b1f32 56 push esi
1f8b1f33 8bf1 mov esi,ecx
1f8b1f35 7511 jnz 1f8b1f48
1f8b1f37 8b4610 mov eax,[esi+0x10] ds:0271176e=????????
1f8b1f3a 85c0 test eax,eax
1f8b1f3c 740a jz 1f8b1f48
1f8b1f3e 8b08 mov ecx,[eax] ds:00000000=????????
1f8b1f40 50 push eax
1f8b1f41 ff5108 call dword ptr [ecx+0x8] ds:01a1ea46=????????
错误 ->1f8b1f44 83661000 and dword ptr [esi+0x10],0x0 ds:0271176e=????????
1f8b1f48 5e pop esi
1f8b1f49 c3 ret
1f8b1f4a 56 push esi
1f8b1f4b 8b742408 mov esi,[esp+0x8] ss:0164e757=????????
1f8b1f4f 57 push edi
1f8b1f50 8d4608 lea eax,[esi+0x8] ds:0271176e=????????
1f8b1f53 50 push eax
1f8b1f54 ff15d0108a1f call dword ptr [1f8a10d0] ds:1f8a10d0=77ed5124
1f8b1f5a 8bf8 mov edi,eax
1f8b1f5c 85ff test edi,edi
1f8b1f5e 750d jnz 1f8b1f6d*----> 堆栈的反向追踪 <---*FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0012fd6c 1f8b1f7c 011f2d68 1f8b1f6d 00000001 77ed5138 <nosymbols>*----> 原始堆栈转储 <----*
0012fd50 68 2d 1f 01 be 1f 8b 1f - 68 2d 1f 01 68 2d 1f 01 h-......h-..h-..
0012fd60 c8 fd 12 00 88 e2 8e 1f - 00 00 00 00 d4 fd 12 00 ................
0012fd70 7c 1f 8b 1f 68 2d 1f 01 - 6d 1f 8b 1f 01 00 00 00 |...h-..m.......
0012fd80 38 51 ed 77 90 0f 1f 01 - 32 9f 8b 1f 68 2d 1f 01 8Q.w....2...h-..
0012fd90 90 0f 1f 01 10 fe 1f 01 - 61 1c 8b 1f 00 00 00 00 ........a.......
0012fda0 90 0f 1f 01 00 00 00 00 - 02 00 00 00 94 0f 1f 01 ................
0012fdb0 90 0f 1f 01 c8 47 20 01 - 10 fe 1f 01 28 2d 20 01 .....G .....(- .
0012fdc0 00 00 00 00 9c fd 12 00 - 10 fe 12 00 d4 dd 8e 1f ................
0012fdd0 00 00 00 00 1c fe 12 00 - 05 34 8a 1f 00 00 00 00 .........4......
0012fde0 01 00 00 00 01 00 00 00 - 00 00 00 00 00 00 00 00 ................
0012fdf0 2c 05 20 01 00 00 00 00 - 9c 37 8a 1f 2c 05 20 01 ,. ......7..,. .
0012fe00 00 00 00 00 14 37 8a 1f - 20 05 20 01 20 05 20 01 .....7.. . . . .
0012fe10 58 fe 12 00 d7 e3 8e 1f - 00 00 00 00 e8 52 4e 00 X............RN.
0012fe20 d6 36 8a 1f 20 05 20 01 - f2 24 8a 1f 01 00 00 00 .6.. . ..$......
0012fe30 14 5c 4e 00 e0 5d 4e 00 - c5 24 8a 1f 20 05 20 01 .\N..]N..$.. . .
0012fe40 1e 19 43 00 2c 05 20 01 - 00 00 00 00 01 00 00 00 ..C.,. .........
0012fe50 94 fe 12 00 00 f0 fd 7f - 84 fe 12 00 a1 73 4b 00 .............sK.
0012fe60 10 00 00 00 ba ac 4b 00 - e8 52 4e 00 36 bd 47 00 ......K..RN.6.G.
0012fe70 00 00 00 00 00 00 00 00 - 00 f0 fd 7f 70 fe 12 00 ............p...
0012fe80 98 fb 12 00 b0 ff 12 00 - dc b4 47 00 b0 32 4c 00 ..........G..2L.线程标识 0xee 的状态转储eax=77de6dd5 ebx=00000000 ecx=0012eeb8 edx=00000000 esi=0016e348 edi=001609b0
eip=77f57fa7 esp=0150fdf0 ebp=0150ff90 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000202
功能:ZwReplyWaitReceivePort
77f57f9c b890000000 mov eax,0x90
77f57fa1 8d542404 lea edx,[esp+0x4] ss:02a2e7f7=????????
77f57fa5 cd2e int 2e
77f57fa7 c21000 ret 0x10
77f57faa 8bc0 mov eax,eax*----> 堆栈的反向追踪 <---*FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0150ff90 77de5758 77de6d48 001609b0 0150ffec 77b00000 ntdll!ZwReplyWaitReceivePort
00003a98 00000000 00000000 00000000 00000000 00000000 rpcrt4!RpcBindingFree线程标识 0x13c 的状态转储eax=00000001 ebx=00000000 ecx=00000198 edx=00000000 esi=000000b8 edi=00000000
eip=77f582db esp=0160ff60 ebp=0160ff84 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
功能:NtWaitForSingleObject
77f582d0 b8c5000000 mov eax,0xc5
77f582d5 8d542404 lea edx,[esp+0x4] ss:02b2e967=f6335756
77f582d9 cd2e int 2e
77f582db c20c00 ret 0xc
77f582de 8bc0 mov eax,eax*----> 堆栈的反向追踪 <---*FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0160ff84 77ed4f5e 000000b8 ffffffff 00000000 1f8b12e2 ntdll!NtWaitForSingleObject
0160ffb8 77ed4f05 011f2ff8 00000000 00000011 011f2ff8 kernel32!WaitForSingleObject
0160ffec 00000000 00000000 00000000 00000000 00000000 kernel32!lstrcmpiW
00000000 00000000 00000000 00000000 00000000 00000000 !<nosymbols>线程标识 0x16a 的状态转储eax=1f8b11eb ebx=00000000 ecx=011f0598 edx=00000000 esi=000000b4 edi=00000000
eip=77f582db esp=0170ff58 ebp=0170ff7c iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
功能:NtWaitForSingleObject
77f582d0 b8c5000000 mov eax,0xc5
77f582d5 8d542404 lea edx,[esp+0x4] ss:02c2e95f=00000000
77f582d9 cd2e int 2e
77f582db c20c00 ret 0xc
77f582de 8bc0 mov eax,eax*----> 堆栈的反向追踪 <---*FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0170ff7c 77ed4f5e 000000b4 ffffffff 00000000 1f8b1276 ntdll!NtWaitForSingleObject
0170ffb8 77ed4f05 011f3130 00000000 00000011 011f3130 kernel32!WaitForSingleObject
0170ffec 00000000 00000000 00000000 00000000 00000000 kernel32!lstrcmpiW
00000000 00000000 00000000 00000000 00000000 00000000 !<nosymbols>线程标识 0xe6 的状态转储eax=77de6dd5 ebx=00000000 ecx=00000000 edx=00000000 esi=00178b60 edi=001609b0
eip=77f57fa7 esp=0499fdf0 ebp=0499ff90 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000206
功能:ZwReplyWaitReceivePort
77f57f9c b890000000 mov eax,0x90
77f57fa1 8d542404 lea edx,[esp+0x4] ss:05ebe7f7=????????
77f57fa5 cd2e int 2e
77f57fa7 c21000 ret 0x10
77f57faa 8bc0 mov eax,eax*----> 堆栈的反向追踪 <---*FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0499ff90 77de5758 77de6d48 001609b0 0499ffec 00000000 ntdll!ZwReplyWaitReceivePort
00003a98 00000000 00000000 00000000 00000000 00000000 rpcrt4!RpcBindingFree每台机器都是如此,请大家看看这是什么原因造成的?如何解决?

解决方案 »

  1.   

    你可以在编译程序的时候产生map文件,编译参数加上/MAPINFO:LINES,然后程序崩溃的时候看看错误的地址大概和你map文件中记录的函数地址比较接近,大概错误就发生在那附近,再检查代码。
      

  2.   

    如何看那个MAP文件呢?里面都是如下的显示地址,和出错的如何对应起来呢?
    0001:0007e3df
      

  3.   

    比如说map文件里有这行:
    0001:000004f0       ?ExitInstance@CVirtualListApp@@UAEHXZ 004014f0 f   VirtualList.obj
    其中后面地址004014f0和你的崩溃地址比较近的话,再看前面0001:000004f0,然后向下找:Line numbers for .\Debug\VirtualList.obj(E:\Program\VirtualList\VirtualList.cpp) segment .text    17 0001:00000130    17 0001:00000160    29 0001:000001a0    32 0001:000001d0
        37 0001:00000300    43 0001:000003d0    44 0001:00000408    52 0001:00000412
        57 0001:0000041a    58 0001:0000042b    59 0001:00000434    73 0001:0000043f
        74 0001:00000458    77 0001:000004f0    79 0001:0000050d    80 0001:0000052a
        81 0001:00000532看见77 0001:000004f0了吧,就在VirtualList.cpp的77行。不过要是你的崩溃地址比较大,找不到相近的地址的话,就是出在系统的动态库里了,那就是你调用系统库,库出的问题。这个方法就不好使了。
      

  4.   

    我的显示崩溃地址在oledb32.dll中.....