gpt4 book ai didi

c++ - IActiveScript 分析 - 查看脚本源

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:52 25 4
gpt4 key购买 nike

我正在玩 IE 的 JavaScript Chakra 引擎。

我有downloaded example code from MSDN当我只有函数 ID 和脚本 ID 时,我正在尝试弄清楚如何获取函数源。

我开始分析我的 js 脚本,从分析器 (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;
}

最佳答案

我想我解决了它。这是我丑陋的 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;
}

关于c++ - IActiveScript 分析 - 查看脚本源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24428617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com