【问题标题】:How to debug C# without breakpoints in Visual Studio?如何在 Visual Studio 中调试没有断点的 C#?
【发布时间】:2010-12-08 15:06:08
【问题描述】:

我很难找到导致给定副作用的语句。我在每个班级成员中都放了一个断点,但我仍然无法在罪魁祸首上暂停执行。

  • 是否有一个调试器选项可以让执行在每一行都暂停而不考虑断点?

  • 如何在不手动标记的情况下将每一行设为断点?

【问题讨论】:

  • 这是什么副作用?可能有更好的方法来解决这个问题,或者设置更多可能的断点。
  • @Damien 我的代码所做的事情,如果有可用的 Internet 连接,则使 Windows 根据 Internet 上更新的 CRL 和 STL 验证代码签名。
  • 您试图捕获的副作用是什么?换一种方式来看问题可能更容易。
  • @Dan 看看我对 Damien 的回答
  • 你可以在side effect方法的第一行放一个断点,然后当执行中断时,检查调用堆栈看看(至少其中一种方式) 你是怎么到达那里的。

标签: c# visual-studio debugging visual-studio-2010 breakpoints


【解决方案1】:

您可以暂停执行,然后开始逐行跟踪(例如按 F10)。这会给你在每一行中断的完全相同的效果。

编辑:如果您使用“trace into”(在默认设置中按 F11),则不必在每个方法中设置断点。然后调试器将在被调用方法的第一行停止。

如果您在调试它时遇到问题,可能在设置断点之前需要进行更多静态分析...您能描述一下您试图寻找的副作用吗?也许人们可以就如何找到它或至少缩小搜索范围提出建议。

编辑 2:我认为您不会通过断点找到您所描述的副作用。加载签名程序集时,CLR 会验证签名代码。它必须访问网络才能更新撤销列表。

要解决此问题,您可以禁用 CRL 检查。以下是有关如何执行此操作的一些信息: http://technet.microsoft.com/en-us/library/cc738754(WS.10).aspx

当然,您应该了解安全隐患(如果您正在运行的代码的证书真的被吊销了怎么办?)

【讨论】:

  • 是的,我知道。仅当我在每个方法的第一行设置断点时它才有效。我已经试过了,它很麻烦,而且效果不佳。
  • +1 用于在特定位置暂停执行。您可以在 MessageBoxes 等任何地方执行此操作,非常有用。
  • @Jader Dias,我知道证书没有被吊销。我认为困扰您的是检查本身,以及为更新 CRL 而完成的对网络的访问。
  • @Ran CRL 不是我主要关心的问题,因为我可以手动下载和安装它们,解决几个月的部分问题。但我不能对 STL 做同样的事情。即使我下载并安装它,给定的机器也会继续搜索它。
  • 所以这并不是一个真正的 Visual Studio 调试问题,因为您正在寻找的效果不会发生在您的代码中,您将无法闯入它。我建议您添加更多关于您的 STL 问题、您尝试做什么以及出了什么问题的信息。
【解决方案2】:

在要执行的代码的第一行放置断点(例如,如果您是控制台应用程序,则在 main 函数的第一行)。然后只需使用单步命令(默认为 F10 和 F11)即可完成执行。

【讨论】:

  • 它适用于单线程应用程序。那么事件驱动的多线程应用呢?
【解决方案3】:

这很简单,但前提是您知道发生了什么。这是做什么。

  1. 在打开项目的 Visual Studio 中,按住 ctrl-alt-E 以加载“异常”对话框。 这为您提供了何时中断的选项。您将选择“Common Language Runtime Exceptions”Thrown 列。
  2. 现在继续运行您的应用程序。现在,任何引发的 CLR 异常都会将您带到损坏的代码行。

完成后不要忘记按 ctrl-alt-E 并取消选中!

【讨论】:

  • 这是一个很好的建议,只要您尝试调试的代码会引发异常。问题的措辞方式,他试图找到导致某些副作用的代码,这并不一定意味着它会抛出异常。
  • @Jader Diaz 是的......在阅读了所有的 cmets 之后,我看到了发生了什么......没有办法同时拥有所有这些。发生的情况是,您可以在调试期间的任何 1 点中断它,并且任何后续中断点都将出现在调试会话的前面。
  • 您可以使用条件断点、异常中断、DebugBreak、Debug.Write 等,但调试多线程场景要困难得多,因为进程可能随时返回。
【解决方案4】:

最简单的方法是使用调试器内置的 Break All 功能。它并不适用于所有情况,但如果它适用于您的情况,那么使用起来非常简单。调试 >> 全部中断(或 CTRL + ALT + Break

有关详细信息,请参阅此页面上标题为“使用断点或全部中断”的部分:Start, Break, Step, Run through Code, and Stop Debugging in Visual Studio

【讨论】:

    【解决方案5】:

    您可以尝试使用 F10 单步执行代码,直到遇到问题,它会得到相同的结果。

    【讨论】:

    • 查看我的 cmets 以获得类似的答案
    【解决方案6】:

    我不确定我是否理解您的问题。 您可以使用一个断点,然后按 F10(跳过)或 F11(步入)以执行下一条指令。这与在每一行都有一个断点并在每次中断后按 F5(继续)是一样的。 或者您可以在罪魁祸首处设置断点并调查调用堆栈窗口以查看到该点的控制流。

    【讨论】:

    • 我不知道哪个是罪魁祸首。这正是我正在寻找的。​​span>
    猜你喜欢
    • 2017-10-30
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多