如何创建更准确的断点或Try / Catch

时间:2010-04-27 15:31:35

标签: c# visual-studio debugging

我有两个FOR循环,外部将重复64次 我所知道的有一个索引超出范围的错误 如何设置一个好的断点或try / catch块等,它确切地显示了导致问题的索引和代码行。 (C#WinApp)

谢谢大家。

3 个答案:

答案 0 :(得分:7)

在VS调试器中,您只需在“异常”对话框中启用“Break On Thrown Exception”。然后您不需要设置断点,调试器将在异常时自动停止提高。

您在以下位置进行此更改:调试>>例外>>公共语言运行时异常

只需在对话框的“Thrown”列中检查相应的异常:

alt text http://img248.imageshack.us/img248/5733/breakg.png

如果你需要在引发异常之前中断(让我们说检查一些易失性数据),可以在特定的行上设置条件断点,只有当你的代码中的某些条件是真正。为此,您可以设置常规断点,然后右键单击边距中的红色圆圈图标,然后选择:[条件...]。

这将打开conditional breakpoint对话框,您可以在其中编写一个表达式,当计算结果为true(或某些值发生更改时)时,该表达式将导致调试器中断。断点条件可能有点挑剔,但如果您坚持使用代码中的简单变量,它就能很好地运行。

alt text http://img293.imageshack.us/img293/2921/break.png

答案 1 :(得分:2)

如果您使用的是Visual Studio,最简单的方法就是点击F5。调试器将自动中断代码抛出的异常,这些异常未被捕获。

如果在您的代码中的其他位置捕获到异常,则这不一定有效。如果是这种情况,您可以通过转到

启用中断例外
  • 调试 - >例外
  • 检查CLR例外的“用户投掷”
  • 点击F5

答案 2 :(得分:2)

[我认为其他答案对于这个特定问题更好,但由于考虑了范围,我将离开这个问题。]

为了快速调试,进入循环,这样你的循环变量仍然在范围内并填充。

int[] array = new int[10];

for (int i = 0; i < 20; i++)
{
    try
    {
        int temp = array[i];
    }
    catch (IndexOutOfRangeException ex)
    {
        // i is still in scope
    }
}