调试:获取函数内部绑定变量的内容

Debugging: Get content of variables bound inside functions

本文关键字:变量 绑定 内部 获取 函数 调试      更新时间:2023-09-26

我在函数内部定义了一些函数,但设置为全局:

function someFn(someVar) {
    var arr = makeArray(someVar);
    // global function:
    foo = function(bar) {
        return arr.indexOf(bar)==-1;
    }
}

当我调试chrome控制台:

> foo
function (bar){return arr.indexOf(bar)==-1;}

我可以在不改变源代码的情况下获得arr的内容吗?

让我们假设我不能获取并执行生成arr的命令,因为我不知道someVar的最后值。

变量必须在内存中的某个地方,因为当我调用函数时,它可以被访问,但是它的名称是什么?我已经试过了:

>  foo.arr
undefined

X-Y问题响应;我不知道如何从控制台中访问arr,但是我可以给您一些通过断点进行调试的技巧,即使代码被最小化。

尝试使用谷歌浏览器,并在调试器中,单击代码窗口下方的{}图标。这将使脚本打印得很漂亮,尽管变量名仍然会被最小化。(_a1 = new _43 '等)

接下来是阅读精简代码的艺术;代码缩小器不能改变任何通过字符串访问的东西;其中签名最多的是对象属性(.之后的任何东西)。如果没有空格,查找特定的符号序列也会变得更容易。您可以尝试按ctrl键查找.indexOf==-1等术语。如果这是一个实际的公司发布的库,那么您可以超越您的小示例,并参考myCompanyLibrary.dockInstance.locator=之类的东西。

找到该行后,可以在那里设置一个断点。好运!