2016-04-22 6 views
7

Я отлаживаю программу на C++, скомпилированную с помощью MSVC под Windows. Я хочу исследовать проблему, связанную с многопоточной обработкой. Поэтому я ставлю ASSERT в свой код, и когда программа достигает ASSERT, она отображает окно об ASSERT (Standart [Abort], [Retry], [Ignore]) с предложением приостановить программу в отладчике. Я нажимаю кнопку [Retry] и паузы программы. НО, пока я нажимал кнопку, другие потоки продолжают выполняться. Итак, вопрос в том, как немедленно остановить программу, когда она достигнет определенного момента, чтобы узнать, что в то время делали другие потоки?Force C++ программа для приостановки в отладчике Visual Studio

ответ

2

Вы можете установить условную точку останова, вместо использования assert:

breakpoint visual studio

2

В случае, если вы хотите сделать это программно, использовать DebugBreak. (C# имеет эквивалентную api System.Diagnostics.Debugger.Break)

Если вы хотите сделать это от ide, от msdn page вы можете поместить точку останова (или сломать все приложение, ctrl + alt + B) от визуальной студии, а затем контролировать выполнение потока, используя «замораживание» и «оттаивание» в окне потока.

+1

Иногда встроенный компилятор __debugbreak() является предпочтительным по сравнению с DebugBreak (который является экспортом kernel32), поскольку внутренняя архитектура по-прежнему надежно, когда символы MS System не загружаются в отладчик. –