node.js - 更改TypeScript OutDir断点后,再也不会命中

标签 node.js debugging visual-studio-2013 typescript breakpoints

我使用的是visualstudioprofessional2013更新3,我创建了一个带有“hello world”日志指令的节点控制台应用程序。如果我在这个指令中设置了一个断点,然后运行调试器,它就可以正常工作。它到达断点,然后我可以按预期进行调试(只是为了确保.map文件已创建并正常工作)。
现在,我清理项目(删除app.js和app.js.map生成的文件)。我编辑.njsproj文件并添加:

<TypeScriptOutDir>lib</TypeScriptOutDir>

我再次打开项目,通过添加额外的“\lib”文件夹更新启动文件路径,然后开始调试。它运行代码,但未命中断点。
为什么不点击断点?由于在编译时没有创建.pdb文件,所以visual studio命中检测在typescript(node.js)项目中是如何工作的?我该如何修复它,以便调试与源文件不在同一文件夹中的编译代码?
任何建议、想法、反馈都将非常感谢。谢谢您。
注:
检查在“\lib”中生成的.js.map文件,我可以看到.ts文件引用有一个额外的“..\”所以引用是正确的。无论如何,问题似乎是检测.js文件中的命中,而不是将.js映射到.ts行。
更新:
复制步骤:
创建一个新项目“blank node.js控制台应用程序”。
卸载项目。
编辑.njsproj xml并添加此行:<TypeScriptOutDir>lib</TypeScriptOutDir>
重新加载项目。
通过将“\lib”添加到路径来更新项目中的启动文件。
打开“app.ts”文件。
在代码“1”的唯一行中设置断点。console.log('hello world')”
开始调试。
结果:app.js在“\lib”文件夹中生成,vs使用node运行文件,它打印“hello world”并完成。未命中断点。
在.ts文件上设置断点是否始终假定生成的.js文件与.ts文件位于同一文件夹中?
我已经测试了如何将和设置为“lib”,但在.ts文件中没有找到breackpoint并被击中。
注:
如果我直接在“\lib\app.js”中生成的文件上设置断点,它会被命中,visual studio会开始调试,但我仍然需要它在.ts文件中设置断点。
更新2
使用调试工作项目(在.njsproj中没有typescriptoutdir行),我手动更改了.js.map文件,其中显示:
"sources":["app.ts"] to "sources":["app.ts"]

我已将其更改为app2.ts:
"sources":["app.ts"] to "sources":["app2.ts"]

app2.ts是一个不存在的文件。当我们现在运行项目时,断点不会被击中。
我也尝试过绝对路径:
"sources":["W:/VS2013/projects/NodejsConsoleAppHit/app.ts"]

它也可以工作,但是如果指向一个不存在的文件,它也不能工作:
"sources":["W:/VS2013/projects/NodejsConsoleAppHit/app2.ts"]

看起来app.js.map文件负责将我们在.ts文件中设置的断点映射到.js文件中的行。
那么,lib文件夹中生成的app.js.map文件有什么问题?
如果我们查看此文件,可以看到对上一文件夹中.ts文件的引用:
sources":["../app.ts"]

这应该没问题,因为从“/lib/app.js”到“app.ts”的路径是“../app.ts”。但是当我们运行项目时,结果是断点没有被击中。
为什么?我不知道,这是我需要弄清楚的。
我也尝试过手动修改相对和绝对之间的引用,但没有成功…
我已经创建了两个“node.js控制台应用程序”项目,并在“hello world”日志指令中设置了一个断点。
nodejsconsoleapphit是没有typescriptoutdir配置的。是在项目根文件夹中生成文件并命中断点的文件。
https://www.dropbox.com/s/mniuhm8mgnly3ff/NodejsConsoleAppHit.zip?dl=0
nodejsconsoleappnohit是具有typescriptoutdir配置的节点。是在lib文件夹中生成文件且不命中断点的文件。
https://www.dropbox.com/s/dyadwxupltcg6gc/NodejsConsoleAppNoHit.zip?dl=0

最佳答案

根据codeplex中node.js tools for visual studio中的此工作项:
https://nodejstools.codeplex.com/workitem/1428
这一问题已得到考虑和解决。我已经用“NTVS1.0RC VS2013”测试过了,看起来运行良好。
您可以从NTVS下载页面选择“NTVS 1.0 RC VS 2013”:
https://nodejstools.codeplex.com/releases/view/149714
或者直接到这里:
https://nodejstools.codeplex.com/downloads/get/946895
我不得不说,我们同时使用了node inspector(https://github.com/node-inspector/node-inspector)进行调试,它是一个运行良好并解决了所有问题的工具。
个人仍然觉得vs集成对我们来说更方便。这是一个品味的问题,因为在这次更新node.js工具之后,这两个工具似乎都工作得很好。

关于node.js - 更改TypeScript OutDir断点后,再也不会命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26164425/

相关文章:

javascript - 使用 mongo/mongoose 快速表达的全局变量

node.js - LocalStrategy 函数从未被调用

php - 500内部服务器错误,如何调试

asp.net - VS 到 Azure 发布失败 : Socket Error 10054

asp.net - COMPILATION debug=false 正在杀死我的 ASP.NET 站点

cordova - Cordova CTP3 工具在构建时连接 etimedout

不使用 Jade 的 Node.js + Express

node.js - 从字符串中获取哈希值,例如 hashids

node.js - VSCode - Launch.json 指定参数

swift - Testflight iCloud/UI 功能损坏