Google Chrome 开发者工具中的自定义堆栈跟踪?

2024-03-24

我希望自定义 Google Chrome 开发人员工具“脚本”选项卡中 strack 跟踪面板中显示的项目。具体来说,我想过滤掉堆栈跟踪中的项目,并向堆栈跟踪中的某些项目添加更多描述性名称,而不必重命名我的对象和函数。

我在以下位置找到了 V8 的 Stack Trace API:http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi但重写 Error.prepareStackTrace 似乎没有任何效果。


该页面上的描述肯定有点难以理解,具体方法如下:

Error.prepareStackTrace = function(error, stack) {
    return stack;
};

var someObj = {
    someMethod : function () { 
        crash();
    }
}
function bar(barArg) { someObj.someMethod(); };
function foo(fooArg) { bar("barArgString"); };

function getTrace(e) {
    var stack = e.stack;
    var trace = "";

    for (var i = 0; i < stack.length; i++) {
        var frame = stack[i],
            func = frame.getFunction();

        trace += "\r" + frame.getThis() + "." + frame.getFunctionName();
    }
    return trace;
}

try {
    foo("fooArgString");
} catch (e) {
    alert("trace from catch(): " + getTrace(e));
}

这将显示:

trace from catch(): 
[object Object].someObj.someMethod
[object Window].bar
[object Window].foo
[object Window].

最后一帧是全局范围(没有函数名称)。

本质上,您对prepareStackTrace()的重写会导致error.stack成为您从prepareStackTrace()返回的任何内容。诀窍是,prepareStackTrace() 的第二个参数是 CallSite 对象的数组 - 支持 getThis()、getFunctionName() 等的对象。

上面的代码覆盖了prepareStackTrace(),以便它返回CallSite对象的数组(上面的“stack”参数),所以这意味着当你尝试..catch一个错误时,Error.stack将包含CallSite对象的数组而不是字符串形式的通常堆栈跟踪。另一种方法是在替换的prepareStackTrace() 函数中处理CallSite 对象,并将替代堆栈跟踪作为字符串返回。

请注意,CallSite 对象确实非常挑剔。尝试执行frame.toString(),或者只是尝试alert(frame)(隐式地涉及toString()),它会崩溃,并且Chrome的开发人员工具不会显示任何错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Chrome 开发者工具中的自定义堆栈跟踪? 的相关文章

