一、
trace
巨集
當選擇了
debug
目標,並且
afxtraceenabled
變數被置為
true
時,trace
巨集也就隨之被啟用了。但在程式的
release
版本中,它們是被完全禁止的。下面是乙個典型的
trace
語句: …
int ncount =9;
cstring strdesc("total");
trace("count =%d,description =%s/n",ncount,strdesc); …
可以看到,
trace
語句的工作方式有點像
c語言中的
printf
語句,trace
巨集引數的個數是可變的,因此使用起來非常容易。如果檢視
mfc的源**,你根本找不到
trace
巨集,而只能看到
trace0
、trace1
、trace2
和trace3
巨集,它們的引數分別為0、
1、2、
3。
二、
assert
巨集
如果你設計了乙個函式,該函式需要乙個指向文件物件的指標做引數,但是你卻錯誤地用乙個檢視指標呼叫了這個函式。這個假的位址將導致視資料的破壞。現在,這種型別的問題可以被完全避免,只要在該函式的開始處實現乙個
assert
測試,用來檢測該指標是否真正指向乙個文件物件。一般來講,程式設計者在每個函式的開始處均應例行公事地使用
assertion
。assert
巨集將會判斷表示式,如果乙個表示式為真,執行將繼續,否則,程式將顯示一條訊息並且暫停,你可以選擇忽視這條錯誤並繼續、終止這個程式或者是跳到
debug
器中。下面一例演示了如何使用乙個
assert
巨集去驗證乙個語句。
void foo( char
p, int size )
這些語句不產生任何**,除非—
debug
處理器標誌被設定。
visual c
++只在
debug
版本設定這些標誌,而在
release
版本不定義這些標誌。當—
debug
被定義時,兩個
assertions
將產生如下**:
//assert( p != 0 ); do
while(0);
//assert((size
〉= 100); do
while(0);
do-while
迴圈將整個
assertion
封裝在乙個單獨的程式塊中,使得編譯器編譯起來很舒暢。
if語句將求取表示式的值並且當結果為零時呼叫
afxassertfailedline()
函式。這個函式將彈出乙個對話方塊,其中提供三個選項「取消、重試或忽略」,當你選取「重試」時,它將返回
true
。重試將導致對
afxdebugbreak()
函式的呼叫,從而啟用偵錯程式。
do-while
迴圈將整個
assertion
封裝在乙個單獨的程式塊中,使得編譯器編譯起來很舒暢。
if語句將求取表示式的值並且當結果為零時呼叫
afxassertfailedline()
函式。這個函式將彈出乙個對話方塊,其中提供三個選項「取消、重試或忽略」,當你選取「重試」時,它將返回
true
。重試將導致對
afxdebugbreak()
函式的呼叫,從而啟用偵錯程式。
afxassertfailedline()
是乙個未正式公布的函式,它的功能就是顯示乙個訊息框。該函式的源**駐留在
afxasert.cpp
中。函式中的—
file
—和—line
—語句是處理器標誌,它們分別指定了源檔名和當前的行號。
afxassertfailedline()
是乙個未正式公布的函式,它的功能就是顯示乙個訊息框。該函式的源**駐留在
afxasert.cpp
中。函式中的—
file
—和—line
—語句是處理器標誌,它們分別指定了源檔名和當前的行號。
三、
verify
巨集
因為assertion
只能在程式的
debug
版本中起作用,在表示式中不可以包含賦值語句、增加語句(++)或者是減少語句(--),因為,這些語句實際改變資料。可有時你可能想要驗證乙個能動的表示式,使用乙個賦值語句。那麼就到了用
verify
巨集來替代
assert
。例如:
void foo(char
p, int size )
在debug
模式下,
assert
和verify
是一回事,但是在
release
模式下,
verify
巨集仍然測試表示式而
assertion
卻不起任何作用。可以說,在
release
模式下,
assert
語句被刪除了。
請注意,如果你在乙個
assert
語句中錯誤地使用了乙個能動的表示式,編譯器將不做任何警告地忽略它。在
release
模式下,該表示式就會被無聲息地刪除掉,這將會導致程式的錯誤執行。由於
release
版的程式通常不包含
debug
資訊,這類錯誤將很難被發現。
VC除錯資訊輸出 TRACE巨集
trace巨集對於vc下程式除錯來說是很有用的東西,有著類似printf的功能 該巨集僅僅在程式的debug版本中出現,當release的時候該巨集就完全消失了,從而幫助你除錯也在release的時候減少 量。使用非常簡單,格式如下 trace ddddddddddd trace wewe d 33...
vc中 T L巨集的用法
1 在字串前加乙個l作用 如 l 我的字串 表示將ansi字串轉換成unicode的字串,就是每個字元占用兩個位元組。strlen asd 3 strlen l asd 6 2 t巨集可以把乙個引號引起來的字串,根據你的環境設定,使得編譯器會根據編譯目標環境選擇合適的 unicode還是ansi 字...
VC中TRACE巨集的用法
trace巨集對於vc下程式除錯來說是很有用的東西,有著類似printf的功能 該巨集僅僅在程式的debug版本中出現,當release的時候該巨集就完全消失了,從而幫助你除錯也在release的時候減少 量。使用非常簡單,格式如下 trace ddddddddddd trace wewe d 33...