Имеется своя длл, которая является аддином к большому стороннему приложению (native, managed).
Очень захотелось сделать аттач дебаггера студии одной строчкой в нужном месте в коде.
Т.е. при достижении желаемой точки выполнения появляется JIT окошко подключения отладчика.
1. DebugBreak().
Эта техника не срабатывает, приложение крашится со своим диалогом error report. Видимо, из-за того, что оно перехватывает это исключение и не отдает его винде. Как это обойти не знаю.
2. Потом нашел DebugActiveProcess().
Оно (есссно тоже не заработало. GetLastError выдает Access denied. Выставление привелегии SE_DEBUG_NAME почему-то не помогает, хотя везде написано именно про такой фикс.
RTT>Имеется своя длл, которая является аддином к большому стороннему приложению (native, managed). RTT>Очень захотелось сделать аттач дебаггера студии одной строчкой в нужном месте в коде. RTT>Т.е. при достижении желаемой точки выполнения появляется JIT окошко подключения отладчика.
RTT>1. DebugBreak(). RTT>Эта техника не срабатывает, приложение крашится со своим диалогом error report. Видимо, из-за того, что оно перехватывает это исключение и не отдает его винде. Как это обойти не знаю.
А пропатчить приложение чтоб оно не вызывало SetUnhandledExceptionFilter не пробовал? Или самому из Dll на старте (по process attach) дернуть SetUnhandledExceptionFilter(NULL).
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>2. Потом нашел DebugActiveProcess(). RTT>Оно (есссно тоже не заработало. GetLastError выдает Access denied. Выставление привелегии SE_DEBUG_NAME почему-то не помогает, хотя везде написано именно про такой фикс.
А потому что процесс не может отлажывать сам себя.
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>Имеется своя длл, которая является аддином к большому стороннему приложению (native, managed). RTT>Очень захотелось сделать аттач дебаггера студии одной строчкой в нужном месте в коде.
Во многих отладчиках (в т.ч. и в студии) есть опция JIT Debugging, что по сути запуск отладчика с PID'ом процесса в командной строке.
Точно так же можно запустить отладчик вручную, передав ему свой PID — можно покопать в эту сторону.
Здравствуйте, RikkiTikkiTavi, Вы писали:
RTT>1. DebugBreak(). RTT>Эта техника не срабатывает, приложение крашится со своим диалогом error report. Видимо, из-за того, что оно перехватывает это исключение и не отдает его винде. Как это обойти не знаю.
Вместо "DebugBreak()" пишите "MessageBox(bla,bla...)", пока созерцаете месаджбокc — подключаете отладчик "Debug\Attach to process.."
RTT>1. DebugBreak(). RTT>Эта техника не срабатывает, приложение крашится со своим диалогом error report. Видимо, из-за того, что оно перехватывает это исключение и не отдает его винде. Как это обойти не знаю.
А почему не приаттачить сразу отладчик к процессу, после запуска? А когда процесс дойдет до этой точки, дернется дебаггер.
AS>А почему не приаттачить сразу отладчик к процессу, после запуска? А когда процесс дойдет до этой точки, дернется дебаггер.
Не шибко удобно, когда делаешь это по сотне раз на дню. Особенно, когда забываешь заатачиться...
Это рутина, и её хочется автоматизировать
ХГД>А пропатчить приложение чтоб оно не вызывало SetUnhandledExceptionFilter не пробовал? Или самому из Dll на старте (по process attach) дернуть SetUnhandledExceptionFilter(NULL).