2009-08-13 79 views
1

當我嘗試運行我的程序時,它永遠不會進入main()函數,而是掛起。有些時候,我的程序在多次調用ntdll.dll之後,在堆棧中的第一個調用中拋出了一個異常。異常似乎是導致我的程序掛起「<壞ptr>」的因素。我無法觸發任何我設定的斷點,這使得難以找到問題的起因。C++程序在執行ntdll.dll時掛起

+1

添加更多信息,即:掛起時的堆棧轉儲,調用內核的API調用以及崩潰周圍的源代碼。 – 2009-08-13 18:27:08

+0

ntdll點是irelevant,是線程轉換到內核的時候。添加完整的堆棧。 – 2009-08-13 18:32:02

回答

3

您需要確定導致崩潰的系統調用。通常這種事情是將垃圾傳入某些Windows API的結果。

使用調試器並查看調用堆棧。代碼中的最後一項很可能是問題的原因。它可能有一些不正確的數據處理不當。

1

這聽起來像你正在使用全局對象/單身人士。如果其中任何一個取決於對方,你就有麻煩了。我會尋找所有的全局變量,並在每個構造器中設置一個斷點。這聽起來像是一個全球的構造者正在使用另一個全球化,但第二個尚未被構建。

最後,如果這不是原因,並且您的應用程序正在加載第三方dll,它們可能會發生衝突。我記得有一次,orbix和ms消息隊列dll在一個之前被加載,如果它們被反向加載,所有的都可以工作。最後找到這個我刪除了所有東西,直到我剩下一個空的主體,然後開始逐個添加東西,直到我發現問題。