2013-10-23 164 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

感謝您的接受。我很想知道更多關於你的問題和你所採取的方法。讓我們知道你是否有時間。 –

相關問題