如果安裝了directx sdk,就可以通過sdk中的directx control panel來設定除錯選項,這個工具位於開始-程式-microsoft directx sdk(june 2010)-directx utilities中,也可以在sdk的安裝目錄下找到,在我這裡是c:\program files\microsoft directx sdk (june 2010)\utilities\bin\x86。執行後如下圖。
由於我機器上安裝的是dx9,所以我們只看有關dx9的設定
debug output level – 這是除錯輸出的級別,級別越高,輸出的除錯資訊越豐富,選擇more
debug/retail d3d9 runtime – 這是選擇除錯所用的庫型別,我們選擇use debug version of direct3d9
debugging –select all
注意:software only這個選項不要選,否則的話在建立d3d device的時候就不能使用硬體裝置了(d3ddevtype_hal)。
說一下break on d3d9 error選項,如果某個d3d函式呼叫出現錯誤,那麼程式會立即斷下,你將會看到如下模樣的對話方塊。
單擊break按鈕中斷程式,然後開啟output視窗,會看到如下資訊,這種資訊只有在使用debug版本的sdk時才會有,所以在開發的時候我 們盡量使用debug版本,在發布的時候在轉換為release版本。下面的資訊詳細描述了錯誤的原因,在clear函式中設定了清除z-buffer的 選項,但實際上我們根本沒有建立z-buffer,所以清除失敗了。output視窗裡面的資訊是最全面,最直觀的。應該盡可能參考此處的資訊。
使用 #define d3d_debug_info 巨集可以產生更加豐富的除錯資訊,需要注意的是,這個巨集必須出現在d3d9.**件之前,dxut程式都自動啟用了這個巨集。在未啟用這個巨集的時候,我們的到的資訊常常是下面這樣的
而在啟用了這個巨集之後,乙個物件的所有屬性都可以在除錯的時候檢視了
將\\hkey_local_machine\\software\\microsoft\\direct3d\\ d3d9debugging\\enablecreationstack設定為1,還可以檢視物件建立過程中的呼叫棧,這樣做會導致程式的速度很慢,但是 有助於發現資源洩漏。設定了這個值以後,在watch視窗中會多出來乙個變數creationcallstack,裡面記錄的呼叫棧的內容,如下圖。
dxerr.h 檔案中提供了幾個函式,可以用來輸出error或者trace資訊,這幾個函式如下,需要注意的是,有幾個函式只有在debug模式下才可用
hresult hr ;
hr =
g_pd3ddevice
->
clear(0,
null, d3dclear_target
|d3dclear_zbuffer,
d3dcolor_xrgb(0,
0,0),
1.0f, 0
); if
(failed(hr))
dxtrace_err_msgbox會輸出如下形式的錯誤框,資訊非常豐富,包含錯誤所在的檔案,錯誤所在的行,錯誤碼及其描述,對於定位及解決問題非常有幫助。
需要注意的是如果在dx control panel中的debugging選項中開啟了break on d3d9 error,那麼這個對話方塊有時候將不會被顯示,因為程式優先選擇顯示了程式中斷對話方塊。dxtrace_err和dxtrace_msg作用相同,都是 向output視窗輸出錯誤資訊,而不顯示錯誤框。
全屏程式除錯有兩種方法
1 轉換為視窗模式進行除錯
2 使用雙屏,要記得在dx的control panel裡面將雙屏除錯選項開啟
使用該方法可以新增多個symbol server,新增乙個名為_nt_symbol_path的系統環境變數,該變數的值遵循如下語法格式:
srv*[local cache]*[private symbol server]*
乙個常用的寫法如下
=the end=
如何除錯NesC程式
在tinyos1.x和2.x中,我們可以通過呼叫c語言的printf來對程式進行除錯,很多人對這個並不了 解,卻一味的使用leds來顯示程式的執行流程,但是如何看到變數的轉化,恐怕乙個小小的leds無 法實現的吧?所以leds的使用只限於檢視程式流程,對大型的模組是否程式進入執行,對邏輯糾錯 可能方...
如何使用gdb除錯程式
gdb 這就算是進入了gdb環境了。那麼我們使用命令run執行一下看看結果如何?starting program home zhxfan debugme program received signal sigsegv,segmentation fault.0x08048341 in index to...
如何除錯你的C 程式
歡迎來到c 的奇妙天空,在這裡,希望你能獲得你想獲得的東西,我們真誠希望能給你帶來巨大的幫助,帶你進入另外乙個廣闊的空間。come on.follow me and then u can win 同linux下的gnu c 工具中的gdb類似,c 提供了乙個命令列除錯程式 cordbg.exe 通過...