2009-07-01 134 views
6

我們有本機代碼引發的非確定性System.AccessViolationException。很難重現它,但有時會發生。我不確定是否可以「僅調試它」,因爲訪問衝突所需的時間大約爲2個小時,並且不保證訪問違規將會發生。確定System.AccessViolationException的原因

本地庫由託管包裝器使用。它通過JNI從Java使用,並通過IKVM的JNI從.NET使用。這個問題只是從IKVM的代碼中複製出來的,但是數據集是不同的,並且沒有辦法用IKVM的應用程序使用的數據來測試Java應用程序。

我有一切的來源,但(如果可能),我想避免大量的變化。

我相信本地調用堆棧將提供足夠的關於此訪問衝突的原因的信息。

是否有任何有效的方法來確定此訪問衝突的原因?

我認爲對我來說最理想的解決方案是在代碼或進程環境中進行一些更改,所以如果發生此訪問衝突,它會因內存轉儲而崩潰,因此我可以進行更改並等待。

回答

2

如果您可以負擔等待發生異常,請附上託管調試程序和本機調試程序(混合調試會話),並設置託管調試程序在引發AccessViolationException時中斷。託管調試器在檢測到未處理的異常時會中斷進程,然後您應該能夠看到本機調用堆棧。

+0

嗯..我改變了我的本地代碼,所以它肯定有訪問衝突,並用調試符號重新編譯它。當我正常啓動進程並附加了Visual Studio調試器時。我已經添加了一個拋出AccessViolationException的斷點,但它沒有捕獲。有什麼建議麼? – okutane 2009-07-02 03:59:59