2013-07-16 58 views
7

我們正在建設一個解決方案發布,但嘗試使用Studio 2010的專業連接時,沒有線程顯示任何堆棧信息,也沒有任何斷點可以設置等可即使DEBUGTYPE釋放模式沒有調試應用=全

目標是能夠將Visual Studio/JIT調試器附加到正在運行的進程中,同時儘可能多地實現優化。

我們的大部分搜索歸結爲'compile with debug:full',您將能夠進行調試,但似乎並非如此,JIT在運行時優化了代碼,因此我們無法調試,這是真的嗎? 是否可以編譯並告訴JIT淡化優化並允許調試? (同時保留其他優化)

UPDATE

使用@ HansPassant的回答,我看着模塊,發現雖然PDBS在同一個目錄中的二進制文件,確實沒有調試符號被加載。我還看到的是,我的庫被標記爲'用戶代碼' - 'NO',這可能是它沒有自動加載的原因。 通過手動加載符號和禁用'just-my-code'我還能夠設置斷點並查看堆棧。

現在問題:爲什麼我的代碼沒有標記爲用戶代碼?這是正常的行爲?我可以以某種方式將此配置到我的程序集中以避免這種情況發生

+0

「也沒有任何斷點可以設置」 < - 爲什麼不呢?它是'沒有匹配的符號可以找到'錯誤信息? – wal

+0

@wal請參閱更新後的問題,這是一個缺少符號和'只是我的代碼'的組合被禁用 –

回答

13

調試優化的代碼不是很高興。您當然可能在設置斷點時遇到困難,可能已經內聯了一種方法。當變量被優化以存儲在cpu寄存器中時,檢查局部變量和方法參數可能會使調試器很生氣。

但是你肯定還是可以檢查調用堆棧,你會發現沒有在堆棧跟蹤得到內聯方法。你可能犯的基本錯誤:

  • 當你附加一個調試器時,你可以選擇選擇調試器類型。一定要選擇「管理」,你會不會有本機調試多大用處
  • 確保你正在尋找正確的線程,該程序可以在任意位置被打破。使用調試+ Windows +線程來選擇適當的線程
  • 請確保您確實在代碼中的某個位置發生了故障。你可以很容易地在一個Windows操作系統DLL或框架方法內部結束,在這種情況下幾乎沒有什麼可以看的。工具+選項,調試,符號,使符號服務器讓裏面的Windows啓動堆棧跟蹤將是準確
  • 調試器必須能夠找到PDB文件。使用Debug + Windows + Modules,你會看到程序中加載的程序集。首先確保你想調試的那個實際上是加載的。右鍵單擊它並選擇「符號加載信息」。這表明你在那裏尋找PDB文件
  • 的「只是我的代碼」選項可以在很大程度上得到的方式,你很可能會遇到的代碼塊顯著是不是你的。工具+選項,調試,常規,並關閉該選項。
+2

(+1)'模塊'窗口顯示我的程序集不被視爲用戶代碼,請參閱更新的問題 –

相關問題