【问题标题】:Is there any way to fake the calling file in Firebug console?有没有办法在 Firebug 控制台中伪造调用文件?
【发布时间】:2011-04-26 21:43:47
【问题描述】:

注意:Firebug 是 Firebug 扩展和/或 Webkit 开发工具。

调用文件的伪装是指控制台输出右侧的链接,指向调用输出函数(如console.log)的位置。

当您有统一的错误消息处理程序等时,这会成为一个问题,因此所有 console.log 调用都来自同一个文件和行号。

有没有办法伪造这些信息?或者将这样的链接(指向行号)烘焙到 firebug 控制台日志中(如果有堆栈跟踪)?只需将文件名和行号添加到任何日志的末尾都会给控制台输出添加噪音,使其变得混乱。

【问题讨论】:

    标签: javascript firebug


    【解决方案1】:

    在萤火虫论坛上进行简短的搜索似乎暗示它(有时?)looks at the exception to determine what the line number is。

    所以你很可能通过明智的按摩来伪装它。

    【讨论】:

    • 嗯?我将如何继续这样做?是否不需要在代码文件中抛出异常,或者是否可以以某种方式将文件名和行号注入异常?
    • 如果你有统一的错误处理,你大概可以遍历它收到的任何错误的属性,看看 Firebug 可能在使用什么。
    【解决方案2】:

    使用 Firebug,可以选择在错误旁边显示调用堆栈。 单击控制台选项卡名称旁边的向下箭头以查看并激活它。 它会导致消息左侧显示一个“加号”图标,从而显示堆栈。 这可能会让您更接近导致错误的代码。

    如果您还需要使用 console.error() 记录错误以使用它。 (虽然不确定这与 chrome 的兼容性如何)

    【讨论】:

    • 这种方法的问题是您仍然看不到调用日志的行。另外,Chrome 没有堆栈跟踪支持(据我所知)。 ://
    【解决方案3】:

    大多数现代浏览器都定义了一个 console.log 函数。不如不编写自己的错误处理程序,而是在任何出现错误的地方调用 console.log。然后,对于没有定义 console.log 的浏览器,您可以使用任何您想要的方式自己定义它。例如,如果您想在 IE(或未安装 firebug 的 FF 等)中提醒错误,您可以使用以下代码:

    <html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <button onclick="throwError()">
            Throw Error</button>
    
        <script type="text/javascript">
            function throwError() {
                console.log("error here!");
            }
    
            if (!window.console) {
                window.console = {
                    log: function(e) {
                        alert(e);
                    }
                };
            }
    
            //Added in EDIT: in production add these lines below to overwrite browser's console.log function
            window.console.log = function(e) {
                alert("production alert: " + e); //or whatever custom error logging you want
            };
        </script>
    
    </body>
    </html>
    

    您可以将任何您想要的内容添加到控制台对象。我已经在 IE8 和 Firefox 中对此进行了测试,并且我相当有信心您可以使这个想法适用于您支持的任何浏览器集。

    编辑: 看起来您还可以覆盖 Firefox、Safari 和 Chrome 中的默认 console.log 函数。只需将控制台对象的日志成员重新映射到一个新函数,该函数可以在生产中执行任何操作。

    【讨论】:

    • 我有统一的调试消息处理程序的原因是因为它是框架的一个简单插件,我可以简单地将它从生产环境中删除,从而不会给用户带来错误。另外,它使我有可能在生产环境中将错误消息从客户端机器推送到服务器。
    • 这是有道理的。你在生产中覆盖console.log函数怎么样?查看我对代码和描述的修改。
    • 这个解决方案看起来很有趣,因为我可以简单地重载console.log/error,从而捕获所有调试消息。但是,我仍然丢失了调用 console.log 的实际代码位置。
    • 什么意思?如果你注释掉上面的生产线,运行的console.log是内置的Firebug版本,所以代码位置应该正常报告。除非您谈论在生产中获取代码位置。你是对的。但我不确定你是否有任何选择。
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 2015-10-05
    • 2019-05-09
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多