第一章 方法
1 IDE debug
2 崩溃堆栈
3 阅读日志
4 阅读代码
第二章 心态
1 错误心态
盲目重现
浅尝辄止-只分析表层问题
否定事实
2 心态举例
Type: EXCEPTION_ACCESS_VIOLATION
Address: 0x7C3C44D5
Error: Read address 0x00000094
EAX: 0x00000000 EBX: 0x00000000 ECX: 0x0000007C
EDX: 0x00000000 EDI: 0x03D89560 ESI: 0x00000000
0x7C3C0000[44D5] MSVCP71.dll: ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ[+0](5,1293076,63215733,1526)
0x03C20000[29785] UUCommunity.dll: (1526,5,12,1293100)
0x03C20000[29875] UUCommunity.dll: (2557902,1526,5,12)
第一层的堆栈被破坏掉了:
第二层的推产显示崩在 Call OnYYY
case xxxx:
OnYYY((int)wParam);
break;
如果 浅尝辄止,这就分析不下去了。还会否认事实。
但如果看下OnYYY的代码
void OnYYY(int friendID)
{
FriendInfo* pFriendInfo = GetFriendInfo(friendID);
GetUserOnlineState(pFriendInfo->FriendName.c_str());
这里pFriendInfo的地址可能为空了。
再查看下 FriendInfo的结构,发现确实在0x94的地方 应该是 FriendName变量的地址范围。
而c_str()掉用的恰好是 _Myptr()函数。
所以 崩在了dll中 。
第三章 bug现象
1 直接退出(往往访问的代码地址是空导致的)
2
。。。。。
1 IDE debug
2 崩溃堆栈
3 阅读日志
4 阅读代码
第二章 心态
1 错误心态
盲目重现
浅尝辄止-只分析表层问题
否定事实
2 心态举例
Type: EXCEPTION_ACCESS_VIOLATION
Address: 0x7C3C44D5
Error: Read address 0x00000094
EAX: 0x00000000 EBX: 0x00000000 ECX: 0x0000007C
EDX: 0x00000000 EDI: 0x03D89560 ESI: 0x00000000
0x7C3C0000[44D5] MSVCP71.dll: ?_Myptr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEPADXZ[+0](5,1293076,63215733,1526)
0x03C20000[29785] UUCommunity.dll: (1526,5,12,1293100)
0x03C20000[29875] UUCommunity.dll: (2557902,1526,5,12)
第一层的堆栈被破坏掉了:
第二层的推产显示崩在 Call OnYYY
case xxxx:
OnYYY((int)wParam);
break;
如果 浅尝辄止,这就分析不下去了。还会否认事实。
但如果看下OnYYY的代码
void OnYYY(int friendID)
{
FriendInfo* pFriendInfo = GetFriendInfo(friendID);
GetUserOnlineState(pFriendInfo->FriendName.c_str());
这里pFriendInfo的地址可能为空了。
再查看下 FriendInfo的结构,发现确实在0x94的地方 应该是 FriendName变量的地址范围。
而c_str()掉用的恰好是 _Myptr()函数。
所以 崩在了dll中 。
第三章 bug现象
1 直接退出(往往访问的代码地址是空导致的)
2
。。。。。