Windows 7 x64 系统, node.js v0.12.2,Visual Studio 2013 Community

npm/cnpm 安装皆报错,貌似是由于工作文件是2010格式的,尝试配置 node-gyp 使用2013 版本,失败!

最后没办法,把 node-heapdump 下载到本地手动进行安装。有些包可能依赖 windows SDK,这里是下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=8279

1
2
3
git clone https://github.com/bnoordhuis/node-heapdump
cd node-heapdump
node-gyp configure build

克隆到本地,进入,执行build,接着报错!build 是会自动生成对应平台的工程文件再调用相关的生成工具进行 build 。关键就是使用 msbuild 的时候会出错。

接下来就是用 vs2013 打开 build 下面的 sln 文件,会提示升级,升完级编译一下就OK了。

编译过程中可能会提示找不到 node.lib,这是由于引用路径错误引起的,可以右击项目 properties -> Linker -> Input,把 Additional Dependencies 中的

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\Users\Administrator\.node-gyp.12.2$(Configuration)node.lib"

改成

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;DelayImp.lib;"C:\Users\Administrator\.node-gyp.12.2$(Platform)node.lib"

完成后打开命令行进入到 node-heapdump 目录,执行:

npm install . -g

把它安装到全局是因为一般情况下不需要引用到这个包,偶尔调试的时候才需要 require ,放在全局即可。键入以下命令查看 npm 全局包的存放位置:

npm config list

回显的 prefix 就是全局包的目录

为了能在有需要的地方可以 require 到全局包,我们还需要为系统添加一个 NODE_PATH 环境变量,以便在任何地方都可以加载这个包。

计算机=》属性=》高级系统设置=》环境变量=》新建=》NODE_PATH

把上面查到的包位置放入这个变量,现在在任意位置都可以 require(‘heapdump’)。

heapdump用来检测内存泄露的,一般需要观察到内存增长才进行 dump 操作。建议的做法是在目标脚本上开一个 repl socket 服务端口,在我们需要时候就 telnet 到这个商品,执行 heapdump。

// telnet 调试
require('net').createServer(function(socket) {
  require('repl').start('myapp>', socket);
}).listen(3001, 'localhost');

windows 7 自带的 telnet 是坨大便,建议使用 cygwin 的 telnet 程序,需要安装 inetutils 才有。

$ telnet localhost 3001
myapp> require('heapdump').writeSnapshot()

完成后按 Ctrl + ] 结束会话。

使用 Chrome F12 打开 developer toolbar 在 profiles 点击 load 就可以加载查看内存快照。