4

我们开始在一个项目中使用 SourceLink V2 来调试我们的内部 nuget 包。我们已经正确设置了它(尽我们所能)并且能够成功地调试成正常的同步方法。

不幸的是,我们的大部分代码都是异步编写的(使用 async/await)。当我们尝试单步执行任何可等待的方法时,编译器会直接跳过该行。我已经确认 PDB 可用,并且源代码使用“dotnet sourcelink print-urls [path.pdb]”嵌入到 PDB 中。

这是一个已知的限制吗?如果是这样,是否有某种解决方法来允许这种类型的调试?有没有人使用 SourceLink 成功调试过异步库?

4

1 回答 1

1

不确定 SourceLink,但可以在 C# 代码中使用异步方法进行调试: https ://msdn.microsoft.com/en-us/library/jj155813.aspx?f=255&mspperror=-2147217396#Anchor_1

当您等待任务时,代码执行将跳出当前函数并将控制权交给其调用者。然后在等待的任务完成后的某个时间点,它会在等待语句之后跳回执行代码。

顺便说一句,在嵌套函数调用中,Step Into 会进入嵌套最深的函数。如果在 Func1(Func2()) 之类的调用中使用 Step Into,调试器会单步执行 Func2 函数。调试器实际上是逐步执行代码语句而不是物理行。例如,一个 if 子句可以写在一行上。

于 2018-03-28T09:19:06.853 回答