繁体   English   中英

在Visual Studio发布应用程序中进行调试

[英]Debugging in visual studio release application

我有该应用程序的发行版(需要一些批处理文件才能安装和运行)。 我有一份源代码。 为了查看每个事件的路径(以了解程序),到目前为止,我正在做的是安装应用程序,同时构建我的源代码,然后复制所有dll和pdbs(以便调试器可以映射到我的代码)从调试文件夹到程序文件,然后运行该应用程序。 当我在源代码中放置了diagnostics.debugger.launch时,我已经能够调试我的版本。 我这样做是因为,我无法直接从bin \\ debug中执行和测试项目,因为它具有某些依赖项(批处理文件参数),因此我正在安装发行版。 我必须找出我代码中的每个事件路径(因为我是这家公司以及.NET的新手)。 有没有更简单的方法(例如intellitrace ...对我来说有帮助吗?)谢谢。

欢迎来到SO! 更多信息会有所帮助。 程序在做什么,您要解决什么问题,等等。

至于跟踪执行路径,有很多方法可以执行所需的操作。 只是一些建议:

  • 记录启动输入,并使用相同的输入在开发环境中调试程序。 可能无法工作,具体取决于其他外部依赖项。
  • 将每个方法的条目记录到文件中。 这将使您看到执行路径。 这对于实现老式方法非常有帮助,但是您可以使用免费版本的PostSharp中OnMethodBoundaryAspect之类的东西来编写一次日志代码,并根据需要在给定方法上重用它。
  • 使用直布罗陀这样的仪器平台,可以了解发生了什么。
  • 使用跟踪侦听器跟踪事件执行。 查看Trace.Listeners.Add()。 创建侦听器后,可以调用Trace.Write或Trace.WriteLine将信息添加到跟踪中。 这涉及到很多手动将跟踪信息输入到您的方法中的方法,但是如果您不顾一切,可以这样做。 我更喜欢像PostSharp这样的面向方面的解决方案,但是由于某种原因,您可能没有这种选择。

快速示例:(再次,不建议使用此方法...)

using System.Diagnostics;
using System.IO;

namespace TrackingExecutionPath
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var myFile = File.Create(@"C:\Application.log");
            Trace.Listeners.Add(new TextWriterTraceListener(myFile));

            Trace.WriteLine("Starting up");
            var tracer = new Tracer();
            tracer.TraceMeOnce();
            Trace.WriteLine("Wrapping up");

            Trace.Flush();
        }

    }

    internal class Tracer
    {
        public void TraceMeAgain()
        {
            Trace.IndentLevel++;
            Trace.WriteLine("Entering TraceMeAgain");
            Trace.WriteLine("Doing some work.");
            Trace.WriteLine("Exiting TraceMeAgain");
            Trace.IndentLevel--;
        }

        public void TraceMeOnce()
        {
            Trace.IndentLevel++;
            Trace.WriteLine("Entering TraceMeOnce");
            Trace.WriteLine("Doing some work.");
            TraceMeAgain();
            Trace.WriteLine("Exiting TraceMeOnce");
            Trace.IndentLevel--;
        }
    }
}

样本输出:

启动
输入TraceMeOnce
做一些工作。
输入TraceMeAgain
做一些工作。
退出TraceMeAgain
退出TraceMeOnce
包起来

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM