Как неинвазивно подключиться к уже запущенному процессу

У меня есть процесс, приостановленный в точке останова под отладчиком Visual Studio. Я могу подключить столько же cdb (консольный отладчик Microsoft) в неинвазивном режиме, сколько

cdb -p pid -pvr

Как добиться того же, используя мою собственную программу, которая использует API Debug Engine.

 IDebugClient* debugClient = 0;
(DebugCreate( __uuidof(IDebugClient), (void **)&debugClient );
 debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE
                |DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND);

Этот код вызывает ошибку E_INVALIDARG. Эта комбинация недопустима? Тот, что ниже, работает, но когда он вызывает GetStackTrace, он возвращает E_UNEXPECTED.

debugClient->AttachProcess(0,id,DEBUG_ATTACH_NONINVASIVE);
debugControl->GetStackTrace(0, 0, 0, pStackFrames, maxFrames, &framesFilled);

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

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

Спасибо


person abir    schedule 04.06.2009    source источник


Ответы (1)


person    schedule
comment
Я заставил его работать, как вы предложили. Комбинация DEBUG_ATTACH_NONINVASIVE|DEBUG_ATTACH_NONINVASIVE_NO_SUSPEND не работает, когда процесс уже приостановлен другим отладчиком, но DEBUG_ATTACH_NONINVASIVE работает. И проблема с получением стека вызовов была связана с вызовом WaitForEvent. ExtRemoteTyped вместе со многими другими классами из engextcpp.hpp на удивление хороши и решают большую часть проблемы. - person abir; 06.06.2009