首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

针对 IBM SDK for Node.js 的核心转储调试

针对 IBM SDK for Node.js 的核心转储调试

在 Node.js 的开发中,核心转储分析可以帮助调试程序崩溃和内存泄漏。 通过  (IDDE),为 Node.js 应用程序提供了一种新的核心转储分析和调试方法。IDDE 是一个 Eclipse                插件,可通过免费许可获得,它支持来自 IBM SDK for Node.js 发布到的所有平台的核心转储文件,但 Mac OS X                除外。而且这些转储是可移植的;您可以获取一个计算机的核心转储文件并在另一个计算机上的 IDDE 中打开它,甚至是在运行不同的(受支持)OS                的计算机上也可以打开它。
可以从  或使用  安装 IDDE。请继续阅读,了解在开发 Node.js 应用程序的过程中,如何使用 IDDE                调试程序崩溃和内存泄漏。
生成核心转储文件生成核心转储文件的方法在不同系统中有所不同。Joyent(Node.js 的企业管理人)推荐使用                --abort-on-uncaught-exception 标记运行所有生产级 Node.js 系统。在 UNIX                系统上,还需要设置 ulimit -c unlimited 来支持生成没有大小限制的核心文件。
扩展 IDDE 支持IDDE 支持探索和调试 IBM Java 核心转储已有多年。随着 2013 年 IBM SDK for Node.js 的发布,支持在                    IDDE 1.2 版中添加 Node.js。IDDE 1.2.2 还添加了对 IBM SDK for Node.js 1.2.x 版(等效于                    Node 0.12.x)的支持。

如果没有抛出异常,则需要使用系统工具(比如 LInux 上的 gcore 或 AIX 上的                gencore)来生成核心文件,或者使用 kill -11 结束进程。在 Windows 7                和更高版本上,可以使用任务管理器来生成核心转储文件:按下 Ctrl+Alt+Delete 并选择                    Start Task Manager。从 Processes 选项卡中,右键单击 Node.js                进程并选择 Create Dump File。还可以使用用于 Windows 的免费的  实用程序。
调试崩溃为了生成程序崩溃,我们将使用 Test.js 脚本。这个简单脚本循环 5 次,然后抛出一个错误。
清单 1. Test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function main() {
  var inputObject = {
    input: ["one", "two", "three", "fifteen", "one hundred"],
    counter:0,
  };

  for(; inputObject.counter< inputObject.input.length; inputObject.counter++) {
    if (inputObject.input[inputObject.counter].length > 8) {
      throw "Input String Too Big";
    }
  }
}

main();




可在 Linux 上像这样运行 test.js:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cd node-v0.12.4-linux-x64/bin/
$ ulimit -c unlimited
$ ./node --abort-on-uncaught-exception ../../test.js
Uncaught Input String Too Big

FROM
main (/home/sian/test.js:11:7)
Object.<anonymous> (/home/sian/test.js:16:1)
Module._compile (module.js:460:26)
Object.Module._extensions..js (module.js:478:10)
Module.load (module.js:355:32)
Function.Module._load (module.js:310:12)
Function.Module.runMain (module.js:501:10)
startup (node.js:129:16)
node.js:814:3
Illegal instruction (core dumped)




在 IDDE 中打开一个核心转储文件如果 IDDE 已安装,并在核心转储文件所在的相同计算机上运行,您可以直接从磁盘位置打开核心转储文件。右键单击 PD Navigator                View(PD 表示问题判定)并选择 New PD Artifact
图 1. 选择 New PD Artifact浏览到您的核心转储文件的位置并单击 Finish
要在另一个计算机上打开该转储文件,可以使用常用工具复制该转储文件,然后采用我们刚才介绍的方法在第二个系统上的 IDDE                中打开它。要在将转储文件复制到不同的位置或不同的计算机时实现更好的原生堆栈轨迹,还可以将 Node                可执行程序复制到同一个目录来启用要解析的符号。
您现在需要使用 IDDE 编辑器。从您的新核心文件下选择 Start Investigation                来打开该编辑器。
图 2. 打开 IDDE 编辑器。大型转储文件可能需要更多的时间来完成加载。
IDDE 命令它有助于将 IDDE 编辑器视为编辑器与控制台的一种混合体。您可以像使用控制台一样在 IDDE                编辑器中输入并运行命令,但您的进度保存在编辑器中。
要运行命令,必须在命令的前面添加 ! 并按下 Ctrl+Enter。例如,输入                !help 并按下 Ctrl+Enter                会输出帮助消息,其中列出了处理转储的其他可用命令。Node 命令集与 Java 集不同,甚至对于不同的 Node 版本(或                Java)可能也会有所不同,因为新的 IDDE 版本中不断添加新的命令。
与其他 Eclipse 编辑器一样,Ctrl+Space 会显示完成建议,这在 IDDE                编辑器中就是命令列表。
图 3. 使用 Ctrl+Space 打开的命令列表一个首先使用的不错命令是 nodeoverview,它提供了您运行的 Node 版本、依赖关系等的基本摘要。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
!nodeoverview {

Node Property           Value                                                        
----------------------  -------------------------------------------------------------
Node version            0.12.4                                                      
Path to executable      /home/sian/node-v0.12.4-linux-x64/bin/node                  
Architecture            x64                                                         
Platform                linux                                                        
Command Line Arguments  /home/sian/node-v0.12.4-linux-x64/bin/node /home/sian/test.js
Execution Arguments     --abort-on-uncaught-exception                                
Process ID              5643                                                        

Dependency   Version   
-----------  ----------
http_parser  2.3      
node         0.12.4   
v8           3.28.71.19          2.2   

[...]

返回列表