Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 我可以在VisualStudio(c++)中设置断点以在线程上下文开关上断开吗?_Visual Studio_Multithreading_Debugging_Breakpoints - Fatal编程技术网

Visual studio 我可以在VisualStudio(c++)中设置断点以在线程上下文开关上断开吗?

Visual studio 我可以在VisualStudio(c++)中设置断点以在线程上下文开关上断开吗?,visual-studio,multithreading,debugging,breakpoints,Visual Studio,Multithreading,Debugging,Breakpoints,我们只想打断一条线。你知道怎么做吗?在那种情况下,我似乎找不到打破僵局的办法 我应该在课文中说得更具体些。正如标题所示,我想将上下文切换中断到线程中。您需要设置断点过滤器。右键单击断点并选择过滤器选项。它将显示一个对话框,允许您将断点筛选为特定的线程ID、线程名称、进程ID、进程名称甚至机器名称 如果我希望断点只在id为42的线程上起作用,我将使用以下过滤器表达式 ThreadId = 42 如果在用户模式调试器中有这样做的方法,我会感到惊讶 想象一下:您为线程42被切换时设置了一个断点。断点

我们只想打断一条线。你知道怎么做吗?在那种情况下,我似乎找不到打破僵局的办法


我应该在课文中说得更具体些。正如标题所示,我想将上下文切换中断到线程中。

您需要设置断点过滤器。右键单击断点并选择过滤器选项。它将显示一个对话框,允许您将断点筛选为特定的线程ID、线程名称、进程ID、进程名称甚至机器名称

如果我希望断点只在id为42的线程上起作用,我将使用以下过滤器表达式

ThreadId = 42

如果在用户模式调试器中有这样做的方法,我会感到惊讶

想象一下:您为线程42被切换时设置了一个断点。断点命中。调试器已激活。现在,另一个线程被激活,线程42不再处于活动状态

我建议你从现在开始尝试微软的一部分。您可以将其限制为仅捕获线程和进程事件,从而产生如下结果:

20:43:51.9162409    lsass.exe   440 Thread Create       SUCCESS Thread ID: 5420
20:43:51.9166730    lsass.exe   440 Thread Create       SUCCESS Thread ID: 7916
20:43:53.2990544    svchost.exe 736 Thread Create       SUCCESS Thread ID: 5540
20:43:53.7664146    svchost.exe 736 Thread Create       SUCCESS Thread ID: 7384
20:43:53.7985662    svchost.exe 736 Thread Create       SUCCESS Thread ID: 1888
20:43:54.2444922    wmiprvse.exe    3144    Thread Create       SUCCESS Thread ID: 6300
20:43:54.2466447    svchost.exe 736 Thread Create       SUCCESS Thread ID: 5636
20:43:54.2480367    wmiprvse.exe    3144    Thread Create       SUCCESS Thread ID: 6624
20:43:54.2515443    svchost.exe 736 Thread Create       SUCCESS Thread ID: 7392
20:43:55.5332047    devenv.exe  4640    Thread Exit     SUCCESS Thread ID: 4696, User Time: 0.0000000, Kernel Time: 0.0000000
20:43:55.9179052    Explorer.EXE    3176    Process Create  C:\WINDOWS\system32\verclsid.exe    SUCCESS PID: 3356, Command line: /S /C {2559A1F4-21D7-11D4-BDAF-00C04F60B9F0} /I {000214E6-0000-0000-C000-000000000046} /X 0x401
20:43:55.9179079    verclsid.exe    3356    Process Start       SUCCESS Parent PID: 3176
20:43:55.9179101    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 7108
20:43:55.9354621    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 940
20:43:55.9521113    verclsid.exe    3356    Thread Create       SUCCESS Thread ID: 2704
20:43:56.5259637    verclsid.exe    3356    Thread Exit     SUCCESS Thread ID: 2704, User Time: 0.0000000, Kernel Time: 0.0000000

您还可以执行各种其他筛选,这将允许您在问题出现之前一直运行该实用程序,即使在生产中也是如此。

是的,我知道这些。我希望在启动或唤醒线程时设置断点。ThreadId=42对我不起作用。VisualStudio调试器发现未找到ThreadId。但是$tid当前线程的线程ID可以正常工作。这是一个条件示例:$tid==42用户模式调试器在另一个进程中运行,因此我觉得这是可能的。操作系统将不得不向调试器公开一些我并不期望的东西。@Joshua:仔细想想:这仍然是一个上下文切换。也许OP对上下文切换不感兴趣,而是对等待状态的更改感兴趣。我们正在尝试调试一个令人讨厌的问题,其中一个线程是由第三方库启动的。我们不确定该线程在初始化过程中从何处启动。。。我不知道该怎么诊断,我确实想得很清楚。如果不是这个进程上的线程被抢占,那么在切换到这个进程的任何线程时都会出现中断。谢谢John-当线程开始执行时,我们需要调试器中断。我不确定进程监视器信息将如何发挥作用。我想我错过了什么。我们正在逐步完成我们的代码——我们没有第三方的源代码,但是我们想弄清楚初始化过程中发生了什么。如果可以的话,我们现在当然在调试器中查看汇编程序,为什么要将上下文开关打断到线程中?这样我就可以在线程启动时开始调试线程。它使我的应用程序崩溃。