最近在用Source Insight(以下簡稱SI)閱讀代碼的過程中,發(fā)現(xiàn)Linux內(nèi)核的條件編譯太多了,很影響閱讀效率。探索了一下SI的界面,發(fā)現(xiàn)在“Project->Project Settings...->Conditional Parsing->Conditions...”是有條件解析的配置的,且支持以特定的xml格式導(dǎo)入預(yù)編譯宏。于是寫了一個轉(zhuǎn)換腳本,把Linux內(nèi)核的.config配置文件轉(zhuǎn)換成SI的.conditions.xml配置文件。導(dǎo)入之后就可以讓SI不解析實際上沒有被編譯進(jìn)去的內(nèi)核代碼,而且會以特定的格式顯示無用代碼,減少了閱讀代碼時的干擾。最終效果,如下圖: 按下面的指南操作,你就可以達(dá)到一樣的效果。 1、轉(zhuǎn)換腳本“l(fā)kc2sicx.py”所做的工作用“make menuconfig”修改內(nèi)核配置后會生成.config文件。該配置文件中典型的配置項有如下幾種: # CONFIG_LOCALVERSION_AUTO is not set ① 未配置的配置項
CONFIG_PROC_KCORE=y ② 選中的配置項
CONFIG_NF_NAT_IPV4=m ③ 選中并要求編譯成模塊的配置項
CONFIG_DEFAULT_TCP_CONG="cubic" ④ 字符串配置項
CONFIG_SPLIT_PTLOCK_CPUS=4 ⑤ 數(shù)字配置項
再來看看SI的配置文件格式。在SI的“Conditional Parsing”界面,添加了如下的3個配置: “Export...”這個配置,產(chǎn)生的xml配置文件格式如下: <?xml version="1.0" encoding="utf-8"?>
<SourceInsightParseConditions
AppVer="4.00.0084"
AppVerMinReader="4.00.0019"
>
<ParseConditions>
<Defines>
<define id="a" value="1" />
<define id="b" value="0" />
<define id="c" value="" />
</Defines>
</ParseConditions>
</SourceInsightParseConditions>
xml格式較為簡單。只要進(jìn)行如下轉(zhuǎn)換即可, # CONFIG_LOCALVERSION_AUTO is not set => <define id="CONFIG_LOCALVERSION_AUTO" value="" />
CONFIG_PROC_KCORE=y => <define id="CONFIG_PROC_KCORE" value="1" />
CONFIG_NF_NAT_IPV4=m => <define id="CONFIG_NF_NAT_IPV4" value="1" />
CONFIG_DEFAULT_TCP_CONG="cubic" => <define id="CONFIG_DEFAULT_TCP_CONG" value="cubic" />
CONFIG_SPLIT_PTLOCK_CPUS=4 => <define id="CONFIG_SPLIT_PTLOCK_CPUS" value="4" />
.config中未配置的項也要生成是因為,SI默認(rèn)是忽略條件編譯的宏的。如果不顯示說明未定義這個宏,SI在解析代碼的時候就會忽略條件編譯指令,直接解析到宏內(nèi)部的代碼[1]。 2、下載并使用轉(zhuǎn)換腳本下載 >> lkc2sic_v1.0.zip 下載之后解壓,在命令行運行l(wèi)kc2sicx.py腳本轉(zhuǎn)換配置。用法示例: $ ./lkc2sicx.py -s kernel.example.config -d example
當(dāng)前目錄下就會生成“example.conditions.xml”的SI條件解析配置文件,在SI中導(dǎo)入該文件,重建項目即可。 3、修改非激活代碼顯示樣式 在SI中未解析的代碼被稱為未激活代碼(Inavtive code),默認(rèn)格式是灰色的,沒有刪除線。為了更加醒目,可以修改一下未激活代碼的格式?!癘ptions->Style Properties...->Style Name->Inactive Code”,將字體配置的“Strike-Thru”設(shè)置為“ON”即可。如下圖: 參考 [1] Source Insight 4.0 用戶手冊,Source Dynamic.Inc 修訂記錄 2017-11-01 PM:從網(wǎng)易博客遷移到簡書; 2017-10-27 PM:完成初稿;
|