在c#中逐行调试

时间:2012-04-15 16:00:03

标签: c# visual-studio debugging

我在微软网站上发现,如果我想逐行调试程序,我需要按F11。 如果我按F11,我将获得(以一种名为Program.cs的新形式):

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Windows.Forms;

     namespace WindowsFormsApplication1
    {
      static class Program
     {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();  
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    }
    }

他们补充说:“当单步执行代码时,将突出显示即将执行的行”。在我的情况下突出显示:

       Application.EnableVisualStyles();

我应该选择另一条线吗?

然后,他们告诉选择停止调试以使代码编辑器可写。

如果我按照这个步骤操作,我看不到任何修改。我应该看到计算机逐行调试的新表单吗?我应该做另一件事吗?

如果我的问题看起来很愚蠢,我很抱歉。请理解我,我是C#的初学者。

非常感谢你!

3 个答案:

答案 0 :(得分:2)

您的问题与具体语言(标记中为C#)的较少关系以及有关Visual Studio环境的更多信息。

您按F11逐行执行 ,但指令说明,如果您想通过像这样的代码:

if(condition) { x++; DoSomething(); ...},按下F11 不会跳过所有这一行,但会执行

  • 首先if
  • x++
  • 之后
  • DoSomething(..)
  • 之后

并且所有这些都在代码中的同一行,但对于编译器,这些是不同的指令。

如果您想让编辑器可编辑,只需按Pause按钮即可。但是,点击Pause按钮,如果在当前函数的范围内没有任何lambda表达式,您将能够更改Pause中的代码,他们称之为功能Edit and Continue

希望这有帮助。

答案 1 :(得分:1)

我认为您需要一些有关调试工作原理的提示:

首先,您应该在要调试的代码中的某处插入一个简单的断点(Visual Studio中的 F9 )。假设您有一个Windows窗体应用程序,其中包含一个名为Form1的窗体。在这种形式中,你有一个按钮,当点击它时,它会做一些事情。你会有这样的事情:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        doSomething(...);
    }
}

要在单击按钮时停止执行程序(这样您可以确切地看到正在发生的事情),您可以在click事件上放置一个断点。一旦你有断点,每次触发click事件,程序都会停止,你将能够一步一步地运行它。

通过逐步运行,您可以查看变量的状态和存储的数据。因此,您可以找到代码开始的行为与您的预期不同(通常称为a bug)。

为此,您可以按程序( F10 )或指令逐步执行程序程序 F11 < /强>)。 F10将跳过函数调用,执行它们直到完成。 F11将进入函数调用,逐步执行每个指令。

答案 2 :(得分:0)

您应该标记一个调试点(或断点),然后开始调试您的程序。在我看来,不推荐逐行开始调试程序,你应该只调试抛出异常的部分,并为此在程序上标记断点(如何:http://msdn.microsoft.com/en-us/library/k80ex6de.aspx)。当程序到达该行时,调试器会根据需要逐行启动详细调试。