javascript - 为什么 `(console.error = console.trace)();` 在 Node.js 中会变成 `heap out of memory`?

标签 javascript node.js

我使用的是 Node.js v5.8.0。

我想让 console.error 作为 console.trace 工作,所以我使用了 console.error = console.trace;。但是当我调用 console.error 时,发生了致命的内存错误:

<--- Last few GCs --->

   29296 ms: Mark-sweep 1328.1 (1403.1) -> 1328.1 (1404.1) MB, 32.8 / 0.0 ms [allocation failure] [GC in old space requested].
   29314 ms: Mark-sweep 1328.1 (1404.1) -> 1328.1 (1404.1) MB, 17.8 / 0.0 ms [allocation failure] [GC in old space requested].
   29333 ms: Mark-sweep 1328.1 (1404.1) -> 1338.8 (1403.1) MB, 19.7 / 0.0 ms [last resort gc].
   29353 ms: Mark-sweep 1338.8 (1403.1) -> 1349.7 (1403.1) MB, 19.3 / 0.0 ms [last resort gc].


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 00000318EFDCFB61 <JS Object>
    1: DoJoin(aka DoJoin) [native array.js:~129] [pc=00000130FFFB1B73] (this=00000318EFD04381 <undefined>,w=000001FBBADF90E1 <JS Array[17]>,x=17,N=00000318EFD043C1 <true>,J=000003D7BECEC771 <String[1]\: \n>,I=00000318EFDB46F1 <JS Function ConvertToString (SharedFunctionInfo 00000318EFD52DC9)>)
    2: Join(aka Join) [native array.js:180] [pc=00000130FFF08772] (this=00000318EFD04381 <undefined>...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

这是什么原因呢? console.trace 是否在内部调用 console.error

最佳答案

在 NodeJS 中,console.errorconsole.warn 用于打印到标准错误输出。 console.trace 在内部使用 console.error 打印到标准错误输出,因为 console.trace 通常用于错误。

这里是 console.trace 调用 console.error 的行的链接: https://github.com/nodejs/node/blob/1c84579031e34326742c9c264f54625c5918197c/lib/console.js#L89

您可以尝试以下代码:

console.trace = function trace() {
  var err = new Error();
  err.name = 'Trace';
  err.message = util.format.apply(null, arguments);
  Error.captureStackTrace(err, trace);
  this.oldWarn(err.stack);
};

console.oldWarn = console.warn;
console.error = console.warn = console.trace;

关于javascript - 为什么 `(console.error = console.trace)();` 在 Node.js 中会变成 `heap out of memory`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39676001/

相关文章:

javascript - 如何在 Angular js中的 $on ("fileSelected")之后在页面上显示图像

javascript - Jquery datepicker CSS 在 IE11 中不工作

javascript - 如何使用 javascript 或 jQuery 根据相同的特定 css 属性对元素进行分组?

javascript - 如何防止在React Modal之外点击?

node.js - 如何在 Node.js/Express.js 中将中间件放入它自己的文件中

javascript - 公理 : How exactly to preserve session after successful authorization and send with subsequent request - while testing without browser

node.js - 如何在 Sequelize Postgres 中更新数组

javascript - 调试 Javascript : Find out how a particular function was called

javascript - jquery 在没有交互发生时隐藏元素

node.js - Node 应用程序未在我的 PC 上运行,但在我团队的其他 PC 上运行良好(使用 Git)