小技巧偽符號覆蓋
(時光不顧我)。:。如果你想投資賺錢 我們在調用WINDOWS函數的時候,經常要在后面加一條GetLastError()來取得函數出錯的錯誤碼以及原因,如果在調試的狀態中,WINAPI出錯了,那我們又要停下來,加一句GetLastError(),然后再跑。這樣調試起來很不方便。其實我們可以使用VC里的一些固定符號來進行調試。
下面說一下第一個@ERR,我們等函數執行完,并確定它出錯了,那我們就可以在VC 的 WATCH窗口里加上@ERR,那我們就馬上可以看到出錯的錯誤碼了。如果我們還想知道錯誤碼的意思,那我們可以加上@ERR,hr,這樣錯誤碼和出錯信息都清清楚楚的顯示出來了。
這個調試方法是不是很棒?其實這種偽符號還有一個用處,在我們調試的過程中,我們可以利用這些偽符號設置斷點停止的條件。例如下面的兩行代碼:
FILE *fp = fopen(\"c:\\\\a_file_that_does_not_t\", \"r\");
int nT = 123;
我們把斷點加在第二行上,然后按CTRL+B(或者ALT+F9或者Edit-Breakpoints),選中這個斷點,然后點Condition,輸入@ERR==2,按下 F5 來調試我們的程序,程序就會在@ERR為2的時候停在了斷點上。如果我們不想它為2的時候停止,我們就輸入@ERR!=2,爽吧,這種功能可以說有很多可應用的地方,具體就等各位去實戰了。
除了@ERR之外,還有很多偽符號,例如@TIB,這是取得線程ID的符號,這個符號在多線程程序調試中可以發揮很大的作用。當我們有一個函數是被多個線程調用的,那當我們在這個函數里設一個斷點后,無論哪個線程調用這個函數,都會停止在這個斷點上。這個時候,如果我們想知道是哪個線程調用了它,我們就可以在WATCH窗口里寫下@TIB,就會看到類似于這種數字了。這個就是線程ID了(也可以是這種格式:0x7ffa6000),我們同樣可以在斷點管理的Condition 那里寫上@TIB==0x7ffa6000,這樣在其他線程調用這個函數時候不會停止,只有ID為0x7ffa6000的線程調用了,才會停止。
上面介紹了兩個偽符號,其實還有很多,下面給出一個表格供各位參考:
Complete list of pseudoregistersPseudoregister
Description
@ERR
Last error value; the same value returned by the GetLastError() API function
@TIB
Thread information block for the current thread; necessary because the debugger doesn\'t handle the \"FS:0\" format
@CLK
Undocumented clock register; usable only in the Watch window
@EAX, @EBX, @ECX, @EDX, @ESI, @EDI, @EIP, @ESP, @EBP, @EFL
Intel CPU registers
@CS, @DS, @ES, @SS, @FS, @GS
Intel CPU segment registers
@ST0, @ST1, @ST2, @ST3, @ST4, @ST5, @ST6, @ST7
Intel CPU floating-point registers
[Table from \"Debugging Applications\" by John Robbins]
本文章參考了Code project 的一篇:An introduction to debugging in MSVC++ using Pseudoregisters
查看本文來源
武漢治療前列腺炎醫院兒童助消化藥大全
長沙陰道炎治療哪家好