Ton*_*ony 7 debugging node.js requirejs webstorm node-inspector
使用node-inspector,我无法在以下node.js代码中设置断点.(内容main.js)
(function() {
require('underscore');
var doSomething = function(callback) {
callback('doSomething Finished');
}
doSomething(function(x) {
console.log(x);
});
}).call(this);
Run Code Online (Sandbox Code Playgroud)
我可以轻松地在第2行,第4行或第8行设置断点,但无论我怎么努力,调试器都不会让我在第5行或第9行设置断点.要清楚,我正在使用以下命令来运行node-inspector
node --debug-brk main.js
node-inspector
Run Code Online (Sandbox Code Playgroud)
我也尝试在网络风暴中进行调试,但问题仍然存在.如果我删除该行require('underscore');,那么问题会立即消失,我可以再次在函数体内设置断点.如果我删除最外面的闭包函数,问题也会消失.似乎require文件级别关闭之间的交互正在搞乱节点调试功能.有没有人自己经历过这个问题和/或知道能够打破功能体内的任何变通方法?
编辑:我的节点js版本
Tony:~ $ node --version
v0.10.12
Tony:~ $
Run Code Online (Sandbox Code Playgroud)
Tim*_*Tim 11
我使用相同的设置完全陷入了同样的问题.
我在目标函数的定义之后添加了一个断点(这是我实际上可以添加断点的唯一地方).当调试器到达该断点并且实际定义了该函数时,我能够将断点添加到实际的目标函数中......
这可能不是您想听到的答案,因为它没有解释为什么您不能设置任何断点,但我只是从闭包中删除您的 require 语句并将其放置在顶层。我会更进一步建议您根本不要使用像上面这样的闭包。
原因是 Node 使用自己的模块系统,并且与浏览器中的 Javascript 不同,将变量声明为顶级不会污染全局命名空间。这就是 require(...) 的用武之地。因此,通过将代码包装在立即调用的函数中,您不会获得任何好处(当然,除非您希望您的模块能够同时运行客户端和服务器端)。
我猜想您无法设置任何断点的原因是 V8 运行时识别出不必要的闭包,然后为您优化代码。重写的代码可能没有正确的源映射,因此无法设置断点。
所以,有两个建议:
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |