c# - C# 和 vs2008 中的线程调试

标签 c# visual-studio-2008 multithreading debugging

我有一个非常严重的多线程调试问题。我在与串行设备交互时遇到某种计时问题,我需要对其进行追踪。我有三个线程:

  1. UI 更新的主线程。用户可以更改设备的一个参数,也可以通过选择预设来一次更改多个参数。
  2. 状态检查线程查询以确保设备仍然连接。如果用户关闭设备或以有趣的方式与设备本身进行交互,则状态更改需要反射(reflect)在用户界面中。
  3. 读取设备响应的串口的线程。

我的问题实际上与调试这种情况有关。似乎我在每个线程中的每一行都必须有一个断点才能进行调试;如果我中断一个线程,调试器将不会逐步执行该线程。我知道其他线程将继续更新,但我正在执行的线程不应该在调试器中正常执行,即从一行转到下一行吗?然后,我可以使用“线程”选项卡在线程之间切换。

我提到我在 WPF 中,因为我不知道这是否会完全改变这种情况;也许会,也许不会。状态检查线程是 UI 控件的一部分,因为只有在 UI 启动时才需要检查状态。该控件位于与主应用程序不同的库中。

最佳答案

当调试器在断点处停止时,默认情况下它将挂起所有其他线程。但是当您单步执行或继续时,所有 3 个线程都会恢复。当您逐步执行代码时,调试器基本上会在下一行设置一个临时断点并恢复所有线程。其他 2 个可能有机会在虚拟断点被击中之前运行。

您可以在调试时卡住其他线程

当您处于断点处时,选择Debug | window |线程。选择您不感兴趣的主题并右击,选择卡住。这会让您专注于您正在单步执行的一个线程。

关于c# - C# 和 vs2008 中的线程调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014324/

相关文章:

python - 使用 QObject 从 Python 线程发出信号

C# WPF 使工具栏在工具栏托盘内右对齐

c++ - fatal error C1083 : Cannot open compiler intermediate file: '***.pch' : No such file or directory

c# - 如何在 C# 中添加启动画面?

c++ - 带有 shared_from_this 参数的 std::async 的未决 std::future get 阻止了 this 的破坏

java - 具有同步数组列表的并行任务

c# - 以编程方式重命名计算机

c# - 如何解决DEP6500和DEP6701错误?

c# - 没有 Action 的 ASP MVC 路由

c# - 子控件中的 `DesignMode` 设置不正确?