调试多线程和异步应用程序
多线程应用程序总是更难调试,因为您需要同时跟踪多个线程。 此外,多线程应用程序会引入新的错误类型和性能问题,例如工作负载分配不均、锁争用、串行执行等。
在调试会话中通过单步操作获得的顺序流程假象在调试多线程应用程序时并没有帮助,反而可能会产生误导。 在调查可能是并发错误的问题时,您应该更多地依赖断点,而不是顺序单步操作。 例如, 条件断点可以在您想专注于某个线程时提供很大帮助:使用线程的一些唯一属性(例如线程 ID)来触发断点; 数据断点会在任何线程更改特定对象的标记属性时中断执行。
使用以下功能调试多线程和异步应用程序:
在 线程与变量 选项卡的 调试窗口 中,左侧窗格显示应用程序的所有线程,下一窗格列出所选线程的所有堆栈帧:

并行堆栈选项卡通过以图表形式显示线程及其堆栈帧,简化了线程分析。
任务选项卡帮助您获取应用程序当前执行点中
System.Threading.Tasks.Task和ValueTask对象的详细状态信息。当前线程的 ID 显示在编辑器中 当前执行点的行内。
冻结和解冻线程
为了控制线程的执行顺序,您可以挂起(冻结)和恢复(解冻)特定线程。 此技术将帮助您调查死锁、竞争条件和其他并发问题。

最后修改日期: 2025年 6月 24日