2017-06-22 116 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团队)

相关问题