2012-12-22 50 views
2

當我以調試模式(F5)在VS2010中構建Windows Forms項目時,會出現一個標題爲「輸出窗口」的窗口。輸出窗口頂部有按鈕:「Find Message in Code」,「Next Message」和「Previous Message」。但是,它們總是灰顯(禁用)。這些如何啓用?VS 2010 - 輸出窗口 - 如何啓用「在代碼中查找消息」按鈕?

我在期待這些按鈕的意圖是幫助我找到導致消息出現在輸出窗口中的代碼行。例如,如果我在客戶端代碼中寫入Trace.WriteLine("MyMessage");,那麼在執行時會使MyMessage出現在Output Window;我想通過在輸出窗口中選擇一條消息並點擊「Find message in Code」,它將導航到包含「MyMessage」的客戶端代碼行。這將是一個光滑的功能,如果它啓用,我的假設是正確的。不幸的是,我無法啓用按鈕。

要回答這個問題,請解釋如何啓用和使用這些按鈕,以及是否應用最佳實踐(可選)。

以下是一些用作參考的源代碼。創建一個Windows Forms項目並進行您在下面看到的更改,您可以重現我正在嘗試的內容。

// program.cs 

using System; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace MyNamespace 
{ 
    internal static class Program 
    { 
     [STAThread] 
     private static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      try 
      { 
       throw new ApplicationException("MyMessage"); 
       Application.Run(new FormMain()); 
      } 
      catch (ApplicationException e) 
      { 
       Trace.WriteLine(e.ToString()); 
      } 
     } 
    } 
} 

JasonD的建議

我更換

Trace.WriteLine(e.ToString()); 

Trace.WriteLine("Program.cs" + "(" + 23 + ")" + " Some info"); 

末JasonD解決方案 - 結果:啓用按鈕

解決了這個問題。多麼出乎意料的答案。在這個強類型的時代,答案取決於用魔術信息格式化字符串。我對此感到驚訝。

回答

3

你需要輸出一些它可以解析的東西,它與編譯時看到的錯誤/警告消息基本相同,由"FILENAME(LINE) stuff"組成。

在C#中,這樣的事情:

 string file_= new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); 
     int line_= new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileLineNumber(); 
     System.Diagnostics.Trace.WriteLine(file_+ "(" + line_.ToString() + ") Some info"); 

(這是一個有點亂,但有C/C++的__FILE____LINE__宏沒有很好相當於我發現)

你可以整理一下,並將其包裝在一個函數中,但你需要獲取調用者的文件/行,而不是實際的函數本身:

static void traceFunc(string msg) 
    { 
     System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(true); 
     string file = trace.GetFrame(1).GetFileName(); 
     int line = trace.GetFrame(1).GetFileLineNumber(); 
     System.Diagnostics.Trace.WriteLine(file + "(" + line.ToString() + ") " + msg); 
    } 
+0

我明白了!謝謝JasonD,我會更新我的帖子以顯示我的解決方案 – sapbucket

+0

JasonD,你能提供一個顯示所需字符串格式以啓用按鈕的網址嗎?我一直在谷歌搜索,似乎無法找到一個網址。 – sapbucket

+0

沒有意識到 - 我只是複製VS自己的風格。 – JasonD

相關問題