source insight

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五彩繽紛:

SI

還要提一句,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分析出錯的地方,默認它會分析所有的條件分支。但碰到這樣的情形就糟糕了:

  1. void MyFunc 
  2. #ifdef XYZ 
  3.     (int param1,int param2) 
  4. #else 
  5.     (long param1,long param2) 
  6. #endif 
  7.     … 
  8. void DoThing( 
  9.    int param1, 
  10. #ifdef ABC 
  11.    int param2) 
  12. #else 
  13.    int param2, param3) 
  14. #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定義)和函數指針類型定義在同一行時,函數指針返回類型無法解析。如:

  1. typedef  
  2. NTSTATUS (*WMIENTRY)( 
  3. ……);//NTSTATUS無法解析 
  4. typedef NTSTATUS 
  5. (*WMIENTRY)( 
  6. ……);//NTSTATUS可以解析 

還有typedef定義函數指針類型時,函數的參數也都是不染色!這個問題似乎沒有什麼解決方法,用Custom Parsing也無濟於事。

還有一種情況會讓source insight解析出錯,比如IopfCompleteRequest、NtQueryEaFile函數,在函數名和{之間有一段多行宏,這樣source insight就解析的有問題了。這應該是個BUG,不知道大家有什麼解決辦法,我迫不得已只好挪動一下宏的位置!

現在幾乎所有的問題都解決了,代碼中都染上顏色了吧,呵呵……

SI

SI

SI

SI

 

轉載:http://blog.csdn.net/better0332/article/details/5689193

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章