相关疑难解决方法(0)

为什么在JavaScript中不推荐使用arguments.callee.caller属性?

为什么arguments.callee.caller在JavaScript中弃用了该属性?

它已添加,然后在JavaScript中弃用,但ECMAScript完全省略了它.某些浏览器(Mozilla,IE)一直支持它,并且在地图上没有任何计划来删除支持.其他人(Safari,Opera)已经采用了它的支持,但对旧浏览器的支持是不可靠的.

是否有充分理由将这些有价值的功能置于不确定状态?

(或者,有没有更好的方法来获取调用函数的句柄?)

javascript ecma262

212
推荐指数
3
解决办法
7万
查看次数

Javascript异常堆栈跟踪

在Firefox中,我可以通过使用获得异常的堆栈跟踪exception.stack.

有没有办法在其他浏览器中获得它?

编辑:我实际上想要自动保存堆栈跟踪(如果可能),而不是当时调试它(即我知道如何在调试器中获取堆栈跟踪).

javascript exception

85
推荐指数
3
解决办法
7万
查看次数

如何在JavaScript中记录异常

作为C#开发人员,我习惯了以下异常处理方式:

try
{
    throw SomeException("hahahaha!");
}
catch (Exception ex)
{
    Log(ex.ToString());
}

Output
------

SomeNamespace.SomeException: hahahaha!
    at ConsoleApplication1.Main() in ConsoleApplication1\Program.cs:line 27
Run Code Online (Sandbox Code Playgroud)

它非常简单,但却告诉我关于异常是什么以及它在哪里需要知道的一切.

如何在JavaScript中实现等效的东西,异常对象本身可能只是一个字符串.我真的希望能够知道发生异常的确切代码行,但是下面的代码并没有记录任何有用的东西:

try
{
    var WshShell = new ActiveXObject("WScript.Shell");
    return WshShell.RegRead("HKEY_LOCAL_MACHINE\\Some\\Invalid\\Location");
}
catch (ex)
{
    Log("Caught exception: " + ex);
}

Output
------

Caught exception: [object Error]
Run Code Online (Sandbox Code Playgroud)

编辑(再次):只是为了澄清,这是内部应用程序,大量使用JavaScript.我正在寻找一种从生成系统中可能捕获的JavaScript错误中提取有用信息的方法 - 我已经有了一种日志记录机制,只是希望获得一个合理的字符串来记录.

javascript exception-handling

26
推荐指数
3
解决办法
4万
查看次数

页面刷新前的断点?

我正在调试一些第三方缩小的Javascript,某个地方正在触发浏览器页面刷新.但是,我无法弄清楚代码的哪一部分导致刷新.

有没有办法在Chrome中设置一个断点,它会在页面刷新之前被点击,这样我就可以检查调用堆栈以查看导致它的原因了什么?

javascript debugging google-chrome breakpoints

16
推荐指数
3
解决办法
7128
查看次数

自定义控制台日志功能,一个console.log包装器

