【发布时间】:2012-11-21 17:30:08
【问题描述】:
我只是想知道是否有人知道是否可以设置调试器以使 F11 只对单个线程感兴趣?我有两个线程在运行 atm,但我只对其中一个感兴趣。因此,我不希望屏幕继续跳到页面上以向我展示第一个线程在做什么。我想把它设置成只显示第二个线程在做什么。
任何指点将不胜感激,谢谢。
【问题讨论】:
标签: c# multithreading visual-studio-2010 c#-4.0
我只是想知道是否有人知道是否可以设置调试器以使 F11 只对单个线程感兴趣?我有两个线程在运行 atm,但我只对其中一个感兴趣。因此,我不希望屏幕继续跳到页面上以向我展示第一个线程在做什么。我想把它设置成只显示第二个线程在做什么。
任何指点将不胜感激,谢谢。
【问题讨论】:
标签: c# multithreading visual-studio-2010 c#-4.0
一种方法是冻结您不感兴趣的线程。
在 Visual Studio 中,显示“线程”窗口,该窗口可从“调试”->“Windows”菜单获得。
然后,当您使用 F11 进行跟踪时,如果调试器在您不感兴趣的线程中中断,请在线程窗口中找到该线程,右键单击它并选择“冻结”上下文菜单中的选项。
现在,当您继续使用 F10 或 F11 进行跟踪时,您将永远不会在冻结线程中遇到断点。
请注意,冻结的线程根本不会执行,因此如果您在调试时确实需要它做一些工作,您可能需要不时解冻并再次冻结它。
【讨论】:
如果您打开调试器的“线程”窗口,您会看到每个线程都有一个“仅我的代码”标志。我发现如果你只为你正在单步执行的当前线程设置标志,“Step into”(F11)和“Step over”(F10) 函数似乎只针对该线程。虽然它针对的是本机线程,但它同样适用于使用线程的托管代码。
但是,如果您不小心,该功能可能会非常脆弱 - 任何线程的断点仍然会中断(除非断点被过滤为仅用于感兴趣的线程)。如果在您设置此标志之前另一个线程正在被单步执行,那么当您尝试单步执行当前线程时,该线程可能仍与调试器“交互”。因此,您需要在使用此功能时仔细管理断点。
然而,总而言之,它似乎工作得很好。
请注意,我认为该术语相当混乱,因为“仅我的代码”还用于描述托管调试器功能,用于将调试器设置为不打扰进入“非用户”代码(由方法上的属性控制) )。本机线程“只是我的代码”有所不同,实际上我在文档中找不到太多内容 (How to: Flag and Unflag Threads)。似乎没有提到这种针对单线程进行步进的特殊行为 - 我偶然发现了它。
【讨论】: