Tim*_*Tim 5 debugging multithreading breakpoints visual-studio
我们只希望打破某个线程.知道怎么做吗?我似乎找不到办法在这种情况下打破.
我应该在文中更具体.正如标题所示,我想打破上下文切换到线程.
Jar*_*Par 10
您需要设置断点过滤器.右键单击断点并选择Filter选项.它将显示一个对话框,允许您将断点过滤到特定的线程ID,线程名称,进程ID,进程名称甚至机器名称.
如果我想要一个断点只在id为42的线程上运行,我将使用以下过滤器表达式.
ThreadId = 42
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以在用户模式调试器中执行此操作,我会感到惊讶。
想象一下:您在线程 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)
您还可以执行各种其他过滤,这应该允许您保持实用程序运行直到问题发生,即使在生产中也是如此。
| 归档时间: |
|
| 查看次数: |
5181 次 |
| 最近记录: |