更改TypeScript后,OutDir断点永远不会被击中

时间:2014-10-02 15:40:44

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

我正在使用Visual Studio Professional 2013 Update 3,并使用“hello world”日志指令创建了一个节点控制台应用程序。如果我在此指令中设置断点然后运行调试器,则它可以正常工作。它命中断点,然后我可以按预期调试(只是为了明确我的.map文件已创建并正常工作)。

现在,我清理项目(删除app.js和app.js.map生成的文件)。我编辑.njsproj文件,然后添加:

<TypeScriptOutDir>lib</TypeScriptOutDir>

我再次打开项目,通过添加额外的“\ lib”文件夹来更新启动文件路径,然后我开始调试。它运行代码,但它没有达到断点。

为什么不打破断点? Visual Studio命中检测如何适用于typescript(node.js)项目,因为在编译时没有创建.pdb文件?我如何解决这个问题,以便我可以调试一个与我的源文件不在同一文件夹中的编译代码?

任何建议,想法,反馈都将非常感激。谢谢。

注意:

检查在“\ lib”中生成的.js.map文件我可以看到.ts文件引用如何有一个额外的“.. \”所以引用是正常的。无论如何,似乎问题是检测.js文件中的命中而不是将.js映射到.ts行。

更新

重现的步骤:

  1. 创建一个新项目“Blank Node.js Console Application”。
  2. 卸载项目。
  3. 修改.njsproj xml并添加以下行:<TypeScriptOutDir>lib</TypeScriptOutDir>
  4. 重新加载项目。
  5. 通过在路径中添加“\ lib”来更新项目中的启动文件。
  6. 打开“app.ts”文件。
  7. 在唯一的代码行“1. console.log('Hello world')”
  8. 中设置断点
  9. 开始调试。
  10. 结果:app.js在“\ lib”文件夹中生成,VS用节点运行文件,打印“Hello world”并完成。没有断点。

    是否有可能在.ts文件上设置断点总是假设生成的.js文件与.ts文件位于同一文件夹中?

    我已经测试过设置和“lib”而没有成功地在.ts文件中使用breackpoint并被击中。

    注意:

    如果我将断点直接设置在“\ lib \ app.js”中生成的文件上,它会被点击并且Visual Studio会开始调试,但我仍然需要它在.ts文件中设置断点。

    UPDATE2

    使用调试工作项目(.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

1 个答案:

答案 0 :(得分:0)

根据CodePlex中Visual Studio的Node.js工具上的这个工作项: https://nodejstools.codeplex.com/workitem/1428

该问题已被考虑并修复。我已经用&#34; NTVS 1.0 RC VS 2013&#34;进行了测试。似乎工作正常。

你可以选择&#34; NTVS 1.0 RC VS 2013&#34;来自NTVS下载页面: 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工具之后,两者似乎都能正常工作。