2013-02-20 57 views
2

當我在我的工作機器上運行(WIN7 VS2010終極SP1)簡單的程序,沒有調用堆棧, 「inpossible」 找錯誤

int main() 
{ 
    unsigned i = 5; 
    i %= 0; 
    return 0; 
} 

int main() 
{ 
    int * ip = 0; 
    *ip = 4; 

    return 0; 
} 

,我被零取整數除法未處理的異常。當我點擊break按鈕時,爲了查看問題,我的調用堆棧僅包含msvcrt100d和ntdll,並且Visual Studio在LeaveCriticalSection(_locktable[locknum].lock);行的文件mlock.c中打破了我的觀點。

當我在另一臺機器(win7 VS2010 proff sp1)上運行此代碼時,VS會在有問題的線路i %= 0; od *ip = 4上完全分解。

這個錯誤隱藏在我的項目中的某個地方,直到我在另一臺機器上運行它時,我才找到它。我該如何解決這個問題?我需要在我的工作機器上看到它。

我有一個全新安裝的Windows 7,全新安裝Visual Studio 2010和VS-SP1。 我的項目不應該毀了。我使用CMake生成它,同樣的項目在非工作機器上工作良好。

任何意見將不勝感激。

+0

剛剛意識到,你有調試信息的問題,而不是試圖除以零:)如果設置被搞砸了,很難猜測究竟是什麼錯誤。我會確保擁有所有的調試信息。看起來VS只是爲相同的代碼位置顯示不同的地方。 – 2013-02-20 14:56:34

+0

您是否嘗試**手動**刪除工作機器上的所有* .ncb,* .ilk,* .pdb,* .obj,* .idb文件? – borisbn 2013-02-20 15:09:46

+0

是的。我創建了全新的乾淨項目,只添加一個cpp文件,用示例代碼填充並運行。 – relaxxx 2013-02-20 15:14:24

回答

1

好的,我找到了一個解決方案。

在VS中轉到異常設置(ctrl + alt + e)並在需要的Win32異常中檢查Thrown

更多信息可查詢 herehere

SO相關問題here

0

當您使用VS編譯程序時,它會創建EXE文件和一個包含程序所有相關調試信息的PDB文件。另外,如果嵌入到EXE中,則PDB的絕對路徑

當EXE崩潰並且您使用VS對其進行調試時,它會嘗試查找相應的PDB,它們都位於與EXE相同的文件夾中,並位於文件中嵌入的絕對路徑中。如果您希望它能夠調試程序,那麼您必須將PDB和EXE一起復制。請注意,這兩個文件必須來自完全相同的編譯,否則它將無法工作。

然後,VS調試器將嘗試再次使用嵌入在PDB中的*.c*.cpp文件的絕對路徑向您顯示程序的來源。顯然,如果你想讓它在相關行中停止,你需要一份源代碼的副本!如果將源複製到與原始機器相同的路徑上,它應該沒有問題。如果不是,則必須打開調用堆棧窗口,雙擊main函數,它會要求您瀏覽實際源。

或者,也許你的設置是擰...