C# 这个CopyPDBs函数(来自clr.dll)在做什么?
在运行IIS的生产环境中使用Process Explorer分析ASP.NET MVC应用程序时,我注意到有许多调用来自C# 这个CopyPDBs函数(来自clr.dll)在做什么?,c#,.net,dll,clr,internal,C#,.net,Dll,Clr,Internal,在运行IIS的生产环境中使用Process Explorer分析ASP.NET MVC应用程序时,我注意到有许多调用来自C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll的CopyPDBs函数: 它们都具有完全相同的堆栈跟踪: ntdll.dll!ZwWaitForSingleObject+0xa KERNELBASE.dll!WaitForSingleObjectEx+0x98 clr.dll!GetMetaDataInternal
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
的CopyPDBs
函数:
它们都具有完全相同的堆栈跟踪:
ntdll.dll!ZwWaitForSingleObject+0xa
KERNELBASE.dll!WaitForSingleObjectEx+0x98
clr.dll!GetMetaDataInternalInterface+0x3064a
clr.dll!GetMetaDataInternalInterface+0x30732
clr.dll!GetMetaDataInternalInterface+0x306e5
clr.dll!CopyPDBs+0x44a2
KERNEL32.DLL!BaseThreadInitThunk+0x22
ntdll.dll!RtlUserThreadStart+0x34
我的问题是:clr.dll中的CopyPDBs
函数到底在做什么?
我已经搜索了很多,但是仍然找不到这个函数的任何解释和/或文档
注意:这个问题与我之前在ServerFault中提出的一个问题有关:它没有做任何事情。Process Explorer无权访问clr.dll的PDB文件,因此对代码了解不够。当您查看与已知符号的指令偏移量时,
+0x44a2
很长很长,远远超过CopyPDBs()函数。从clr.dll中看到的所有符号都是垃圾。ntdll.dll中的符号很好,请注意较小的偏移量
如果没有为DLL中的内部函数提供符号的PDB文件,调试器只能依赖导出的函数。Clr.dll中没有很多
帮助Process Explorer显示更好的堆栈跟踪是本文的主题
Windbg不是唯一的方法,您还可以使用Visual Studio: