Неуправляемая / нативная альтернатива для управляемой системы :: Диагностика :: Отладчик :: Запустить функцию? - PullRequest
2 голосов
/ 13 сентября 2010

У меня есть приложение в смешанном режиме, в котором я хочу запустить отладчик, если обнаружена ошибка во внутренних структурах данных. Как ни странно, функции DebugBreak и __debugbreak, похоже, не работают должным образом (кажется, что .Net-среда перехватывает исключение точки останова, что приводит к всевозможным неприятным побочным эффектам).

Решение моего предыдущего вопроса (см. Поведение DebugBreak отличается между неуправляемым и смешанным (неуправляемым + управляемым) приложением? ), кажется, работает для очень простых ситуаций, но не в моем приложении (оно просто оставляет мое приложение висит).

К счастью, я обнаружил, что выполнение System::Diagnostics::Debugger::Launch, похоже, решает проблему. Однако место, где мне нужна эта логика, используется как в неуправляемых, так и в смешанных приложениях. Кроме того, вызов управляемого кода в месте, где я хочу разместить логику, довольно сложен.

Следовательно: есть ли неуправляемая альтернатива для функции System::Diagnostics::Debugger::Launch?

Ответы [ 2 ]

3 голосов
/ 14 сентября 2010

Мне кажется, что использование System :: Diagnostics :: Debugger :: Launch является хорошим моментом.Отладчик .NET, как и некоторые другие классы .NET, также имеет неуправляемый интерфейс , например ICorDebug :: DebugActiveProcess .Мне кажется, вы должны попытаться использовать его.Вы можете прочитать больше об этом в http://msdn.microsoft.com/en-us/magazine/cc301510.aspx. Это не будет работать, вы можете попытаться написать свой собственный небольшой COM-интерфейс в .NET только с одним методом, который вызывает System::Diagnostics::Debugger::Launch.

ДругойСпособы использования Just-In-Time Debugging и Как: автоматически запускать отладчик .

Если вам не нужно отлаживать код запуска вашегоВ приложении вы можете делать то, что вы хотите, очень простым способом: в начале вашего приложения в основном потоке (или во всех потоках, которые вы хотите отлаживать) вы можете отобразить окно сообщения.После того, как вы увидите окно сообщения, вы можете запустить Visual Studio от имени администратора и использовать «Отладка» / «Присоединить к процессу ...».Это работает очень хорошо.Если вы хотите отладить службу Windows, вы должны использовать WTSSendMessage вместо MessageBox .Я использую этот способ уже много лет, и он отлично работает.

2 голосов
/ 22 января 2012
_asm int 3; // I need to enter this to satisfy StackOverflow minimal answer length requirement
...