如何除錯DX程式

2021-09-08 07:44:39 字數 2592 閱讀 8091

如果安裝了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 通過...