function log( msgOrObj ){
    if(dev_mode){
        console.log({
            'message': msgOrObj,
            'caller': arguments.callee.caller.toString()
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,我试图编写一个简单的自定义控制台日志功能(如上所述).但是我很难找到调用者来自哪个文件和行.我能看到的最多就是调用它的函数.

有没有人做过类似的事情?或者这甚至可能吗?

第70行的somescript.js中使用的示例:

log('some very important message!')
Run Code Online (Sandbox Code Playgroud)

javascript debug-backtrace

15
推荐指数
2
解决办法
9540
查看次数

在JavaScript中获取当前堆栈跟踪

如何从JavaScript打印堆栈跟踪?

答案如何在抛出异常时获取Javascript堆栈跟踪?处理抛出异常,但我需要打印堆栈跟踪来调试内存泄漏.

基本上我有一个相同的问题,如在Java中获取当前堆栈跟踪,但对于JavaScript.

以及如何在Node.js中打印堆栈跟踪?是类似的,但它是Node.js,我想知道JavaScript,更一般地说,如果它是不同的.

javascript node.js

14
推荐指数
3
解决办法
7533
查看次数

有没有办法在不放置断点的情况下记录JavaScript堆栈跟踪?

我希望能够对给定的JS应用程序执行操作,然后只需获取已调用的所有函数的大型日志.这在Chrome中是可行的,但只有在某处放置断点时才有可能.我的问题是,当我对一个给定的网站进行逆向工程时(当然,仅用于自学教学目的),通常需要花费大量时间来确定从哪里开始.这样的事情会对我有很大的帮助,因为我不再需要在代码中搜索,而是我会做一个用户操作,然后抓住堆栈日志.

我想应该有一种方法来拦截(或包装)每个函数调用,以便在调用函数之前将其转储到日志中.

javascript debugging stack-trace

8
推荐指数
1
解决办法
2120
查看次数

是否有可能获得匿名JavaScript函数的名称?

是否有可能获得声明如下的匿名函数的名称?

var F = function(){};
Run Code Online (Sandbox Code Playgroud)

乍一看,答案是否定的,但显然浏览器知道并保留了函数名称:

var F = function(){};
var x = new F();
console.log(x.constructor);   // function F()
Run Code Online (Sandbox Code Playgroud)

(火狐)

var F = function(){};
var x = new F();
console.log(x);    // F {}
Run Code Online (Sandbox Code Playgroud)

(铬)

这个名字是否可以访问?我需要它主要用于错误记录,因此解决方案不必是跨浏览器.

编辑以澄清:

我从外部代码中获取了一个我需要知道其类型的对象,因此使用其他声明方式的明显答案不是我正在搜索的内容.

javascript logging function

7
推荐指数
1
解决办法
143
查看次数

获取由另一个函数调用的所有函数的列表

在JavaScript中,是否可以获取由另一个函数调用的所有函数的列表?我想创建一个函数依赖树,分析脚本中的函数如何相互关联(以及哪些函数需要哪些函数).

例如:

getAllCalledFunctions(funcA); //this should return [funcB, funcC, funcD], since these are the functions that are required by funcA.

function getAllCalledFunctions(functionName){
    //how should I implement this?
}

function funcA(){
    funcB();
    funcC();
}

function funcB(){
    funcD();
}

function funcC(){
    funcD();
}

function funcD(){
    console.log("This function is called by funcC and funcD");
}
Run Code Online (Sandbox Code Playgroud)

javascript dependency-graph

6
推荐指数
1
解决办法
2729
查看次数

React(JS) 如何获取当前模块导入的文件的文件名?

我正在编写一个反应库(react-xarrows.tsx),当用户向我的组件提供错误的属性时,会抛出错误(我写的),但它显示了我在“react-arrows.tsx”中编写的行。

出错时用户将看到:

/src/Xarrow.tsx:184:12
    if (!("current" in props.start))
      throw Error(
        `'start' property is not of type reference.
        maybe you set 'start' to other object and not to React reference?.\n`
      );
Run Code Online (Sandbox Code Playgroud)

我想准确地向用户指出他出错的地方 - 我可以通过向 Error 提供“文件名”来做到这一点 - Error([message[, fileName[, lineNumber]]]) - 导入文件的文件名当前模块,使用我的库的用户文件 - 让我们将该文件称为“/src/Example5.tsx”。(关于“名称”我当然是指相对路径)

现在,我需要弄清楚如何获取该文件名(以及稍后的行号)。

(我确实尝试从“moudle.parents”对象中获取它作为其他类似问题的答案,但没有任何模块对象的父属性。 是最接近帮助我的。)

必须有一种方法可以做到这一点,因为反应本身会向用户指出他出错的地方。我现在在Example5 中留下了一个错误示例只需单击Example5)。您可以自由地使用它,如果您想出解决方案,请分享。

简化示例5:

/src/Xarrow.tsx:184:12
    if (!("current" in props.start))
      throw Error(
        `'start' property is not of type reference.
        maybe you set 'start' to other object and not to React reference?.\n`
      );
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

6
推荐指数
0
解决办法
3258
查看次数