Могу ли я установить точку останова в Visual Studio (c ++) для прерывания переключателя контекста потока? - PullRequest
5 голосов
/ 15 июня 2010

Мы хотим обрываться только в определенной теме. Есть идеи, как это сделать? Кажется, я не могу найти способ нарушить это условие.

Я должен был быть более конкретным в тексте. Как следует из названия, я хотел бы разбить переключение контекста на поток.

Ответы [ 2 ]

10 голосов
/ 15 июня 2010

Вам необходимо настроить фильтр точек останова.Щелкните правой кнопкой мыши точку останова и выберите параметр «Фильтр».Он представит диалоговое окно, которое позволяет вам фильтровать точку останова по определенным идентификаторам потоков, именам потоков, идентификаторам процессов, именам процессов или даже именам машин.

Если бы я хотел, чтобы точка останова работала только в потоке с идентификатором 42, я бы использовал следующее выражение фильтра.

ThreadId = 42
3 голосов
/ 16 июня 2010

Я был бы удивлен, если бы был способ сделать это в отладчике пользовательского режима.

Представьте себе: вы устанавливаете точку останова, когда поток 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

Вы также можете выполнять любые другие виды фильтрации, что позволит вам продолжать работу утилиты до тех пор, пока проблема не возникнет, даже в рабочей среде.

...