![](/img/trans.png)
[英]How can I view MSIL / CIL generated by C# compiler? Why is it called assembly?
[英]How to view the Assembly code for C# in Visual Studio (not the MSIL)?
所有這些答案都存在問題。
如果您的MSVC版本支持它,您確實可以在Debug / Disassembly窗口中看到匯編程序指令(僅在主動調試應用程序時可用)。
但是,jit編譯器會檢測您何時嘗試在調試器下運行它。 因此,即使您正在進行發布版本,它仍然與您從命令行運行的發布版本完全相同。
從好的方面來說,調試會更容易。 從負面來看,它使.Net編譯器看起來非常糟糕,因為代碼不像“真實”運行時那樣高效。
有一個技巧我用來看'真正的'匯編程序輸出。 在MSVC中,使用CTRL-F5(無需調試啟動)啟動應用程序。 然后使用Debug / Attach to Process來...嗯...附加到進程。
您現在可以使用調試器中斷該過程並檢查“真實”asm輸出。 實際調試將更加困難,因為代碼已經進行了更多優化,但是反匯編窗口將讓您更好地了解jit編譯器的工作情況。
我確定有一種方法可以用NGEN做這個(也許這個 ?),但只是附加對我來說效果很好。
在菜單中選擇Debug - Windows - Assembly。 如果Express Edition中沒有該菜單,那么是的,它不受支持。
您正在尋找的窗口是Debug - > Windows - > Disassembly
你必須調試它才能存在,並且在連接調試器時你可以按Ctrl + Alt + D來實現它。
您無法在任何其他時間查看匯編代碼(機器代碼),因為它不存在。 它作為機器代碼存在的唯一時間是加載和運行時。 .Net不編譯為機器代碼,它編譯為MSIL,因此必須在它出現之前進行JIT編譯(及時)。 只有在它運行時才會發生。
如此處所述,您應該運行代碼並在斷點處停止然后調試 - > Windows - >反匯編或Ctrl + Alt + D
如果不存在,則應打開選項Dialog並將Address-leve debugging設置為啟用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.