[工具介紹] Debug API 與 DebugView
相信很多像我一樣的菜鳥 Programmer 一定都會有在 Debug 上痛苦的經驗,從最笨的 print 到使用 Visual Studio 的Debug –> F10 –> F11 一步步的找到問題點。可是如果是在無法使用 print 的 Application 上呢? (例如寫 Windows PHone或 Windows 8 的 Metro Style Apps)那要怎麼 Debug阿..
在這之前,我還是用了笨笨的方法,一步一步的去 trace code 。不過,現在我又多發現了一個方法: 只要是在 visual studio 下都可使用 Debug 這個 API 來列印出我們想要的訊息,而這個訊息呢就會在執行程式時秀在 Output 的視窗中。我試過,無論你是使用 Console Application, Widnows Form Application, 或是 Windows Phone Apps 甚至 Windows 8 Metro Apps 都是有效,連 Remote Debug 也照樣 work(好像在說廢話)。只可惜我所要介紹的 debugview 目前在 windows 8 Metro Style apps 上還無法作用,不過我覺得以後應該會有新版支援才是。
有了 Debug API 這麼方便的工具之後,是不是覺得滿足了呢? 當然不是阿,還有另一件更酷的事情。那就是,如果你的程式到了別人的電腦上,也就是再沒有 source code 也沒有 Visual Studio 的狀況下,照樣可以做 debug。
其方法就是在你的程式碼中需要秀出 Debug 訊息的地方使用 Debug 這個 API,接著再開啟 DebugView 這支小程式,然後你就會發現許許多多的 log 跑了出來。那是因為 DebugView 會去抓取 Windows 上所有應用程式的 Debug Message,所以會建議在列印 debug 訊息時能夠加上自己的 tag ,這樣就可以使用 DebugView 上的 Filter 功能來過濾掉一些不想要看的訊息。
在下圖 DebugView 的主畫面中可以看到有很多的訊息,其大部分都不是我們所要的。
此時,我們可以使用 Filter 的功能來過濾掉一些不要的訊息。我們可以點選 DebugView 上的 符號或者以快速鍵 Ctrl+L 來建立我們的過濾條件。在這裡我是以[MyDebugMessage]當作我的 Tag 。
這時候再按 或 Ctrl+X 來清除目前的 debug message,接著在執行我們的程式(使用 Visual Studio 或 執行檔皆可。我們就可以看到我們程式的執行狀況了。
最後補充一點:
- 使用C++來開發時,Debug的API是 OutputDebugString 系列,詳細的使用方式可參考
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362(v=vs.85).aspx
上有更進一步的說明。如果是開發 Windows Phone - 使用 C# 開發時,無論是開發 Windows 8 Apps 或 Windows Phone Apps ,都是使用
Debug.WriteLine(“我是debug message”);
這個API,指不過目前好像不能使用 debug view 來觀察期 debug message 。
Reference:
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx