【问题标题】:How to debug async code?如何调试异步代码?
【发布时间】:2015-12-04 01:10:00
【问题描述】:

我一直在尝试制作一个简单的应用程序,它可以获取 youtube URL 列表并将它们作为 MP3 下载到指定文件夹。但是,它不会下载文件。 (我以前没问题,但我猜这个夏天缺乏练习已经毁了它)

首先,代码:https://gist.github.com/ericBG/159debbcdb606647afb8(我知道它并不完全是最小的,但它仍然很小,我不太确定问题出在哪里)

所以,发生的事情是,它意味着有一些输出,例如:

Enter folder path where you would like output .mp3 files to be saved:
G:\MusicTemp
Enter any youtube videos you would like downloaded:
https://www.youtube.com/watch?v=N6eUF30HXWY
API requested for http://youtube.com/watch?v=N6eUF30HXWY
Downloading API response for http://youtube.com/watch?v=N6eUF30HXWY
Song requested for http://youtube.com/watch?v=N6eUF30HXWY
Completed download.
Enter any youtube videos you would like downloaded:

(该视频是我很容易找到的最短视频) 并将文件下载为路径中的“视频标题”.mp3。

然而发生了什么:

Enter folder path where you would like output .mp3 files to be saved:
G:\MusicTemp
Enter any youtube videos you would like downloaded:
https://www.youtube.com/watch?v=N6eUF30HXWY
API requested for http://youtube.com/watch?v=N6eUF30HXWY
Downloading API response for http://youtube.com/watch?v=N6eUF30HXWY
Completed download.
Enter any youtube videos you would like downloaded:

文件不在路径中。

我感觉这是由于我的一些异步编程。但是,我不确定如何调试它,因为我不知道哪些工具可以让我逐步了解我哪里出错了,然后纠正 . VS Community 调试器能让我很好地调试这段代码吗?谢谢!

【问题讨论】:

  • 你有什么异常吗?你有目录的写权限吗?
  • 您是如何创建现有代码的?你用的是什么IDE?
  • @ArghyaC 没有例外,只是跳过了部分代码。我绝对有目录的写权限。
  • @Verarind 我在问如何调试异步代码,因为我不明白怎么做。我知道 VS Community 2015 有一个调试器。
  • @It'sNotALie。您可以像正常代码一样调试它。设置断点使用 step into 或 step over and walk through the code。如果您有多个线程,那可能会很痛苦,因为调试器会从一个线程跳到另一个线程。如果您只想调试一个线程,请转到线程窗口 (debug/windows/threads) 找到当前线程(黄色箭头)并冻结所有其他线程。

标签: c# .net debugging asynchronous visual-studio-debugging


【解决方案1】:

评论的副本,因为那是问题的答案(不是代码问题的解决方案):

您可以像普通代码一样对其进行调试。设置断点使用 step into 或 step over and walk through the code。如果您有多个线程,那可能会很痛苦,因为调试器会从一个线程跳到另一个线程。如果您只想调试一个线程,请转到线程窗口 (debug/windows/threads) 找到当前线程(黄色箭头)并冻结所有其他线程。

【讨论】:

    【解决方案2】:

    保存或下载文件时可能出错,但您没有检查它。

    代码:

    .ContinueWith(t => Console.WriteLine("Completed download.")));
    

    应该检查前面的taks是否有错误。

    .ContinueWith(t => 
                  {
                     if(t.Exception != null)
                     {
                        // log error
                     }
                     else
                     {
                        Console.WriteLine("Completed download.")));
                     });
    

    添加到列表中的外部任务代表继续完成,所以即使下载失败也会成功。

    【讨论】:

    • 这看起来像是程序问题的解决方案。问题是如何调试它。
    • 它有一个例外。谢谢!
    猜你喜欢
    • 2018-09-06
    • 2014-01-08
    • 2012-11-25
    • 1970-01-01
    • 2014-04-27
    • 2016-10-12
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多