2013-10-23 166 views
0

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

+0

欢迎SO!你能澄清你的意思吗?找出每一个执行路径?这是你给的任务吗?或者你是否正在这样做以更熟悉该软件?您是否想要确定应用程序的[圈复杂度](http://en.wikipedia.org/wiki/Cyclomatic_complexity)? – Derek

+5

与团队成员交谈时,他们已经知道如何调试应用程序。我们没有。不要害羞地向你的团队成员寻求帮助,他们*希望*尽快加快速度。要求他们的帮助并不会使你听起来不够健全,这使你听起来渴望学习,并成为团队的有效成员。这是好事。 –

回答

1

欢迎来到SO!更多的信息会有帮助。什么是程序在做什么,你想解决什么问题,等等......

只要跟踪执行路径,有很多方法可以做你想做的事情。只需几点建议:

  • 记录启动输入并使用相同的输入在开发环境中调试程序。取决于其他外部依赖项可能无法工作。
  • 将每个方法的条目记录到文件中。这会让你看到执行路径。这对于实现老式的方式非常不利,但是您可以使用免费版本PostSharp中的OnMethodBoundaryAspect之类的代码编写一次记录代码,并根据给定方法的需要重用它。
  • 使用诸如Gibraltar之类的仪器平台来了解正在发生的事情。
  • 使用Trace Listener跟踪您的事件执行情况。看看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
结束语 了

+0

感谢您的接受。我很想知道更多关于你的问题和你所采取的方法。让我们知道你是否有时间。 –

相关问题