Visual Studio 2010脚本调试器对我无效

35
我刚安装了VS 2010 Beta 2,想尝试使用ASP.NET MVC 2项目。我在Home控制器的index.aspx视图中添加了一些脚本(alert('hello');),并可以看到它在执行。然而,当我尝试设置断点时,它从未被触发。我还尝试使用"debugger"关键字,当我这样做时,我得到一个令人失望的"当前位置没有可用的源代码"消息。当我尝试独立附加到运行我的应用程序的IE进程时,我也会收到此消息。
我需要做什么才能获得友好的脚本调试体验呢? (我已成功使用Firebug进行调试,但由于某种原因,我更喜欢VS调试器。)
以下是我配置的一些详细信息:
  • 我在VS 2010 Beta 2中启动我的东西。
  • IE8版本8.0.7600.16385是我的默认浏览器。
  • "禁用脚本调试(Internet Explorer)"高级选项未选中。
  • "禁用脚本调试(其他)"选项未选中。
  • 在我的ASP.NET MVC 2项目的"Web"属性选项卡中,启用了ASP.NET调试器,其他都未选中。
  • Visual Studio 2008脚本调试似乎完全正常。
8个回答

29

调试器无法同时调试Silverlight代码和Script代码,如果选择Silverlight调试器,则JavaScript调试将被关闭。

  1. 转到项目属性(Alt+Enter)。
  2. 对于网站项目:选择“启动选项”。对于Web应用程序:转到Web选项卡,在底部您将看到调试器选项。
  3. 检查Silverlight复选框未被选中,如果您希望能够调试JavaScript。(很遗憾这里的UI没有明确说明这种副作用。)

4
我可以亲吻你。我正在尝试在附有 Silverlight 项目的 asp.net 网站中调试 Javascript。每次我尝试进行调试时,都会出现一连串奇怪的弹出窗口要求我附加调试器,然后抱怨调试器已经附加了。为明确起见,请转到解决方案中的 asp.net 项目,进入项目属性并打开 Web 选项卡。在底部,有用于调试器的复选框。禁用 Silverlight 调试器将使Javascript调试器恢复正常工作。这需要写进维基百科或其他地方。 - Dan Bailiff
@mister ok 在mvc3/vs2010中,我在项目属性下看不到“启动选项”。 - gideon
@Mister Cook,您知道ASP.net / MVC 2项目中设置此选项的位置吗? - Yes - that Jake.
在 Web 应用程序项目中,转到项目属性(Alt+Enter)| Web,然后它位于底部(可能需要向下滚动)。 - Mister Cook
谢谢!在找到这个解决方案之前,这让我疯了。顺便说一句:因为有人选择了SL调试器,所以我不知道要去哪里看。 - Michael Hollywood
@MisterCook 这里是Web应用程序。我按照您的答案操作,但我的断点仍然无法正常工作。唯一选中的复选框是ASP.NET,SilverLight未被选中。 - KiRa

7

我遇到了同样的问题。在脚本标记中设置断点,但无法在IDE中终止。但是,当我在脚本标记中添加"debugger;"作为第一行时,能够得到IDE的响应,但只显示不可用的反汇编。

然而,我能够点击调试工具,如“步入”和“步过”。当我这样做时,IDE会进入我正在使用的一些外部脚本(JQuery和Google Maps)。所以,我将JavaScript代码块从视图中取出,并将其放入“Content”文件夹中的一个单独的.js文件中。然后,我添加了一个脚本标记来引用这个新的.js文件(url =“/Content/Test.js”)。

它起作用了...有点麻烦,因为你必须经历这些努力,但也许不能直接将JavaScript包含在视图中也有一定好处。我希望这是他们打算修复的一个错误。


4

当在IE上进行调试时,VS似乎会在解决方案资源管理器中添加一个名为“脚本文档”的文件夹。该文件夹内部有另一个名为“Windows Internet Explorer”的文件夹,其中包含所有已加载的js脚本和当前在IE上显示的(已编译的)HTML文件。在这个HTML文件中的脚本标签上设置断点对我来说是有效的。


2
要解决此问题,请前往项目属性并选择“启动选项”。然后勾选“本机代码”复选框,取消选中Silverlight复选框,因为两个选项不可同时使用。

1

按下CTRL+Alt+P(附加到进程),选择IE,选择“脚本”作为调试类型。


2
谢谢你的想法,但是我得到了与使用F5启动和“debugger”关键字时得到的相同的“当前位置没有可用的源代码”的消息。 - Chris Farmer
你能否在JavaScript中添加一个函数,附加并基于该函数名称创建一个新的断点? - popester

0

使用单独的js文件有其缺点。例如,您无法使用MVC助手。微软真的需要解决这个问题。

即使您包括引用注释,也无法在视图上的脚本块中正确地使用Intellisense:

/// <reference path="/Scripts/jquery-1.6-vsdoc.js" />
/// <reference path="/Scripts/jquery-1.6.js" />

虽然采用这种方法,js文件中的Intellisense可以正常工作。


0
正如Ryan在上面提到的,我将我的脚本移动到Scripts文件夹下的一个单独文件中。我还在脚本名称中添加了debug,使其变成了MyTestScript.debug.js。我通过脚本标签包含了该脚本,并且可以在脚本文件中设置断点,调试器也会命中这些断点。

0

我发现Google Chrome开发者工具完美地显示了JavaScript。在我的情况下,我通常使用jQuery的getScript函数加载脚本,并且代码的执行通常是通过jQuery回调方式在加载页面或处理事件时进行的。在使用Visual Studio 2010时,我经常遇到“没有源”错误。很遗憾我需要使用Chrome调试作为Visual Studio项目一部分的JavaScript。


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