如何在Visual Studio中调试没有断点的C#?

如何在Visual Studio中调试没有断点的C#?,c#,visual-studio,debugging,visual-studio-2010,breakpoints,C#,Visual Studio,Debugging,Visual Studio 2010,Breakpoints,我很难找到引起特定副作用的陈述。我在每个类成员中都放置了一个断点,但仍然无法使执行暂停在罪魁祸首行 是否有一个调试器选项使执行在每一行暂停,而不考虑断点 或 如何使每一行都成为断点,而不必手动标记它们 您可以暂停执行,然后开始逐行跟踪(例如按F10)。这将给你完全相同的效果,打破在每一行 编辑:使用“跟踪到”时,不必在每个方法中设置断点(通过在默认设置中按F11)。然后调试器将在被调用的方法的第一行停止 如果您在调试它时遇到问题,那么在寻找断点之前,可能需要进行更多的静态分析。。。你能描述

我很难找到引起特定副作用的陈述。我在每个类成员中都放置了一个断点,但仍然无法使执行暂停在罪魁祸首行

  • 是否有一个调试器选项使执行在每一行暂停,而不考虑断点

  • 如何使每一行都成为断点,而不必手动标记它们

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

编辑:使用“跟踪到”时,不必在每个方法中设置断点(通过在默认设置中按F11)。然后调试器将在被调用的方法的第一行停止

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

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

要解决此问题,可以禁用CRL检查。以下是有关如何操作的一些信息:


当然,您应该意识到安全问题(如果您正在运行的代码的证书真的被吊销了怎么办?

在执行的代码的第一行上放置一个断点(例如,如果您是控制台应用程序,则在主函数的第一行)。然后只需使用单步命令(默认情况下为F10和F11)遍历执行过程。

您可以尝试使用F10单步遍历代码,直到遇到问题,结果也会一样。

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

此操作非常简单,但前提是您知道发生了什么。下面是要做的事情

  • 在Visual Studio中,当项目处于打开状态时,按住ctrl-alt-E以加载“异常”对话框。 这为您提供了何时中断的选项。您将选择“公共语言运行时异常”列
  • 现在继续运行您的应用程序。现在,抛出的任何CLR异常都会将您带到中断的代码行
  • 完成后,不要忘记按住ctrl-alt-E键并取消选中


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


    有关更多信息,请参阅本页标题为“使用断点或全部中断来中断代码”的部分:

    这是什么样的副作用?可能有更好的方法来捕获此问题,或者设置更可能的断点。@Damien我的代码所做的某些事情,使Windows根据internet上更新的CRL和STL验证代码签名(如果有可用的internet连接)。您试图捕获的副作用是什么?从另一个角度来看问题可能更容易。@Dan请看我对Damien的回答。你可以在副作用方法的第一行设置断点,然后在执行中断时,查看调用堆栈,看看(至少有一种方法)你是如何做到这一点的。是的,我知道。只有在每个方法的第一行设置断点时,它才起作用。我已经试过了,它很麻烦,效果也不太好。+1用于在特定位置暂停执行。您可以在MessageBox等任何地方执行此操作,非常有用。@Jader Dias,我知道证书没有被吊销。我认为困扰您的是检查本身,以及为了更新CRL而访问网络。@运行CRL不是我主要关心的问题,因为我可以手动下载并安装它们,在几个月内解决了部分问题。但是我不能用STL做同样的事情。即使我下载并安装了它,给定的机器也会继续搜索它。所以这并不是Visual Studio调试的问题,因为您搜索的效果不会出现在您的代码中,您将无法进入它。我建议你添加一些关于STL问题的更多信息,你试图做什么,出了什么问题。我不知道哪一条是罪魁祸首。这正是我想要的。这是一个很好的建议,只要您试图调试的代码抛出异常。按照问题的措辞,他试图找到导致某些副作用的代码,这并不一定意味着它抛出了异常。@Jader Diaz是的。。。看完所有的评论后,我知道发生了什么。。。不可能同时拥有所有这些。发生的情况是,当调试和任何后续中断点将出现在调试会话的前端时,您可以让它在任意1点中断。您可以使用条件断点、异常中断、调试中断、,Debug.Write和其他一些,但调试多线程场景要困难得多,因为该过程可能在任何给定时间返回。请参阅我对类似答案的评论。这将适用于单线程应用程序。那么事件驱动的多线程应用程序呢?