Dot-Net

逐步完成 Visual Studio 中的“託管到本機轉換”?

  • March 17, 2021

在嘗試回答這個問題時,我決定我需要在調試器視圖中手動逐步完成編組過程。

不幸的是,Visual Studio 似乎跳過了所有這些有趣的程式碼。GetProfilesDirectory這是對(WinAPI 函式)的 P/Invoke 呼叫:

在此處輸入圖像描述

但是在進入這個電話(F11)之後,我發現自己不在FFF9BFD8;相反,我直接在GetProfilesDirectory程式碼中:

在此處輸入圖像描述

堆棧上還有一個[Managed to Native Transition]條目,暗示 Visual Studio 剛剛跳過了一大堆程式碼。

我怎樣才能逐步完成這個過渡?

我很驚訝沒有人建議您在調試視窗中顯示外部程式碼。如果你右擊

$$ Native to Managed Transition $$行並勾選 Show External Code 選項,您將準確看到在轉換中呼叫了哪些方法。這可能會給你一個更好的主意。這是一個例子: 顯示本機到託管轉換

然後,您將能夠點兩下任何(灰色)行,然後Disassembly將打開一個包含程式碼的頁面。另一個例子:

在此處輸入圖像描述

在 Visual Studio 中,您不能這樣做,即無法將 VS 調試器切換到模式以查看託管到本機轉換期間發生的情況。

您可以嘗試 WinDbg + SOS/SOSEX,因為 WinDBG 不會向您隱藏這些類型的詳細資訊。但是,該部分是 .NET 或 Windows 內部抽象,因此即使您可以看到它,您可能也不會得到太多,因為要查看那裡實際發生的事情(除了程序集),您將需要 mscorlib、mscoreei 的私有符號,或 clr dll(pdb 文件)。

引用自:https://stackoverflow.com/questions/9380706