如何调试异步代码?
How to debug async code?
我一直在尝试制作一个简单的应用程序,它可以获取 YouTube 网址列表并将它们作为 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:
(顺便说一下,这个视频是我很容易找到的最短的视频)
文件下载为 "Video Title".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 社区调试器能让我调试好这段代码吗?谢谢!
保存或下载文件时可能出错,但您没有检查它。
代码:
.ContinueWith(t => Console.WriteLine("Completed download.")));
应该检查前提taks是否有错误。
.ContinueWith(t =>
{
if(t.Exception != null)
{
// log error
}
else
{
Console.WriteLine("Completed download.")));
});
添加到列表的外部任务代表续集完成所以即使下载失败也会成功。
评论的副本,因为这是问题的答案(不是代码问题的解决方案):
您可以像正常代码一样调试它。使用 step into 或 step over 设置断点并遍历代码。如果您有多个线程,这可能会很痛苦,因为调试器会从一个线程跳转到另一个线程。如果您只想调试一个线程,请转到线程 window (debug/windows/threads) 找到当前线程(黄色箭头)并冻结所有其他线程。
我一直在尝试制作一个简单的应用程序,它可以获取 YouTube 网址列表并将它们作为 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:
(顺便说一下,这个视频是我很容易找到的最短的视频) 文件下载为 "Video Title".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 社区调试器能让我调试好这段代码吗?谢谢!
保存或下载文件时可能出错,但您没有检查它。
代码:
.ContinueWith(t => Console.WriteLine("Completed download.")));
应该检查前提taks是否有错误。
.ContinueWith(t =>
{
if(t.Exception != null)
{
// log error
}
else
{
Console.WriteLine("Completed download.")));
});
添加到列表的外部任务代表续集完成所以即使下载失败也会成功。
评论的副本,因为这是问题的答案(不是代码问题的解决方案):
您可以像正常代码一样调试它。使用 step into 或 step over 设置断点并遍历代码。如果您有多个线程,这可能会很痛苦,因为调试器会从一个线程跳转到另一个线程。如果您只想调试一个线程,请转到线程 window (debug/windows/threads) 找到当前线程(黄色箭头)并冻结所有其他线程。