Мы хотим только прервать определенный поток. Какая-либо идея, как сделать это? Я, может казаться, не нахожу способ повредиться на том условии.
Я должен был быть более конкретным в тексте. Как заголовок предполагает, я хотел бы повредиться на контекстном переключении в поток.
Я был бы удивлен, если бы существовал способ сделать это в отладчике пользовательского режима.
Представьте: вы устанавливаете точку останова, когда включается поток 42. Точка останова попадает. Отладчик активирован. Теперь активирован другой поток, и поток 42 больше не активен!
Предлагаю вам попробовать Process Monitor из Sysinternals (теперь часть Microsoft). Вы можете ограничить его только захватом потоков и событий процесса, создавая что-то вроде следующего:
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
Вы также можете выполнять всевозможные другие виды фильтрации, которые должны позволить вам продолжать работу утилиты, пока не возникнет проблема, даже в производственной среде.
Вам нужно настроить фильтр точек останова. Щелкните правой кнопкой мыши на точке останова и выберите опцию Filter (Фильтр). Появится диалоговое окно, позволяющее отфильтровать точку останова по определенным идентификаторам потоков, именам потоков, идентификаторам процессов, именам процессов или даже именам машин.
Если бы я хотел, чтобы точка останова функционировала только на потоке с идентификатором 42, я бы использовал следующее выражение фильтра.
ThreadId = 42