如何在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)遍历执行过程。您可以尝试使用F10单步遍历代码,直到遇到问题,结果也会一样。我不确定是否理解您的问题。 您可以使用一个断点,然后点击F10(单步执行)或F11(单步执行)转到下一条指令。这与在每一行上都有一个断点并在每次中断后按F5(continue)是一样的。
或者,您可以在罪魁祸首行设置一个断点,并调查callstack窗口,以查看到该点的控制流。此操作非常简单,但前提是您知道发生了什么。下面是要做的事情
最简单的方法是使用调试器的内置全部中断功能。它并不适用于所有情况,但如果它适用于您的情况,那么它的使用非常简单。调试>>全部中断(或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和其他一些,但调试多线程场景要困难得多,因为该过程可能在任何给定时间返回。请参阅我对类似答案的评论。这将适用于单线程应用程序。那么事件驱动的多线程应用程序呢?