【问题标题】:Is there a way to trick/redirect Chrome's stacktrace when calling console.log?调用console.log时有没有办法欺骗/重定向Chrome的堆栈跟踪?
【发布时间】:2015-03-21 22:45:17
【问题描述】:

我发现这个问题与我正在寻找的“接近”:

How to get result of console.trace() as string in javascript with chrome or firefox?

但是,有没有办法实际替换日志条目来自哪个 JS 文件(和行号)?

我通过另一种方法汇集所有调试跟踪,所以无论我记录/跟踪什么,它总是显示为相同的file:line#(一旦点击,就无法遍历堆栈/代码,如您可以在实时调试会话期间进行)。

我可以尝试在给定对象之后立即记录堆栈Error.captureStackTrace(obj, trace);(因为在同一跟踪中连接它们会将它们视为字符串,而不是可点击的日志条目),但我希望有一种方法劫持 Chrome 的控制台 :)

【问题讨论】:

  • 对于生产级别,我有不同的方法。而不是试图只隐藏部分跟踪。我劫持了控制台,因此任何正在生产中且具有console.logtracewarndir 等的东西都将存储在一个对象中,而无需实际调用console.log。因此,通过这种方式,每个错误都存储在一个对象中,该对象可以被清空,也可以发送到我们的服务器。我们这样做也是因为我们大多数开发人员都患有图雷特综合症,而且大多数日志对业务/用户/老板不友好。
  • 据我所知,没有其他方法可以劫持控制台堆栈跟踪,以便文件或行号不同。即使你设法做到这一点,那又有什么意义呢?首先,有经验的用户(程序员)将能够看到您已经劫持了控制台,并且他可以使用小书签在早期阶段劫持控制台。其次,您将永远无法劫持核心错误(即 net::ERR_BLOCKED_BY_CLIENT )。我们试图捕捉网络错误,这样即使我们正在处理它,老板也不会因为“看看有错误”而惊慌。

标签: javascript google-chrome debugging console.log


【解决方案1】:

这可能不是您想要的,但如果您想在服务器上捕获错误副本以用于报告/记录目的,您可以使用 Image().src 以静默方式将错误副本发送到服务器?

这是一个人用 Ext JS 做的,但 Image().src 位是纯 javascript(我认为!):

http://www.sencha.com/forum/showthread.php?295768-Basic-error-handling-for-Ext-JS-apps

【讨论】:

  • 我不认为这是他真正要问的。他在问是否有任何方法可以完全劫持控制台,以便普通用户无法跟踪日志调试或错误的堆栈。
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 2021-12-06
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2016-12-25
相关资源
最近更新 更多