我可以在Visual Studio(c ++)中设置断点来打破线程上下文切换吗?

Tim*_*Tim 5 debugging multithreading breakpoints visual-studio

我们只希望打破某个线程.知道怎么做吗?我似乎找不到办法在这种情况下打破.

我应该在文中更具体.正如标题所示,我想打破上下文切换到线程.

Jar*_*Par 10

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

如果我想要一个断点只在id为42的线程上运行,我将使用以下过滤器表达式.

ThreadId = 42
Run Code Online (Sandbox Code Playgroud)

  • `ThreadId = 42`对我不起作用.VisualStudio调试器确认找不到"ThreadId".但是$ tid(当前线程的线程ID)工作正常(http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De).这是一个条件的例子:`$ tid == 42` (2认同)

Joh*_*ers 4

如果有一种方法可以在用户模式调试器中执行此操作,我会感到惊讶。

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


我建议您尝试Sysinternals (现已成为 Microsoft 的一部分)的Process Monitor。您可以将其限制为仅捕获线程和进程事件,生成如下所示的内容:

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
Run Code Online (Sandbox Code Playgroud)

您还可以执行各种其他过滤,这应该允许您保持实用程序运行直到问题发生,即使在生产中也是如此。