Visual Studio 2013无法在cshtml中调试JavaScript

40

我有一个由Visual Studio 2013创建的ASP.NET Web应用程序。我正在尝试调试CSHTML文件中的JavaScript。但是,每当我启动Web页面时,任何断点都会变成红色圆形箭头,并显示“当前不会命中断点。调试器的目标代码类型中没有与此行相关联的可执行代码。可能的原因包括:条件编译、编译器优化或目标体系结构不受当前调试器代码类型支持。”

最近,该项目改为支持MVC和RAZOR,但我对这两者都不太熟悉,而且问题也从那时开始出现。但是,搜索这些内容并没有解决我的问题。

Web.config:

<compilation debug="true"...>

我知道可以使用Firebug或其他浏览器工具调试JavaScript,但我更愿意使用Visual Studio的调试,因为我已经习惯了它。


你在开始调试后是否编辑了视图或添加了断点?尝试停止调试会话,如果视图有未保存的更改,请保存视图,确保断点已设置好 - 然后再次开始调试会话。 - pwdst
没有,每个断点都会出现这种情况,即使是为数不多的几个新的调试会话中留下的一个断点。 - JuniorIncanter
另外,您是如何将脚本添加到页面中的?您能否在未更改的新模板MVC应用程序中调试脚本? - pwdst
1
IE版本为11.0.9600。我知道不能同时从IE进行调试,虽然承认这是因为它警告我已经连接了另一个调试器。我通过在cshtml文件中添加<script type="text/javascript">块来添加脚本。我现在将尝试调试未改变的新模板MVC应用程序。 - JuniorIncanter
@pwdst 我使用未更改的新模板MVC应用程序时,也会收到与上述描述完全相同的警告。 - JuniorIncanter
显示剩余2条评论
7个回答

45

显然这是一个"已知问题",将尽快修复。一种"临时解决方法"可以使"某些"人确保任何Javascript都在单独的文件中。

这是由于RAZR和Javascript在同一个文件中引起的,而Visual Studio 2013无法处理该实例中的调试。


1
你能分享一些关于这个问题已知的参考资料吗? - ClearCloud8
我会尽力而为,因为这是电子邮件支持。我已经给他们发送了一封电子邮件,请求参考资料。 - JuniorIncanter
1
这个可能为我节省了多年的谷歌搜索。像这样的帖子应该比关于什么是最好的字符串使用方式的帖子获得更多的赞同。 - snowYetis
3
这是提交给微软的错误报告 https://connect.microsoft.com/VisualStudio/feedback/details/807088/unable-to-debug-javascript-from-the-vs-2013-ide-unable-to-set。 - Joe
6
如果我在.cshtml的javascript代码中添加一个"debugger"语句,调试器会在此处中断,然后我就可以逐步执行代码,并且甚至可以使用鼠标添加其他断点。 - Jeff Dege
显示剩余5条评论

21

我不知道你具体的问题是什么,但是如果你想强制在某一行触发调试断点,只需在该行中添加debugger;即可实现停止。无论JS代码位于何处(.js文件、.html、cshtml等),都可以使用此方法。

这是一个关于此方法的博客文章:

http://sumitmaitra.wordpress.com/2013/12/11/quickbytes-visual-studio-2013-and-javascript-debugging/

我也同意将JS代码放入.js文件中(因为我从未在.js文件中遇到添加断点的问题),但是对于快速原型设计,这是一个可行的解决方案。

如果以上方法仍然无效,你可以使用 F12 工具。


不,即使使用 debugger; 也无法停止。一旦我运行应用程序,调试断点会变成红色箭头环绕自身,并在工具提示上方显示警告。 它也可以很好地跳过断点(即从网页调用具有断点的函数并且它们可以正常工作而无需在断点处停止)。我已将JavaScript文件分离到单独的文件中,但仍存在相同的行为。 - JuniorIncanter
这很奇怪。你尝试过连接 F12 工具的调试器来查看是否会在那里中断吗?如果它在 F12 工具中没有中断,那么我会怀疑浏览器是否有问题。 - joe_coolish
尝试附加 F12 工具的调试器时会出现错误:脚本调试器无法连接到目标进程。调试器已经被附加。 - JuniorIncanter
2
好的,请启动Web应用程序(不附加调试器)(Ctrl + F5),然后尝试附加F12工具。 - joe_coolish
浏览器可能会缓存JS。如果您更改了任何内容,请确保按Ctrl+F5。添加显式的debugger;行不会添加红色圆形断点,但它应该强制VS中断,或IE调试器将中断。 - JoeBrockhaus
使用调试器对我很有帮助。 - blfuentes

12

在不同的浏览器中测试我的应用程序后,我发现唯一允许使用Visual Studio调试JavaScript文件的浏览器是Internet Explorer。


为什么会这样?我看到很多帖子都在说这件事,但没有解释为什么... - Cool Blue
我真的不知道。也许是因为:Internet Explorer 是微软制造的。Visual Studio 也是微软制造的。我没有更好的想法 :( - Mile Laszlo
这不是自 VS 2015 或之后就过时了吗? - MGOwen

5

还有一件需要检查的事情。如果你有一个App_Start | BundleConfig.cs(随着MVC 4或者3而来),请将BundleTable.EnableOptimizations设置为false(或者像我一样,将其包含在#if!DEBUG#endif中并采用默认设置)。


花了我一个小时才找出这是手头的问题。 - Mikee

5

我把我的JavaScript放在一个单独的文件中,并使用IE进行调试,否则它将无法工作。

由于某些原因,Chrome不允许您进入JavaScript。


0

对于2017年来到这里的人,我想分享一下,我曾经遇到过同样的问题,在使用VS2017企业版RCVS 2015社区版时,除了Internet Explorer浏览器外,任何浏览器都会出现问题。使用IE浏览器对我很有帮助。

此外,在VS2017中,我必须添加一个debugger语句才能让VS开始查看调试点

最后,我想至少从投票反对的人那里得到一条评论。


无论使用哪种浏览器,VS 2017 都无法在 .cshtml 文件中停止JS断点。但如果将代码移到JS文件中,则一切正常。 - Mikee

0

我尝试使用Chrome和IE,但最终使用了Firefox中的Firebug插件,我能够轻松地调试和设置JS断点(在Visual Studio 2015的MVC6应用程序中,这显然仍然是一个问题?!)...

顺便说一下 - 当我尝试使用F12开发人员工具在Chrome中调试我的JS时,它告诉我这不是一个选项,因为调试器已经附加到另一个进程中...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接