2017-06-22 111 views
1

我試圖通過WinDbg打印CLR對象/類,但失敗了。調試CLR對象時出現錯誤「Symbol clr!XXX not found」 class

首先,我試着運行x clr!Thread*來獲得一些CLR類名,輸出如下。

00007ffd`68957f18 clr!ThreadStore::s_pOSContext = <no type information> 
00007ffd`685b0bf0 clr!ThreadNative::SetApartmentState (<no parameter info>) 
00007ffd`685b12c0 clr!ThreadNative::YieldThread (<no parameter info>) 
00007ffd`6806be60 clr!Thread::ResetManagedThreadObjectInCoopMode (<no parameter info>) 
00007ffd`6895e928 clr!ThreadpoolMgr::LastCPThreadCreation = <no type information> 
00007ffd`68627800 clr!ThreadPoolNative::CorUnregisterWait (<no parameter info>) 
00007ffd`685b1320 clr!ThreadExceptionState::GetCurrentEHClauseInfo (<no parameter info>) 
00007ffd`681285c4 clr!ThreadpoolMgr::ChangeTimerQueueTimer (<no parameter info>) 
00007ffd`684c69f0 clr!Thread::BaseWinRTUninitialize (<no parameter info>) 
00007ffd`680eea20 clr!ThreadpoolMgr::ShouldGateThreadKeepRunning (<no parameter info>) 
00007ffd`684c8ca0 clr!Thread::IsWithinCer (<no parameter info>) 
00007ffd`6859a0c0 clr!ThreadpoolMgr::DeleteWait (<no parameter info>) 

然後我運行一些命令像dt clr!<classname>dt clr!<classname> <objectaddress>,但他們沒有工作,錯誤的是

符號CLR!爲XXXXX沒有找到。

0:000> dt clr!ThreadNative 
Symbol clr!ThreadNative not found. 
0:000> dt clr!Thread 
Symbol clr!Thread not found. 
0:000> dt clr!ThreadpoolMgr 
Symbol clr!ThreadpoolMgr not found. 

BTW,我發現​​,但是沒有辦法,直到現在。

但是有些人可以運行dt命令successfully for the CLR class\object with old version CLR

我確定正確加載CLR的PDB。 請幫助檢查您是否有相同的問題,如果不是,請告知如何解決該問題。

+1

提交了錯誤的請求給微軟,並等待他們的審查結果。 https://connect.microsoft.com/VisualStudio/feedback/details/3136349 –

回答

1

您可能擁有clr.dll的公共符號 - 這些是Microsoft通常爲clr.dll和許多其他產品分發的符號。公共符號的設計信息較少,因此預計會出現失敗。

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/public-and-private-symbols

在你這上面提到的鏈接顯示該人已進入私人符號,但我不知道他們是如何獲得它們。如果您的目標是瞭解運行時如何在內部運行,CoreCLR是開源的(https://github.com/dotnet/coreclr),並且許多內部組件與clr.dll高度相似。如果您的目標是調試某些特定的運行時問題,您可以嘗試使用SOS中提供的命令,或者使用Visual Studio調試器,或者創建另一個SO帖子來描述您嘗試解決的問題,以便社區可以提供其他建議。

希望這有助於

-Noah福爾克(微軟的.Net團隊)

相關問題