2011-03-16 92 views
3

如果通過使用new StackFrame()new StackTrace()獲得堆棧跟蹤,我可以將「true」傳遞給fNeedFileInfo以獲取文件和位置信息。這需要一個PDB文件才能工作。如何告訴StackTrace在哪裏可以找到它的PDB?

我的問題是:CLR如何查找PDB文件?

我們的最終用戶本地沒有PDB,但他們在網絡共享上可用。當它執行堆棧跟蹤時,是否有可能將CLR告訴CLR?

回答

1

CLR使用DIA(Debug Interface Access)API來解析源和行信息。 DIA在解析符號時尊重_NT_SYMBOL_PATH環境變量。您可以指定多個文件夾(本地或網絡)或符號服務器。有關特定語法,請參閱here

鑑於此,您可以使用Environment.SetEnvironmentVariable來爲您的過程設置符號路徑。例如...

Environment.SetEnvironmentVariable(
    "_NT_SYMBOL_PATH", 
    @"\\local\symbol\share;srv*http://msdl.microsoft.com/download/symbols" 
); 

...指定您希望在本地網絡共享以及公共Microsoft符號服務器中查找符號。請注意,通過網絡查找符號可以減慢速度。但是,如果您使用StackTrace,這可能不是問題。

+0

我認爲這會對我們有用,謝謝。 – scobi 2011-03-16 17:12:40

1

CLR使用COM組件讀取存儲在框架目錄中的.pdb文件diasymreader.dll。僅記錄此組件的編程接口(ISymUnmanagedReader)。 MSDN庫中關於任何類型的配置選項都沒有。 CLR也沒有提供。

不大可能。但是,我在DLL的二進制轉儲中看到一個註冊表項。看起來像一個名爲SymbolSearchPath的HKLM \ Software \ Microsoft \ VisualStudio \ MSPDB。聽起來像是一場精彩的比賽,通過使用Regedit.exe添加這個鍵和值來給它一個鏡頭。使其成爲一個字符串,包含具有.pdb文件的目錄名稱。

相關問題