尝试在Chrome中调试Javascript

尝试在Chrome中调试Javascript,javascript,google-chrome,debugging,Javascript,Google Chrome,Debugging,我正在Visual Studio 2013中开发一个MVC web应用程序,我已经能够浏览到该应用程序的调试会话,并在chrome中点击F12以观看我的javascript。我打开调试窗口,单击Sources选项卡,进入我的Content/JS/Script.JS文件,可以设置断点 最近,我的断点从未命中。javascript似乎正在被调用,但它并没有停止。我确实注意到,如果代码出错,我可以单击错误中的链接,Sources会显示一个名为VM895或类似的文件,它似乎是我的Script.js文件的

我正在Visual Studio 2013中开发一个MVC web应用程序,我已经能够浏览到该应用程序的调试会话,并在chrome中点击F12以观看我的javascript。我打开调试窗口,单击Sources选项卡,进入我的Content/JS/Script.JS文件,可以设置断点

最近,我的断点从未命中。javascript似乎正在被调用,但它并没有停止。我确实注意到,如果代码出错,我可以单击错误中的链接,Sources会显示一个名为VM895或类似的文件,它似乎是我的Script.js文件的副本,除了没有断点之外

除非我的javascript错误,否则我找不到打开该文件的方法

有谁能向我解释为什么会发生这种事吗?为什么它不使用我放在实际脚本文件中的断点,以及可能发生了什么变化

据我所知,我没有在Javascript中的任何地方使用
eval

这是我的MVC/Razor:

<div class="col-md-5">
    @Html.DropDownListFor(model => model.SelectedRoleId,
        ViewBag.ReviewRoles as SelectList,
        new { @class = "form-control", onchange = "OnChangeAjaxAction.call(this, 'reviewRole');", id = "ddlReviewRole" })
</div>
浏览器(有时)很难在动态加载的JavaScript上持久化断点。最简单的解决方案是添加一个
调试器代码中的行

您可能认为您没有使用eval,但每当您在HTML中设置处理程序时,就会动态地创建代码,然后执行这些代码

// Code loaded dynamically
function doSomething(y) {
    var x = 1;
    // If dev tools is open, it will treat `debugger` as a breakpoint
    debugger;
}
或者,在你的例子中

<div class="col-md-5">
    @Html.DropDownListFor(model => model.SelectedRoleId,
        ViewBag.ReviewRoles as SelectList,
        new { @class = "form-control", 
        onchange = "debugger; OnChangeAjaxAction.call(this, 'reviewRole');", id = "ddlReviewRole" })
</div>

@Html.DropDownListFor(model=>model.SelectedRoleId,
ViewBag.ReviewRoles作为SelectList,
新建{@class=“表单控件”,
onchange=“debugger;OnChangeAjaxAction.call(this'reviewRole');”,id=“ddleviewrole”})

您必须在appSettings部分的web.config文件中将参数“UseBundle”设置为false

您可以通过以下方式访问VM895文件:

  • 单击“源”选项卡
  • 选中事件侦听器断点下的鼠标->单击框
  • 在窗口中单击(您可能需要点击run一次或两次以获取代码)

  • 您还可以尝试通过代码中的console.log()访问它,如中所示。

    您是否尝试过清除缓存以便重新蚀刻脚本?也许有什么奇怪的事情发生了。你是不是错误地停用了断点?在“源”选项卡的最右侧顶部,有一个指向右侧的路标(如果悬停,则为蓝色)。这是激活/停用所有断点的按钮。不,Josh KG,如果我进入VM895文件并设置断点并重新触发javascript,它们就会命中。如何加载javascript文件?给我们看一些代码…Ziki,这不能回答我的问题。我不是故意使用eval。即使我是,我如何在VM中查看源代码而不出错?这也适用于Node.js这样的环境,这是最简单的解决方案。谢谢。仍然不知道为什么行为会突然改变。@MKenyonII根据我的经验,这个问题一直在波动;Chrome是这三种浏览器中表现最好的,但是新的bug/fixes经常被引入。您是否可以澄清一下
    UseBundle
    参数是什么,它可以帮助用户点击断点?从我所读到的来看,它似乎主要是一个性能特性?
    // Code loaded dynamically
    function doSomething(y) {
        var x = 1;
        // If dev tools is open, it will treat `debugger` as a breakpoint
        debugger;
    }
    
    <div class="col-md-5">
        @Html.DropDownListFor(model => model.SelectedRoleId,
            ViewBag.ReviewRoles as SelectList,
            new { @class = "form-control", 
            onchange = "debugger; OnChangeAjaxAction.call(this, 'reviewRole');", id = "ddlReviewRole" })
    </div>