我是WinDbg的新手。我正在尝试使用它来调试CoreCLR中的the mscorlib source code,但我似乎遇到了一些问题,让SOS突出显示C#代码的源代码行(就像WinDbg对C / C ++代码一样)。
以下是我到目前为止采取的步骤(我正在尝试调试string.IndexOf(char, int, int)
函数here):
0.克隆CoreCLR并通过build skiptests release
打开WinDbg并运行corerun MyNetCoreApp.exe
coreclr\bin\Product\Windows_NT.x64.Release\PDB
bp /1 coreclr!EEStartup ".loadby sos coreclr"
在EEStartup
处中断并加载SOS扩展程序
bp /1 @$ra; g
在EEStartup
方法的末尾设置断点并运行,通过该断点,所有内容都应该被初始化/ mscorlib将被加载并且SOS命令将起作用
!name2ee System_Private_CoreLib_ni!System.String
1 获取EEClass地址,!dumpclass
显示MethodTable地址,!dumpmt -md
列出String中的所有方法以及他们的地址。
!bpmd -md 00007ffd7d039618
(方法的MethodDesc)在开始时设置断点
不幸的是,当我点击托管断点时,看起来WinDbg不会立即为我打开文件,或突出显示断点,就像使用C / C ++一样。即使我通过.open
在编辑器中打开文件并导航到该文件,也不会突出显示任何内容。我认为WinDbg应该接受PDB符号,因为当我执行lm
时,System_Private_CoreLib_ni
1 被列为(pdb symbols)
下一个模块它。
也许我为了一个repro提供了一些不必要的信息,但是有可能用托管代码/ SOS和WinDbg突出显示源文件中的断点吗?感谢。
1 mscorlib最近已在.NET Core中重命名为System.Private.CoreLib。 ni是预先制作的原生图像集。