Профилирование IActiveScript — просмотр исходного кода скрипта

Я играю с движком IE чакры JavaScript.

я имею скачал пример кода из MSDN и я пытаюсь выяснить, как получить источник функции, когда у меня есть только идентификатор функции и идентификатор сценария.

Я начинаю профилирование моего скрипта js и из профилировщика (IActiveScriptProfilerCallback2) вывод я могу видеть, какие функции скомпилированы, называется …

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

HRESULT Profiler::FunctionCompiled(PROFILER_TOKEN functionId, PROFILER_TOKEN scriptId, const wchar_t *pwszFunctionName, const wchar_t *pwszFunctionNameHint, IUnknown *pIDebugDocumentContext)
{
fwprintf(stdout, L"Profiler::FunctionCompiled: 0x%lx, 0x%lx, %s, %s\n", scriptId, functionId, pwszFunctionName, pwszFunctionNameHint);
return S_OK;
}

2

Решение

Я думаю, что я решил это .. Вот моя уродливая функция ScriptCompiled.

HRESULT Profiler::ScriptCompiled(PROFILER_TOKEN scriptId, PROFILER_SCRIPT_TYPE type, IUnknown *pIDebugDocumentContext)
{
fwprintf(stdout, L"Profiler::ScriptCompiled: 0x%lx, %u\n", scriptId, type);

if (pIDebugDocumentContext) {
IDebugDocumentContext *debugDocumentContext = NULL;
pIDebugDocumentContext->QueryInterface(__uuidof(IDebugDocumentContext), (void**)&debugDocumentContext);

IDebugDocument *debugDocument = NULL;
debugDocumentContext->GetDocument(&debugDocument);

IDebugDocumentText *debugDocumentText = NULL;
debugDocument->QueryInterface(__uuidof(IDebugDocumentText), (void**)&debugDocumentText);

ULONG lines, chars;
debugDocumentText->GetSize(&lines, &chars);

printf("Lines: %d Chars: %d\n", lines, chars);

chars++;
WCHAR *text = (WCHAR*)malloc(sizeof(WCHAR) * chars);
ULONG charsRetrieved = 0;
debugDocumentText->GetText(0, text, NULL, &charsRetrieved, chars);
text[charsRetrieved] = L'\0';

wprintf(L"%s\n", text);
}

return S_OK;
}
2

Другие решения


По вопросам рекламы [email protected]