0

我有一个发布版本的应用程序(需要一些批处理文件才能安装和运行)。我有一份源代码副本。为了查看每个事件的路径(了解程序),我现在正在做的是安装应用程序,同时构建我的源代码,然后复制所有的 dll 和 pdbs(以便调试器可以映射到我的代码)从我的调试文件夹到程序文件,然后运行应用程序。由于我在源代码中放置了 diagnostics.debugger.launch,因此我已经能够调试我的版本。我这样做是因为,我无法直接从我的 bin\debug 执行和测试项目,因为它有一些依赖项(批处理文件参数),因此我正在安装已发布的版本。我必须找出我的代码中的每个事件路径(因为我是这家公司的新手,也是 .NET)。

4

1 回答 1

0

欢迎来到 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
结束

于 2013-10-23T22:01:55.573 回答