【问题标题】:Is there any way to break on the next line of code executed in Visual Studio?有什么办法可以中断在 Visual Studio 中执行的下一行代码?
【发布时间】:2010-11-24 20:09:36
【问题描述】:

我正在尝试追踪当我单击 aspx 页面上的特定元素时发生的错误...

在过去,我不得不追踪处理该特定事件的类,并在我认为应该命中的行上放置一个断点。在我最终找到正确的类之前,我通常需要多次尝试……尤其是如果该类是隐藏在某处的用户控件……

所以我想知道是否有任何方法可以让 Visual Studio 在我单击 aspx 页面上的元素(例如按钮)后执行的下一行代码中中断。我知道有一种方法可以打破抛出的任何异常,所以我想也许有类似的东西可以帮助我。

如果这种功能是不可能的,也许有人可以建议一种更好的方法让我快速找到我想要调试的类...

【问题讨论】:

  • 这个“错误”是如何表现出来的?你不能在那里设置断点吗?或者您知道单击该按钮在此处设置断点后将执行的任何其他代码吗?如果是这样,请查看堆栈窗口。它应该向您显示调用的事件处理程序。然后你可以在那里放一个断点。
  • @sbi 当我单击一个展开以显示更多信息并最终显示比所需数据更多的按钮时,该错误就会显现出来。我试图找到向正在显示的数据添加一些过滤的方法。最终,我能够发现名称不佳的方法。它是访问数据网格项时的委托方法。我仍然希望它更容易找到......
  • @Kyralessa 这是多么无用的评论。也许你可以找到一个比侮辱我更好的方法让我重新考虑你的答案......
  • 我可以向你保证,我不只是拒绝每一个答案......我只是接受了一个接近满足我需求的答案,即使它不是理想的答案......我个人喜欢你的答案更好,但它没有也对我不起作用,所以我不能接受它作为答案......
  • 我想问题是在 ASPX 页面上尝试这个。我现在正在为 MVC 苦苦挣扎。可能当您第一次单击按钮时,它会跳转到处理页面的脚本语言。由于我们无法在此处放置断点,因此我们无法看到堆栈指针。

标签: visual-studio-2008 debugging breakpoints


【解决方案1】:

您是否尝试过“调试”>“全部中断”(“暂停”)按钮? (Ctrl+中断)

它通常会在堆栈中某个非常低的位置中断,例如在 WinForms 应用程序中的主窗体的 Show() 处,但如果你随后 Step Into 克服它,它通常会很好地用于这种类型的东西。

【讨论】:

  • 我不确定 Break All 按钮是否正是我想要的,因为我认为代码将在我点击屏幕后的几毫秒内执行,因此我不会能够足够快地暂停它。
  • 我再说一遍:您尝试过吗?单击按钮后,您不会尝试单击全部中断。在单击按钮之前单击 Break All,然后单击 Step Into,然后然后单击按钮。
  • 好的,我又试了一次……还是不行。也许是因为我正在调试一个 aspx 页面。当我点击暂停然后点击窗口上的某些东西时,它所做的只是尝试加载页面......但什么也没有发生......我必须点击运行然后再次暂停它,然后它才会中断,到那时为时已晚.我将不得不尝试您的建议,例如 WinForms 或控制台应用程序,看看效果如何……如果可行,我会将您的建议标记为答案……但对于我所追求的,它没有'好像不行……
  • 这是一个很好的答案,我认为这不是“显而易见的”。简单 - 全部中断,F11(步骤,通常在 Application.Run 行),单击表单上的按钮,代码在该位置中断。如果您有某些事情正在发生,这将不起作用..例如 WndProc 覆盖等在消息泵上触发的事情。对于其他情况,这很好用,并且是一种简单的方式,可以说“在我做的下一个动作上中断”(比如点击一个按钮!)。
  • 更新:我提到,如果您正在执行诸如覆盖 WndProc、捕获键盘事件等操作,这将无法正常工作 - 解决方案是将 [DebuggerStepThrough] 属性添加到您的方法中。这将绕过该方法并允许您在完成全部中断并按 F11 后进入“下一个”方法,但会绕过您不想调试的任何其他方法。
【解决方案2】:

您在寻找Step Into (F11)Step Over (F10) 吗?

-- 编辑

您还知道Call Stack 窗口吗?它可以帮助您确定您的位置以及正在发生的事情。

【讨论】:

  • 抱歉,我知道 F11、F10 和调用堆栈窗口。我正在寻找一些东西,一旦我在 aspx 页面上触发操作后点击代码库,我就可以中断。
  • mezoid:也许您想在代码的特定部分写System.Diagnostics.Debugger.Break();?无论您是否明确设置断点,这都会强制调试器在那里中断?
  • 除了我不知道类在哪里,我需要把休息放在... :(
  • 是的......好吧,恐怕这里没有太多可以帮助你的东西,但是逻辑的应用:)(好吧,也许这个:stackoverflow.com/questions/907856/…),如果 Mehrdad 接受的话作为一个项目:P)
  • 好的,那么如果没有什么可以满足我的要求,那么我将不得不授予您答案,只是因为告诉我它无法完成。 :) 感谢您的帮助!
【解决方案3】:

Conditional Breakpoints 可能是您的答案。如果您认为您的代码有问题,您可以设置它们,并且它们只会在满足条件时停止。

【讨论】:

  • 是的,但我想找到一种方法,不必为了找到我要查找的代码而设置一大堆断点
【解决方案4】:

调试 -> 异常

检查是否引发了 CLR 异常。

编辑

您很可能遇到了 CLR 异常。使用此方法,调试器将始终在发生异常时中断。与读取堆栈跟踪相比,这非常方便。

【讨论】:

  • 这很好,但在我的情况下,我正在寻找的错误不是由异常引起的
【解决方案5】:

一些想法:

  • 如果您对事件处理程序使用一致的命名约定,那么对它们进行全局搜索并添加断点应该很简单。您可以在第一次点击时快速录制宏,然后回放宏,以消除多次重复操作的痛苦。通过一些练习,您将能够在几秒钟内对所有处理程序进行断点。

  • 1234563 .到达断点后,您可以单步执行该事件的其他事件处理程序。
  • 编写一个自定义事件处理程序来处理点击并简单地生成一个新事件。将所有其他事件处理程序附加到此次要事件。然后,您可以对第一个处理程序进行断点并单步执行它调用的辅助处理程序。

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多