19.新版windbg无法调试源码怎么办
用 windbg 调试 .NET6 的coreclr源码时,可以轻松映射代码,但在调试 .NET8 时就不行了,该怎么办呢?
首先说一下原理,默认情况下缺省的 .srcpath
指向的是微软的源码服务器
,如果可以往外翻的话,可以直接下载,无需任何操作,如果不能翻的话,需要手工设置下远程路径为空,所以有两种方案。
1. 界面配置
将下面的三行代码丢到输入框即可,尤其是第一行代码。
srv*
D:\dream\runtime-8.0.2\coreclr\gc
D:\dream\runtime-8.0.2\coreclr\vm
2. 代码配置
也可以使用 windbg 自带的 .srcpath
命令设置,脚本如下:
.srcpath srv*;D:\dream\runtime-8.0.2\coreclr\gc;D:\dream\runtime-8.0.2\coreclr\vm
接下来写一段简单的代码,用 windbg 测一下。
static void Main(string[] args)
{
int a = int.MaxValue;
int b = 1;
try
{
Debugger.Break();
int result = checked(a + b);
Console.WriteLine(result);
}
catch (OverflowException ex)
{
Console.WriteLine("Overflow occurred: " + ex.Message);
}
}
然后用 windbg 附加调试,截图如下,可以看到完美命中。