Dot-Net

如何查看優化後的 .NET 程式碼的反彙編?

  • May 23, 2017

出於某種原因,我有時發現查看函式的優化編譯器輸出很有用或很有趣。

對於非託管 C/C++ 程式碼,我最喜歡的執行此操作的方法是在發布模式下編譯,在感興趣的函式中設置斷點,執行,並在遇到斷點時在 Visual Studio 中查看反彙編。

我最近在一個 C# 項目中進行了嘗試,發現該技術不起作用。即使在Release模式下,我看到的反彙編顯然也沒有優化。我找到並禁用了(在 Visual Studio 2010 中)“調試…選項和設置…調試…正常…在模組載入時抑制 JIT 優化”選項,這大概讓我更接近我想要的,只是現在當我嘗試執行它時它會警告我,然後我無法讓它在斷點處停止,以便我可以看到反彙編。

那麼,如果我想查看函式的 CLR (4.0) 抖動的反彙編、優化輸出,那麼最好的方法是什麼?需要明確的是,我希望看到 x86(或者最好是 x86_64)反彙編,而不僅僅是 IL 反彙編(您可以在 Reflector 中看到)。

當然,在這個問題上找了半天的答案,我在SO上問了5分鐘後自己找到了答案。

我很接近; 我在問題中唯一缺少的步驟是“啟用我的程式碼”也必須在選項中取消選中。

完整指南可在此處獲得:http: //blogs.msdn.com/b/vancem/archive/2006/02/20/535807.aspx

我相信 JIT 知道您何時在調試器下執行,並生成更多“調試器友好”的 x86 程式碼,這可以解釋為什麼您看到的 x86 程式碼未優化。

您可以嘗試獨立執行應用程序,至少執行一次您感興趣的程式碼(因此它會在沒有附加調試器的情況下進行 JIT),然後將調試器附加到程序並設置斷點。

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