我有一位客戶報告我們的產品中使用混合代碼的假定資源泄漏。所以我想調試一下,看看究竟發生了什麼。我一直在經歷像Visual Studio崩潰之類的奇怪現象,在逐步執行代碼期間凍結,調試器僅在具有不良退出代碼的隨機點停止。跨越源代碼行導致Visual Studio調試器退出?
我把它縮小到導致它的非託管函數,它是一個從另一個線程開始的函數。我一直認爲自己有導致它的確切代碼行,但問題的位置似乎在不斷變化。所以我到了問題的大致位置,並逐行逐句逐句通過彙編代碼。
我甚至把我的斷點移到了函數首次開始的地方,當調試器到達那個點時,如果我跨過它,它會退出。如果我將20個斷點設置到函數中,那麼執行就會到達這一點,然後我跨過它並調試器退出,所以我不相信它真的與我的函數在{ }。
當我使用F10執行此操作時,調試器停止並且退出代碼爲STATUS_WX86_BREAKPOINT,當我使用F11執行此操作時,它會停止並顯示退出代碼STATUS_WX86_SINGLE_STEP。根據步進類型,錯誤代碼的名稱對我有意義,但並不真正告訴我什麼是錯誤的。當我再次運行它時,我試着在拆卸過程中通過斷點移動,以爲我會看到之前發生的事情,退出剛剛發生,所以它很煩人。我從來沒有遇到過這樣的事情,無法找到這個錯誤真的意味着我做錯了什麼?
有時,Visual Studio不會退出,而是使用錯誤的代碼,因此Visual Studio會鎖定我。
這很可能是錯誤發生在另一個線程中並導致你的程序中止。當你開始跨越一個特定的線程時,調度器可以切換出來並在另一個線程中運行一堆代碼而不顯示你。 – paddy