【问题标题】:UWP Why can I debug.StepOver, but not Debug.RunUWP 为什么我可以 debug.StepOver,但不能 Debug.Run
【发布时间】:2017-05-05 14:32:23
【问题描述】:

我有一小段代码在“正常调试”中只是挂起执行“var folder =...”

async Task<StorageFolder> GetAssetsFolderAsync()
    {
        var folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets");
        return folder;
    }

我在...中放置了两个断点

如果我一开始就中断,我可以 Debug.StepOver 到“返回文件夹”行。如果我使用 debug.Run 代替 in 消失并且不会命中下一个断点。从 MainPage_Loaded 调用该方法。知道如何纠正这个问题。更奇怪的是,它过去可以毫无问题地工作,而我没有改变那些行。即很多其他的)

【问题讨论】:

  • 试试这个,在任务内的那一行设置一个断点。这在 step into 不起作用时有效。
  • 你必须关注这段代码的调用者。如果它不等待呼叫,那么您会得到这种行为。和海龟一路下来,调用者的调用者必须等待,等等。Debug > Windows > Call Stack and Debug > Windows > Tasks 调试器窗口是你的朋友。
  • 您是在 Debug 还是 Release 模式下运行代码?

标签: c# uwp async-await visual-studio-debugging


【解决方案1】:

经过长时间的搜索,我从 Skeet 先生和 Cleary 先生那里找到了答案。我阻塞了 UI 线程。

这里有更详细的解释:

Call to await GetFileAsync() never returns and app hangs in WinRT app

我不认为我会想到它。它被修复了:

public async static Task<bool> StaticInitializeAsync()
    {
        recordingsFolder = await getRecordingsFolderAsync();
        AssetsFolder = await Statics.InstallationFolder.GetFolderAsync(@"Assets");
        defaultWavFile = await AssetsFolder.GetFileAsync("Default.wav");
        return true;
    }

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以将其标记为答案。
【解决方案2】:

我相信你会得到一个异常,Visual Studio 会默默地为你处理。

尝试打开异常设置并确保它在任何异常时停止。

  1. 调试 -> Windows -> 异常设置
  2. 标记所有 CLR 异常

编辑: 也尝试catch for AggregateException,这些可以在处理TPL时包装真正的异常。

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 1970-01-01
    • 2012-10-20
    • 2021-03-24
    • 2020-05-31
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2018-05-21
    相关资源
    最近更新 更多