用C++而不是C(3)使用跟蹤語句

用C++而不是C(3)使用跟蹤語句

原文:用C++而不是C(3)使用跟蹤語句
使用跟蹤語句
31.OutputDebugString API函數,MFC AfxOutputDebugString 宏和MFC AfxDumpStack 函數在所有版本中均被編譯,但是其他所有的跟蹤語句僅在定義了_DEBUG符號時,才能被編譯。
32.跟蹤語句不能包含程序代碼或對程序代碼有間接的影響作用。跟蹤語句的目的是向程序員提供信息,而不是用戶。
33.與斷言的區別:
(1)跟蹤語句是無條件的。斷言是有條件的布爾語句,而跟蹤語句卻總可以執行。
(2)跟蹤語句不直接顯示bug。斷言用於顯示出bug,而跟蹤語句用於顯示程序執行和變量值。
(3)跟蹤語句可以被隨便的忽略。默認情況下,斷言打斷程序的執行,並彈出一個消息框等待用戶或程序員的響應;跟蹤語句則將信息輸出到調試窗口或文件中,於是很容易被程序員忽略。這種特點使得跟蹤語句對於整體上程序的檢驗和程序的警告是非常理想的。一個很好的類比是:斷言對編譯器錯誤,跟蹤語句對編譯器警告。
34.void OutputDebugString(LPCTSTR traceText),這個windows API函數是Windows的一部分,因此它一直是有效的,這使得這個函數適用於在程序啓動和結束過程中的跟蹤。與此相反,Visual C++的C運行時刻函數庫和MFC跟蹤語句並不適用跟蹤程序啓動和結束,因爲它們僅在加載了它的DLL之後纔有效。如果你只想在調試版本中使用OutputDebugString,可以使用下面的宏來實現:
#ifdef _DEBUG
#define OutputTranceString(text) OutputDebugString(text)
#else
#define OutputTranceString(text) ((void) (0))
35.ANSI C++運行時刻函數庫中並沒有跟蹤語句,但是它有用於跟蹤的標準字符模式的輸出流,具體有:C語音的stderr流和C++語言的cerr 和 clog流。stderr不需要緩衝區,cerr使用單位緩衝,clog使用完全緩衝。
36.使用MFC Tracer工具來控制MFC本身輸出的跟蹤語句
37.跟蹤語句的有效使用需要一個策略,太多的跟蹤消息會降低它們的有效性。如下是兩個基本的跟蹤語句策略:
 (1) 調試器補充策略:使用跟蹤語句補充由交互式調試器提供的信息
 (2) 調試器代替策略:使用跟蹤語句代替交互式調試器
38.使用綜合診斷跟蹤語句能讓你查看程序中最引入注意的事件;使用特殊診斷跟蹤語句來解決一個特殊的問題;一旦確定的問題已經解決,將用於特殊診斷的跟蹤語句刪除。
39.在交互式調試器不能解決問題的情況下,如:調試服務器、跨機器調試(如DCOM)、誇程序設計語言調試遇到編程語句、跨進程調試遇到進程、調試線程、遠程調試、遇到那些因爲海森堡不確定原理而很難調試的程序動作。使用跟蹤語句解決問題。
40.跟蹤調試技巧
 (1)使用DebugView實用程序
 (2)考慮提供一個重定向輸出設置
 (3)處理長字符串
 (4)處理大量的跟蹤輸出
 (5)產生調試報告
 (6)輸出獨立行,而且不要忘了新行(newline)字符
 (7)別忘了檢查跟蹤語句
 注意:每當你的程序中有錯誤而你想得到更多信息的時候,你應該去查看一下跟蹤消息
 
發佈了39 篇原創文章 · 獲贊 8 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章