source insight是一個出色的程序編輯器和代碼瀏覽器,利用好它會給編寫和閱讀源代碼帶來極大的方便。想要配置好source insight可不是一件輕鬆的事,我比較喜歡深色背景有利於保護眼睛,但同時也必須更改代碼顏色來匹配背景色,source insight的很多窗口、選項都可以指定字體、顏色,實在讓人犯暈!最麻煩的是源碼窗口的配置了,這裏簡單提一下,source insight的最終配色是由Style Properties決定的(右鍵菜單-->Style Properties)
左邊一欄是風格名,選中的是當前光標下的風格名,這些風格之間是有繼承關係的,可以看到有很多=號,這代表繼承了父風格(Parent Style),pick則是讓你單獨設置,最右邊還可以導入、導出、添加風格等。所有風格最終由Default Text繼承而來的,Font Name是灰的,它由Document Options(Alt+T)中的當前文檔類型Screen Fonts決定的(所以不同的文件類型,如C,Python,Java它們的字體可以不同的)。Background是由Options-->Preferences-->Colors中的Window Background決定的,其實Default Text的背景就是源碼窗口的背景。Foreground也一樣,pick了它等於設置了Options-->Preferences-->Colors中的Default Text。我也暈了,汗……
正是這些風格讓source insight五彩繽紛:
還要提一句,sourceinsight中還有一個Draft View(Alt+F12),在這個模式中會忽略Style Properties中字體部分設置,統一改用Draft View(見左邊欄)中設置的字體。我製作了一個背景爲深黑色,字體爲Fixdays的配置文件(包含其它設置)讓大家下載:http://download.csdn.net/source/2480193
羅嗦了半天,WRK還沒說呢,關於如何使用請看中文官網的文章。source insight分析完WRK後大家肯定會發現連IRP、DEVICE_OBJECT這樣的結構都沒法解析,其實罪魁禍首就是那些函數宏,比如_IRP前面的DECLSPEC_ALIGN(),如果用我前面的配置文件調過顏色的話一眼就可以看出,source insight把它當成了Declare Function了,這些宏大多起修飾作用並無實質影響,但一樣的宏在MS的代碼中數不勝數(如非vc6的crt,頭文件,連printf都解析不來)。可以看看這個帖子http://topic.csdn.net/u/20100613/16/b32fc799-c7f2-4648-9d91-cc933f9ffeb8.html,我一開始以爲是BUG,但source insight提供瞭解決方案,那就是Token Macro。Token Macro就是source insight的預處理器,它可以像C預處理器那樣展開宏,正是爲了對抗那些混淆source insight的宏而設計的。Token Macro是一個以.tom結尾的文件,對C/C++來說是C.tom,只要把它放在source insight創建工程的目錄下,就可以立馬起作用(不用重新parse一遍,不過有些時候還是parse一遍好),它會跟程序目錄下的全局C.tom結合去展開宏。Token Macro編寫非常簡單,跟#define語法差不多(但沒它強大)。大家看看我針對WRK做的C.tom就明白了,由於大多數函數宏只起修飾作用不會影響代碼的解析,所以我把大多數宏做成了空宏。
下載:http://download.csdn.net/source/2480426
另外條件編譯也是一個可能讓source insight分析出錯的地方,默認它會分析所有的條件分支。但碰到這樣的情形就糟糕了:
- void MyFunc
- #ifdef XYZ
- (int param1,int param2)
- #else
- (long param1,long param2)
- #endif
- {
- …
- }
- void DoThing(
- int param1,
- #ifdef ABC
- int param2)
- #else
- int param2, param3)
- #endif
很不幸,WRK中也有這樣的問題,這個可以通過添加Condition的方法解決。
我在Global Conditons中添加了;
- MIDL_PASS 0
- __midl 0
Project-Specific conditions添加了:
- _AMD64_ 0
- _MSC_VER 1300
- _NDIS_ 1
- _NTDDK_ 1
- _NTIFS_ 1
- _WIN64 0
- _X86_ 1
這樣不符合條件的分支代碼會不進行解析,用灰色表示。
另外,source insight還有一個小BUG,用typedef定義函數指針類型時,當函數指針返回類型(也用typedef定義)和函數指針類型定義在同一行時,函數指針返回類型無法解析。如:
- typedef
- NTSTATUS (*WMIENTRY)(
- ……);//NTSTATUS無法解析
- typedef NTSTATUS
- (*WMIENTRY)(
- ……);//NTSTATUS可以解析
還有typedef定義函數指針類型時,函數的參數也都是不染色!這個問題似乎沒有什麼解決方法,用Custom Parsing也無濟於事。
還有一種情況會讓source insight解析出錯,比如IopfCompleteRequest、NtQueryEaFile函數,在函數名和{之間有一段多行宏,這樣source insight就解析的有問題了。這應該是個BUG,不知道大家有什麼解決辦法,我迫不得已只好挪動一下宏的位置!
現在幾乎所有的問題都解決了,代碼中都染上顏色了吧,呵呵……