随机推荐

  • wix 主要升级未安装所有文件

    我有一个非常简单的 WiX 项目 版本 3 7 它安装一些文件 NET 程序版本 6 0 0 0 我准备使用 WiX 中的 MajorUpgrade 功能发布新版本 6 0 1 0 我在 Product 元素中保持 UpgradeCode
  • 爪哇。实现侦听器的正确模式

    我经常遇到的情况是 给定的对象需要有许多侦听器 例如 我可能有 class Elephant public void addListener ElephantListener listener 但我会遇到很多这样的情况 也就是说 我也会有一
  • ClientScript.RegisterStartupScript()

    ClientScript RegisterStartupScript 和 ClientScript RegisterClientScriptBlock 有什么区别 ClientScript RegisterStartupScript 用于传
  • groovy 执行时参数包含空格

    如何向 groovy 中字符串的执行方法提供包含空格的参数 仅仅像在 shell 中那样添加空格并没有帮助 println ls tmp folder with spaces execute text 这会给 ls 调用带来三个错误的参数
  • 如何从这些输出中获取实际的函数名称

    我使用 boost 测试进行单元测试 使用 gcov 和 lcov 来测量覆盖范围 不幸的是 genhtml 生成类似函数覆盖率的报告 我现在想知道有什么功能 ZN7UtilLib11ProgressBarC2EjdRSo实际上是 到目前为
  • java.lang.SecurityException:需要 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限

    我正在开发一个 android 我想使用 NETWORK PROVIDER 获取用户位置 我没有使用 GPS 来实现此目的 我收到以下异常 java lang SecurityException 需要 ACCESS FINE LOCATIO
  • 从 void* 到 char** 的转换无效

    自从我搞乱 C 代码以来已经有一段时间了 在 Ubuntu 下使用 gcc 编译 C 代码时出现以下错误 我用来编译代码的命令是 如果这些错误是由于我使用的编译器造成的 请让我知道如何消除该错误 gcc o runnable mycode
  • C 中的 sizeof(array):分段错误 [重复]

    这个问题在这里已经有答案了 嗨 我从这段代码中得到了一个奇怪的分段错误 int main void int array1 10000000 int n sizeof array1 printf d n n return 0 但是如果我改变
  • 数据绑定编译器错误:“无法解析 SafeVarargs 的类型”

    我已经尝试让 Android 数据绑定正常工作两天了 编译器问题接二连三地出现 现在我完全碰壁了 我用谷歌搜索了这个 但没有找到任何东西 这是完整的日志 java lang RuntimeException failure see logs
  • Visual Studio 2015 调用堆栈显示

    最近在我的计算机上全新安装了 Windows 10 Pro 后 我注意到每当我中断程序并打开调用堆栈时 调用堆栈都会显示应用程序名称和行号 但函数名称显示为
  • 寻找 2 个以上整数的 GCD(最大公约数)?

    我已经有一个函数可以找到 2 个数字的 GCD function getGCDBetween a b while b 0 m a b a b b m return a 但现在 我想扩展这个函数来找到 N 点的 GCD 有什么建议吗 有一种更
  • 概述 div 和图像

    我正在开发我的作品集网站 但遇到了问题 一旦我想要多层 你必须看到才能理解这一点 它们的排列完全不同 我对图像使用了相同的像素大小 重要提示 我只能对图像和内容周围的 div 使用像素 因为我需要使用 media 来更改我手机的页面 所以我
  • 使用自定义 url_path 在 @list_route 上反向

    如果我有一个包含以下代码的视图集 class ExtraRouteViewset viewsets GenericViewSet list route methods get def somefunction self request re
  • 函数内相加后结果不正确

    我有一个 java 程序没有返回正确的答案 我不明白为什么 这是代码 public class hello public static void main String args int a 5 doubleNumbers a System
  • PLSQL 错误 - ORA-00984:此处不允许列

    我写了一个 PL SQL 块 DECLARE SchemaName VARCHAR2 50 REQ SUNIL 5750 userpassword VARCHAR2 50 XYZ stmt VARCHAR2 5000 BEGIN stmt
  • Perl 的哪个版本引入了 try/catch?

    我知道 Perl 最近得到了try catch 附带的 Perl 版本是什么 最被忽视的预实验 https perldoc perl org perlexperiment页面列出了添加的功能以及 有时 后来从实验类别中毕业的功能 您还可以查
  • 如何将两个 AngularJS 应用程序合并为一个主应用程序的模块?

    另一个基本的 AngularJS 问题 我有两个 AngularJS 应用程序 slider js 角度用户界面 json js Here s slider js作为一个笨蛋 http plnkr co edit zySArHvqZgJHH
  • SVN 并重命名其运行的服务器

    我运行 VisualSVN 作为我的 SVN 服务器并使用 TortoiseSVN 作为客户端 我刚刚将服务器从 mach1 重命名为 mach2 现在无法使用 SVN 因为它正在寻找以下位置的存储库http mach1 81 http m
  • 概率密度函数 numpy 直方图/scipy stats

    我们有数组a range 10 Using numpy histogram hist bins numpy histogram a bins np max a np min a 1 range np min a np max a densi
  • Google Chrome 开发者工具中的自定义堆栈跟踪?

    我希望自定义 Google Chrome 开发人员工具 脚本 选项卡中 strack 跟踪面板中显示的项目 具体来说 我想过滤掉堆栈跟踪中的项目 并向堆栈跟踪中的某些项目添加更多描述性名称 而不必重命名我的对象和函数 我在以下位置找到了 V