【问题标题】:Visual Studio Source Server with Async/Await method debugging带有 Async/Await 方法调试的 Visual Studio Source Server
【发布时间】:2016-03-29 01:01:58
【问题描述】:

我有一个奇怪的问题,我已经做了两天了。

我们为内部 nuget 包设置了 TeamCity/ProGet。它到了我们需要调试 nuget 包的地步,所以我继续启用源服务器支持。一切都很好,很容易,我继续前进。

当天晚些时候,我尝试进入 nuget 包中的可等待方法,它直接跳过了它(没有错误或打印输出说明找不到源)。

在我的故障排除过程中,我为我尝试进入的方法创建了一个同步包装器,重新发布了 nuget 包并尝试进入它,但没有问题。

为了排除更复杂的库,我使用两种方法创建了一个新的 nuget 包:

    public async Task<bool> MyTestAsync()
    {
        return await Task.FromResult(true);
    }

    public bool MyTest()
    {
        return MyTestAsync().Result;
    }

我每次都可以毫无问题地进入同步方法,但 VS 2015 每次都会跳过异步方法。

为了排除我的盒子,我去了一个新的图像并复制了产生相同结果的测试。

我在谷歌搜索中找不到的源/符号服务器调试是否存在限制?有其他人让这个工作吗?

【问题讨论】:

  • 只要您有 nuget、符号和源服务器设置,这很容易重现。如果我让代码运行一次并使用 Intellitrace 将其返回,并且在历史调试时在我要调试的代码中设置一个断点,我可以获得一个断点来工作。在下一次执行时,它将在方法内部停止,而不是越过它。我希望有人能有所了解,因为并非所有开发人员都有 2015 Enterprise,所以这种解决方法不起作用。
  • 进一步更新… IDE 并在异步方法中设置一个断点,IDE 不会进入并再次执行代码,它将在那里中断,允许根据需要进行调试。现在,“缺陷”看起来像是 Visual Studio 的一个,它不允许源服务器检索(通过 Fiddler 确认)以步入异步方法或在源已经存在的情况下移入该方法。它似乎只有在设置了手动中断时才有效。
  • 我认为这个问题与符号服务器/源服务器无关,而是MSBuild 14在Release模式下编译时生成的PDB的问题。我已经提交了一个问题here

标签: c# visual-studio debugging asynchronous nuget


【解决方案1】:

我遇到了类似的问题,我能够单步执行同步代码,但不能单步执行异步方法。我还确认调试器没有尝试使用 SRCSRV 来解析异步代码的源文件位置。我在 VS 常规调试设置中打开了地址级别调试,这为我解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2018-03-28
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多