我正在玩IE的JavaScript Chakra引擎。
我有downloaded example code from MSDN,当我只有函数ID和脚本ID时,我想弄清楚如何获取函数源。
我开始分析我的js脚本和profiler(IActiveScriptProfilerCallback2
)输出我可以看到编译了哪些函数,称为...
例如,FunctionCompiled
的回调如下所示。我得到函数id和脚本id,甚至是函数名,但我无法弄清楚如何找到函数源代码。
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;
}
答案 0 :(得分: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;
}