Как активировать диспетчер отладки процесса VS2010 для JavaScript? - PullRequest
4 голосов
/ 31 января 2012

У меня есть серверное приложение (, а не веб-сайт, не на основе HTML или браузера), которое обеспечивает расширяемость в форме сценариев JavaScript.Теоретически я должен иметь возможность отлаживать их с помощью отладчика Visual Studio с помощью диспетчера отладки процесса.

У меня правильно установлен и активирован VS2010, но когда я вызываю CoCreateInstance, примерно так:

CoCreateInstance(CLSID_ProcessDebugManager, nil,
  CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IProcessDebugManager, _PDM);

возвращает $80070057 (E_INVALIDARG), что не является документированным поведением для CoCreateInstance. В документации, однако, описан альтернативный способ сделать то же самое, с CoGetClassObject.Когда я пытаюсь это сделать, он возвращает REGDB_E_CLASSNOTREG, что означает, что CLSID не зарегистрирован в реестре.

Итак, что мне нужно сделать, чтобы зарегистрировать отладчик сценариев VS2010 в реестре, чтобы я мог запустить Process Debug Manager

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Если вы получаете REGDB_E_CLASSNOTREG, вы, вероятно, смешиваете 32- и 64-битные вещи: возможно, вы пытаетесь вызвать CoCreateInstance из 64-битной программы, если у вас нет 64-битной версии VS2010 ( у них есть один?)

Я также нашел это , которое было экземпляром кого-то, передающего указатель на void, а не указатель на указатель на void. Вы не показали, что такое тип _PDM, поэтому я не могу сказать, правильно ли вы его объявили (хотя в этом случае вы должны были получить предупреждение компилятора.)

Отредактировано, чтобы добавить:

#pragma comment(lib, "ole32.lib")

#define UNICODE
#define STRICT
#include <windows.h>
#include <activdbg.h>

#include <iostream>
using std::wcout;
using std::hex;
using std::endl;

int main(void)
{
    HRESULT hr;

    IProcessDebugManager *ppdm = NULL;
    IDebugApplication *pda = NULL;
    IClassFactory *pcf = NULL;
    DWORD cook = 0;

    CoInitialize(NULL);

    hr = CoGetClassObject(CLSID_ProcessDebugManager, CLSCTX_INPROC_SERVER,
        NULL, IID_IClassFactory, (LPVOID *)&pcf);
    wcout << L"CoGetClassObject: " << std::hex << hr << endl;
    if (FAILED(hr)) goto done;

    hr = pcf->CreateInstance(0, IID_IProcessDebugManager32, (LPVOID *)&ppdm);
    wcout << L"CreateInstance: " << std::hex << hr << endl;
    if (FAILED(hr)) goto done;
    pcf->Release();

    hr = ppdm->CreateApplication(&pda);
    wcout << L"CreateApplication: " << std::hex << hr << endl;
    if (FAILED(hr)) goto done;

    ppdm->AddApplication(pda, &cook);
    pda->SetName(L"Moosh!");
    ppdm->RemoveApplication(cook);
    pda->Release();
    ppdm->Release();
done:
    CoUninitialize();
    return 0;
}

Никакой реальной проверки ошибок, ничего не делает, кроме тестирования одной базовой функции и т. Д., Но это не выдает никаких ошибок. Вы не предоставили никаких подробностей относительно того, что означает «не работает», и, как я думаю, я упомянул, я не знаю, как использовать этот материал, но я могу, по крайней мере, получить IProcesDebugManager и приложение IDebugApplication с этим кодом .

0 голосов
/ 03 февраля 2012

E_INVALIDARG обычно указывает на передачу неверного аргумента в функцию!Обычно не очень понятно, что пошло не так, я думаю, что это артефакт взаимодействия CLR и COM.

IProcessDebugManager выглядит как интерфейс CLR, см. http://msdn.microsoft.com/en-us/library/w1ktkdaz%28v=vs.94%29.aspx

Параметр 4 представляется интерфейсом CLR, а не REFIID, однако я не уверен, так как я не знаю, какой язык вы используете, так как я не распознаю использование 'nil';C # использует 'null', C ++ / CLI использует 'nullptr', а VB использует 'Nothing'.

IID - это GUID, которые представлены в виде строк, может ли ваш компилятор преобразовать тип CLR в строку и передатьтот?Мое предположение заключается в том, что COM хочет получить реальный GUID для REFIID и не может проанализировать то, что IProcessDebugManager.ToString () выплевывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...