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五彩缤纷:



还要提一句,source  insight中还有一个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/...33f9ffeb8.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.     …  
   9. }  
  10. void DoThing(  
  11.     int param1,  
  12. #ifdef ABC  
  13.     int param2)  
  14. #else  
  15.     int param2, param3)  
  16. #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,不知道大家有什么解决办法,我迫不得已只好挪动一下宏的位置!

现在几乎所有的问题都解决了,代码中都染上颜色了吧,呵呵……









同时发表于:http://blog.csdn.net/better0332/arch...3/5689193.aspx
上传的附件 SI.rar