4

我只是想知道是否有人知道是否可以设置F11只对单个线程感兴趣的调试器?我有两个线程在运行 atm,但我只对其中一个感兴趣。因此,我不希望屏幕继续跳到页面上以向我展示第一个线程在做什么。我想将其设置为仅显示第二个线程在做什么。

任何指针将不胜感激,谢谢。

4

2 回答 2

4

一种方法是冻结您不感兴趣的线程。

在 Visual Studio 中,显示“线程”窗口,可从“调试”->“Windows”菜单获得。

然后,当您使用 进行跟踪时F11,如果调试器在您不感兴趣的线程中中断,请在线程窗口中找到该线程,右键单击它并在上下文菜单中选择“冻结”选项。

现在,当您继续使用F10or进行跟踪时F11,您将永远不会在冻结的线程中遇到断点。

请注意,冻结的线程根本不会执行,因此如果您在调试时确实需要它做一些工作,您可能需要不时解冻并再次冻结它。

于 2012-11-21T17:36:17.547 回答
1

如果您打开调试器的“线程”窗口,您会看到每个线程都有一个“仅我的代码”标志。我发现,如果您只为正在单步执行的当前线程设置标志,“Step into”(F11)和“Step over”(F10)函数似乎只针对该线程。虽然这针对本机线程,但它同样适用于使用线程的托管代码。

但是,如果您不小心,该功能可能会非常脆弱 - 任何线程的断点仍然会中断(除非断点被过滤为仅用于感兴趣的线程)。如果在您设置此标志之前另一个线程正在被单步执行,那么当您尝试单步执行当前线程时,该线程可能仍与调试器“交互”。因此,您需要在使用此功能时仔细管理您的断点。

然而,总而言之,它似乎工作得很好。

请注意,我认为该术语非常令人困惑,因为“仅我的代码”还用于描述托管调试器功能,用于将调试器设置为不打扰进入“非用户”代码(由方法上的属性控制)。本机线程“只是我的代码”有所不同,实际上我在文档中找不到太多内容(如何:标记和取消标记线程)。似乎没有提到这种针对单线程进行步进的特殊行为 - 我偶然发现了它。

于 2012-11-21T18:41:52.883 回答