有没有办法知道C#Windows窗体应用程序启动过程中发生了什么

时间:2011-12-27 11:14:03

标签: c# .net debugging

我有一个带有Windows窗体输出类型的C#应用​​程序。当我从bin / Debug或bin / Release文件夹启动它时,它工作正常(我使用Visual Studio Express 2008开发它)。但是当我将该应用程序从Release文件夹复制到另一个文件夹时,我启动它,发生了一些奇怪的事情。有时它加载的时间太长(在窗口显示之前),甚至加载时,位于“组”框中的文本区域也不可见!

我不知道为什么会这样,但我想试着看看在app加载期间发生了什么。 有没有办法知道C#Windows窗体应用程序启动过程中发生了什么?

更新 我发现TextArea消失了,应用程序加载有一些延迟,因为我将控制台输出重定向到该文本区域:

public class TextBoxStreamWriter : TextWriter
{
    TextBox _output = null;
    delegate void SetTextCallback(char value);


    public TextBoxStreamWriter(TextBox output)
    {
        _output = output;
    }

    public override void Write(char value)
    {
        if (MainForm.closed)
            return;
        base.Write(value);
        if (_output.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(Write);
            _output.Invoke(d, new object[] { value });
        }
        else
        {
            _output.AppendText(value.ToString());
        }

    }

    public override Encoding Encoding
    {
        get { return System.Text.Encoding.UTF8; }
    }
}

如果我评论这两行,它就可以了!:

//_writer = new TextBoxStreamWriter(logTextArea);
//Console.SetOut(_writer);

但我仍然不明白为什么!

3 个答案:

答案 0 :(得分:3)

在抛出错误的行之前,请输入以下代码:

System.Diagnostics.Debugger.Launch()

从获得异常的位置运行代码,当它到达此行时,它将为您提供将进程附加到调试器的机会。

答案 1 :(得分:1)

是你的申请吗?应用程序的.config文件中可能存在一些配置设置, 例如,一个指示是否在TextBox中显示Text的设置。

将.config文件与.exe一起复制,看看会发生什么。

编辑:

您可以使用SysInternals中的Process Monitor来监控应用程序的操作

或者,Rohitab API monitor

两者都是监控\调试应用程序的绝佳工具。

答案 2 :(得分:1)

如果你足够快,你可以从它发生故障的位置启动应用程序,切换到VS,转到Debug - >附加到流程。找到列表中的进程,快速连接到该进程,然后按暂停按钮并开始单步执行代码。

可能需要一些练习,但我通常可以很快地完成。