程序調試的方式有很多,盡管在很多時候我們首推設置斷點、單步跟蹤、跟蹤變量,在Visual Studio系列工具中尤其如次,但是相信大多數人也都會通過調用printf、cout、Console.WriteLine()……輸出一些信息來跟蹤自己程序的執行,解決問題。
在用ASP.Net開發網站時,我非常希望能隨時觀察程序的執行流程、某些變量的值等等,雖然通過設置斷點也能做到,但是總感覺很耗時麻煩。通過下面的代碼我們可以很方便將這些信息輸出到Visual Studio IDE的輸出窗口中,跟蹤程序的執行情況,也可以將這些信息單獨輸出到一個窗格中,從而於系統產生的編譯、警告信息相分離。
添加下面兩個引用
EnvDET
EnvDET80
using EnvDTE;
using EnvDTE80;
class TraceMessage
...{
//類的唯一實例
private static TraceMessage _instance = null;
//Visual Studio的一個應用實例
private EnvDTE80.DTE2 _dte2 = null;
private TraceMessage()
...{}
//獲取類的唯一實例
public static TraceMessage GetInstance()
...{
if(_instance == null)
...{
_instance = new TraceMessage();
}
return _instance;
}
//設置表示Visual Studio IDE的應用實例
public void SetVisualStudioInstance()
...{
//獲取當前正在運行的Visual Studio IDE的一個應用實例
_dte2 = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.8.0");
}
//向輸出窗口輸入新的信息
public void WriteMessageToOutputWindow(string msg)
...{
OutputWindow ow = _dte2.ToolWindows.OutputWindow;
&nbs
p; //獲取輸出窗口中的"生成"窗格
OutputWindowPane owP = ow.OutputWindowPanes.Item("生成");
owP.Activate();
//這裡也可以創建新的窗格
//最好將添加窗格的語句單獨拿出去,否則每次寫信息都會單獨創建一個窗格
//OutputWindowPane owP = ow.OutputWindowPanes.Add("My Tracing Message");
//owP.Activate();
//輸入信息
owP.OutputString(msg);
}
} 上面的代碼還存在一個缺陷,如果你同時打開多個Visual Studio進行工作,這些跟蹤信息最終都會寫入其中某個IDE的輸出窗口中,而不是寫入它們各自的。另外在Visual Studio工具中通過“網站—〉ASP.NET配置”我們也可以啟動ASP.Net自帶的跟蹤系統,這時候信息會被記錄到一個指定的文件中。