【问题标题】:IActiveScript profiling - view script sourceIActiveScript 分析 - 查看脚本源
【发布时间】:2014-06-26 10:55:34
【问题描述】:

我正在玩 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;
}

【问题讨论】:

  • 你有一个非空的 pIDebugDocumentContext 吗?
  • 有时是,有时不是。但似乎它仅在初始化期间为 NULL,所以也许我可以使用它。我现在正在尝试,但仍然必须更好地检查 EnumCodeContexts 方法。似乎以某种方式我可以在那里找到函数源。任何帮助表示赞赏:)

标签: c++ internet-explorer com iactivescript


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2016-12-08
    相关资源
    最近更新 更多