示例代碼:
#include <iostream>
using namespace std;
void crash()
{
__asm
{
int 3;//到這里就中斷(模擬程序崩潰)
}
}
int main()
{
cout<<"hello"<<"\n";
crash();
return 0;
}
在vc6.0里敲入上面代碼,project->settings->c/c++ 在project options里加上/Zd表示編譯的時候生成行信息,然后在link選項卡里勾選Generate mapfile,在project options加上/mapinfo:lines。好了,rebuild all就可以在debug目錄下生成一個后綴名為.map的文件,可以用記事本打開它。
運行程序,彈出有“調試 發送錯誤報告 不發送”三個按鈕的對話框,查看錯誤報告技術信息,在開始的幾行里有“code flags record address“記住address后的地址,我的是0x00401156。根據它就能找出崩潰時的函數地址。可以查看map文件的 “Rva+Base”(偏移+基地址)列,其中第一個大于address的前一個call對應函數就是崩潰的函數。