2015-06-22 107 views
0

在我的遊戲運行了一段時間後,同樣的警告出現,我的遊戲中斷。我不知道這是爲什麼,我找不到解決方案。未處理的類型異常

是不斷彈出的消息如下:

微軟的Visual Studio Express的2013年Windows桌面

類型的未處理的異常 'System.ComponentModel.Win32Exception' 發生在System.Drawing中。 dll的

附加信息:操作成功完成

我甲肝e一個Object類,它處理屏幕上顯示的所有對象(位置,碰撞等),並且警告似乎來自這個類。當顯示警告,在-特別一行被高亮顯示每一次,那就是:

public Obj(Vector2 pos) 
    { 
     position = pos; 
    } 

解決我的問題的任何幫助將不勝感激

+1

您有一個例外。在調試中運行你的遊戲,並打開First Chance Exceptions(工具 - >異常 - > CLR異常) –

+0

@Yuval Itzchakov這不是CLR異常Prima facie,它需要啓用Win32異常並需要適當的pdb文件才能查看確切的堆棧在運行時生成,使用像adplus工具 –

+0

@YuvalItzchakov我看過我的調試>例外> CLR例外,並已有一個滴答下用戶未處理,但沒有一個在拋出 –

回答

0

你在你的遊戲的非託管組件異常。轉到Debug - > Exceptions並在Win32 Exceptions行中勾選「未處理用戶」框。

這樣,每當引發Win32異常時,您的調試器都會中斷,並且如果您加載了所需的符號,您將能夠像平常一樣調試代碼。

此外,您可以使用Marshal.GetLastWin32Error方法獲取最後一個Win32錯誤代碼。掌握了這些信息後,你應該能夠明確地知道你的代碼正在拋出什麼,以及如何解決它。

+0

我已經檢查了我的調試>異常和Win32用戶 - 未處理已被打勾。警告似乎被拋出在'public Obj(Vector2 pos){position = pos; }'但是我不知道爲什麼,我對編程非常陌生,所以我不知道該怎麼做 –

+0

你碰巧也檢查了「拋出」嗎?衆所周知,Win32和特別是GDI(這可能就是你正在使用的)爲所有事情拋出異常。你不應該因爲這個原因被「拋出」檢查,只有未處理的應該讓你感興趣。 – aevitas

+0

我沒有檢查「拋出」,只是用戶未處理 –

0

您所提供的信息是非常有限的,我可以提供關於如何調試問題的一些指針的.Net/CLR基本管理組件在很大程度上依賴於各種服務通過Win32/Windows OS完成的工作。如果在託管組件內發生異常,您將獲得託管堆棧跟蹤,否則,罪魁禍首可能會超出託管層。有一套很好的Windows調試工具,可以讓生活更輕鬆。請記住,在獲取堆棧跟蹤和了解罪魁禍首方法的整個過程中,您需要pdb文件,它們是符號文件,它可以將二進制文件與導致問題的確切代碼進行匹配。當你在VS.Net中啓用Win32時,這也不會提供太多細節,因爲你只有win32二進制文件而不是實際的代碼。實際上這個問題似乎與System.Drawing.dll中的未託管代碼有關。

嘗試以下步驟:

  1. 下載MS對於給定的OS味道公共符號,讓他們在文件夾和路徑添加到_NT_SYMBOL_PATH environment variable,這是使用Windows調試工具很重要。您也可以在VS.Net中添加符號路徑以供調試器使用。

  2. 添加託管代碼PDB文件路徑的環境變量,VS反正挑選,最多從本地文件夾一樣ADPlus的

  3. 配置工具來創建第二次機會異常轉儲,瞭解差異第一和之間第二次機會例外here。你需要在崩潰模式下使用adplus,查看更多信息here。這將生成一個dmp文件

  4. 您打開WinDbg的dmp文件在那裏它可以幫助你瞭解每個線程的堆棧,從而縮小在這個問題上

  5. 請記住,一旦你設置環境變量_NT_SYMBOL_PATH,打開具有新設置的新commnad提示,並使用相同的提示符下運行adplus, windbg, VS,因爲它會採取默認設置

大多在自與MS庫的問題你的情況,當前進程將有助於你在縮小工作名單d,這可能是與系統相關的一些配置,因爲大多數情況下這是一個已知問題。

如果你提供更多的細節,那麼我可以看到我們能做些什麼,以進一步調試