Visual Studio 2013 无法在 cshtml 中调试 javascript

Posted

技术标签:

【中文标题】Visual Studio 2013 无法在 cshtml 中调试 javascript【英文标题】:Visual Studio 2013 can't debug javascript in cshtml 【发布时间】:2014-01-15 11:13:37 【问题描述】:

我有一个使用 Visual Studio 2013 创建的 ASP.NET Web 应用程序。我正在尝试在 CShtml 文件中调试 javascript。但是,每当我启动网页时,任何断点都会变成一个红色圆圈箭头并指出“当前不会命中断点。调试器的目标代码类型的可执行代码与此行没有关联。可能的原因包括:条件编译,编译器优化,或者当前调试器代码类型不支持此行的目标架构。”

最近项目切换到支持MVC和RAZR,这两个我都不了解,正好是这个问题开始的时候。但是,搜索这些结果并不能解决我的问题。

Web.config:

<compilation debug="true"...>

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

【问题讨论】:

您是否在开始调试后编辑了视图或添加了断点?尝试停止调试会话,如果视图有未完成的更改,请保存视图,确保断点到位 - 然后再次启动调试会话。 不,我没有。这发生在我拥有的每个断点上,甚至还有一个用于几个新的调试会话。 @pwdst 还有其他想法吗?你知道是否可以在 Visual Studio 中调试 JavaScript 吗? 计算机上安装了哪个版本的 Internet Explorer?我相信 Visual Studio 2013 使用 Internet Explorer 11 中的 Trident 引擎进行调试 - 所以需要安装它(它应该使用 Visual Studio 安装升级,但您或管理员可能因为公司政策原因而降级)。还要确保不要在 Internet Explorer 中尝试和调试(通过各种方式进行检查,但不要调试),因为每个人都会尝试将调试器附加到同一进程。 IE 版本为 11.0.9600。我知道不能同时从 IE 进行调试,尽管承认只是因为它警告我已经附加了另一个调试器。我通过 cshtml 文件中的 【参考方案1】:

我不知道您的具体问题是什么,但是如果您想强制调试断点始终发生,请将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 分离到一个单独的文件中,并且相同的行为仍然存在。 这很奇怪。您是否尝试过附加 F12 工具的调试器以查看它是否会中断?如果它没有在 F12 工具中中断,那么我会怀疑浏览器可能有问题? 尝试附加 F12 工具的调试器会抛出错误:脚本调试器无法连接到目标进程。已附加调试器。 好的,启动没有附加调试器的 Web 应用程序 (ctrl+F5),然后尝试附加 F12 工具 浏览器可能正在缓存 JS。如果您更改任何内容,请确保您使用 Ctrl+F5。添加显式 debugger; 行不会添加红色圆圈断点,但它应该强制 VS 中断,或者 IE 调试器会。【参考方案2】:

因此,显然这是一个“已知问题”,将尽快修复。适用于“某些”人的临时解决方法是确保任何 Javascript 都在单独的文件中。

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

【讨论】:

你能分享任何关于这是一个已知问题的参考吗? 我会看看我能做什么,因为它是电子邮件支持。我已经向他们发送了一封电子邮件,要求提供参考资料。 这可能节省了我多年的谷歌搜索。与有关的帖子相比,这样的帖子应该获得更多的投票 - 使用字符串的最佳方式是什么。 这里是提交给 miscrosoft connect.microsoft.com/VisualStudio/feedback/details/807088/…的错误报告 如果我在 .cshtml javascript 中粘贴“调试器”语句,调试器会在该点中断,然后我可以单步执行代码,甚至可以用鼠标添加额外的断点。 【参考方案3】:

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

由于某种原因,chrome 不允许您进入 javascript。

【讨论】:

【参考方案4】:

还有一件事要检查。如果你有一个 App_Start|BundleConfig.cs(随 MVC 4 或 3 一起提供),将 BundleTable.EnableOptimizations 设置为 false(或者,像我一样,将它包装在 #if !DEBUG #endif 中并采用默认设置) .

【讨论】:

花了我一个小时才弄清楚这是手头的问题。【参考方案5】:

允许从 Visual Studio 调试 javascript 文件的唯一浏览器是 Internet Explorer。 (这是我在不同浏览器上测试我的应用程序后发现的)

【讨论】:

这是为什么呢?我看到很多帖子都这么说,但没有解释为什么...... 我真的不知道。可能是因为:Internet Explorer 是 Microsoft 制造的。 Visual Studio 也是微软制造的。我没有更好的主意:( 自 VS 2015 年左右以来这不是已经过时了吗?【参考方案6】:

我尝试使用 Chrome 和 IE 并最终失败,最终在 Firefox 中使用 Firebug 插件,我能够在我的 JS 中调试和设置断点没有问题(在 Visual Studio 2015 上的 MVC6 应用程序中,这是显然还是个问题?!)...

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

【讨论】:

【参考方案7】:

对于 2017 年来到这里的人,我想与 VS2017 Enterprise RCVS 2015 社区 分享 我遇到了同样的问题 > 使用除 Internet Explorer 之外的任何浏览器。使用 IE 对我有用。

另外,在 VS2017 中,我必须添加一个 debugger 声明让 VS 开始查看调试点

最后,我想至少请投反对票的人发表评论。

【讨论】:

VS 2017 不希望在 .cshtml 文件中的 JS 断点上停止,无论浏览器如何。将代码移到JS文件中,一切正常。

以上是关于Visual Studio 2013 无法在 cshtml 中调试 javascript的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio:使用外部文件(不复制它们)

Visual Studio 2010 未生成 SharePoint 2010 WebPart .g.cs 文件

无法在 Visual Studio 2013 中运行单元测试

在visual studio里面,如何能让我看到.CS文件?

无法在 Visual Studio 2013 中加载 Krypton Toolkit 控件

Visual Studio 2013 无法在 cshtml 中调试 javascript