[導(dǎo)讀]本文將結(jié)合筆者的實(shí)際操作和學(xué)習(xí),基于SI3.5做一些使用記錄。另外,筆者對SI的使用,主要是用于閱讀源碼,本文介紹的功能也是基于閱讀方面的。
“Source Insight(以下簡稱SI)是世界上最好的編輯器”,說這句話不知道會不會出門被打呢?-_- 中國古話說得好,“文無第一,武無第二”,所以不敢說SI是最好的,但是說是“最好的之一”絕對是妥妥的。它以豐富的語言支持、便捷的功能、快速的源碼導(dǎo)航、實(shí)時的上下文顯示、獨(dú)立的符號數(shù)據(jù)庫等眾多優(yōu)點(diǎn),在全世界范圍內(nèi)廣受程序員們的歡迎。本文將結(jié)合筆者的實(shí)際操作和學(xué)習(xí),基于SI3.5做一些使用記錄。另外,筆者對SI的使用,主要是用于閱讀源碼,本文介紹的功能也是基于閱讀方面的。
SI是一款面向項(xiàng)目開發(fā)的程序編輯器和代碼瀏覽器,它提供了一個視圖將分散在各個地方的代碼匯合在一起形成一個虛擬的整體,供開發(fā)者方便地閱讀和編輯,如下圖所示。
Source Insight was designed to enhance your ability to understand and modify your program. Our company mission is to increase programming team productivity by clarifying source code, presenting information in a useful way, and allowing programmers to modify software in large, complex projects. ……Source Insight acts as an information server that surrounds your project’s source code. With it, you can have instant access to symbolic and textual information in your program.
該段英文摘自SI官方幫助文檔,從這里可以看出SI的設(shè)計(jì)宗旨就是方便開發(fā)者查看和修改項(xiàng)目源碼。
SI是如今最好用的語言編輯器之一,具有很多其他編輯器無法比擬的優(yōu)點(diǎn),比如下面幾點(diǎn)。
SI幾乎支持所有的語言,如C、C++、C#、JAVA、ASM、PAS、ASP、HTML等,而其它編輯器往往只支持其中某類或某幾種語言,豐富性遠(yuǎn)不及SI。
SI自動傳創(chuàng)建并維護(hù)他自己高性能的符號數(shù)據(jù)庫,包括包名、函數(shù)、method、全局變量、結(jié)構(gòu)、類、注釋和功能源文件里定義的其它類型的符號等。我們可以通俗地理解為緩存,當(dāng)需要再次查找某個符號時,就可以直接從數(shù)據(jù)庫中查找,而不用在整個源碼庫中搜索,極大提高了效率。
SI提供了豐富多彩的窗口,為被選中的代碼提供豐富的信息,如reference trees、class inheritance diagrams、call tress,symbol windows等。后面會專門介紹這些窗口的使用。
SI提供了Context Window,當(dāng)鼠標(biāo)選擇代碼中的某個符號時,該window會實(shí)時顯示選中符號的上下文信息。在下文中的Context Window會詳細(xì)講到。甚至在你編輯的時候,SI同時分析你的源碼,提供實(shí)時的信息并進(jìn)行分析。?
提供了快速和革新的訪問源代碼和源信息的能力,能以最快的速度對源代碼導(dǎo)航和提供任何程序編輯器的源信息。
在SI窗口的頂部工具欄上依次點(diǎn)擊 Project > New Project,即可開始創(chuàng)建一個新的項(xiàng)目了。之所以要特別介紹項(xiàng)目的創(chuàng)建過程,除了這是一個極常用的操作外,還有就是創(chuàng)建過程中有一些注意事項(xiàng)需要留心,筆者在使用過程中就曾經(jīng)走過不少彎路,在這里特別記錄一下。
1、項(xiàng)目命名及設(shè)置項(xiàng)目存儲路徑
如下圖,在紅框部分選擇需要打開的源碼所在的路徑,筆者最初使用的時候,就忽略了這里,導(dǎo)致在后面的步驟中,找不到源碼,一度以為是SI版本異常了,所以這里特別提醒一下。其它的選項(xiàng)這里就按照默認(rèn)的選擇就可以了,筆者就是這么做的。當(dāng)然,這個要根據(jù)用戶自己需要來選擇了,看個人喜好。
在這個界面上,可以看到左側(cè)“Directory”這一欄的根節(jié)點(diǎn),就是第二步“項(xiàng)目設(shè)置”中咱們選擇的源碼路徑所在的盤符,如果你要添加的源文件不在這個盤符,就沒法找到了。在該盤符下選擇想要添加的文件,如藍(lán)色部分“Android-8.0.0_r1”,這是Android 系統(tǒng)源碼根目錄,因?yàn)檫@里選擇的是文件夾,所以點(diǎn)擊右邊的“Add Tree”來添加整個目錄。如果選擇的是文件,多個文件就選擇“Add All”,單個文件就選擇“Add”
添加時會給出對話框,表示正在添加。筆者添加的源碼目錄有4G以上,所以這時需要等待好幾分鐘的時間。
添加完成以后,可以看到對話框提示,點(diǎn)擊“確定”即可,此時可以繼續(xù)添加項(xiàng)目文件。
當(dāng)不需要再添加文件了,點(diǎn)擊“Close”按鈕關(guān)閉該界面,即完成了項(xiàng)目的創(chuàng)建。此時顯示的界面如下,左下區(qū)域顯示的就是新建的項(xiàng)目,列表顯示了項(xiàng)目中文件。
由于SI是一個MDI(Multiple Document Interface,多文檔接口),這意味著每一個你打開的源文件都擁有它自己的子窗口。在這一節(jié)中,將主要介紹主要菜單和最常用到的9個應(yīng)用窗口。下圖展示了主界面常用窗口概貌:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
和其他所有編輯器一樣,主菜單欄包含了所有編輯器功能的入口。每一類功能又都分類到某個子菜單中,這一點(diǎn)自然不用多說,地球人都知道,就不一一展示每個子菜單和功能點(diǎn)界面了,一些常用和重要的操作,咱們后文詳細(xì)介紹。
從上圖可以看到,分類其實(shí)是非常簡潔和明確的,看子菜單名稱大概就能知道其中包含了哪些功能,很方便查找。這里筆者著重推薦一下“Help”子菜單。無疑,官方的幫助文檔,是最權(quán)威,最全面的,如果英文不是太差,對某些功能不是太明白的話,完全可以從這個文檔中去查找,筆者看過其中不少說明,其實(shí)還是很容易看懂的。如下為官方幫助文檔概貌,內(nèi)容還是比較全面的:
工具欄列出了不少比較常用的一些功能快捷按鍵,這個也是地球人都知道的吧。如下顯示了SI設(shè)置的所有快捷工具圖標(biāo)。
點(diǎn)擊菜單欄View子菜單欄,點(diǎn)開Toolbars,就可以看到工具欄顯示選擇界面,可以在這里選擇顯示/隱藏哪些工具,如下圖所示。也可以右鍵點(diǎn)擊SI窗口頂部或工具欄空白處,也可以顯示下圖界面。
把鼠標(biāo)停留在工具欄的圖標(biāo)上,會簡單說明該工具的作用。咱們下面簡單看看工具欄都包含了哪些功能,做到心中有數(shù),這有助于以后快速定位到某些功能的入口而不用每次都到菜單欄中去找,少走一些彎路。
1)標(biāo)準(zhǔn)工具欄(Standard Toolbar):包含了基本的文件操作
2)編輯工具欄(Edit Toolbar):包含一些基本的編輯操作
3)搜索工具欄(Search Toolbar):包含了一些搜索命令
4)導(dǎo)航工具欄(Navigation Toolbar):包含了一些界面導(dǎo)航功能。
a)Go To Previous Link / Go To Next Link:在搜索結(jié)果界面,用于跳轉(zhuǎn)到前一個/后一個結(jié)果的鏈接。
b)Go Back/Go Forward:回到上個/下個操作界面;
c)Go To Line:跳轉(zhuǎn)到某一行
d)Bookmarks:添加書簽,或定位到書簽處。鼠標(biāo)光標(biāo)停留在編輯窗口的某一行,點(diǎn)擊該按鈕,會顯示如下界面??梢赃x擇在“Name”處輸入書簽名并點(diǎn)擊“Set”按鈕,新增一個書簽;也可以在“Marks”處顯示的書簽列表中選擇一個書簽,雙擊或者點(diǎn)擊“Go To”按鈕,就可以跳轉(zhuǎn)到該書簽對應(yīng)的代碼處了。對于要經(jīng)常查看某處代碼,這個工具算是相當(dāng)給力了。
5)符號工具欄(Symbol Toolbar):用于訪問一些符號信息(這里說的符號,前面第二大點(diǎn)第2小點(diǎn)講過其含義了,不明白的可以返回去看看)。
a)Jump To Definition:跳轉(zhuǎn)到選中的某個符號定義的地方。其實(shí)當(dāng)在編輯器中用鼠標(biāo)選擇某個符號,如果打開了“Contex Window”的話,可以在“Context Window”中實(shí)時看到該符號的定義處,這個后面講到該窗口時再詳細(xì)講,這里不贅述。
b)Symbol Info:彈出對話,顯示選擇的符號的相關(guān)信息,以及一些操作按鈕,如下圖所示。可以看到上面“Jump To Definition”是這里的一個小功能。
?c)Browser Project Symbols:可以查看整個項(xiàng)目中的符號列表。
?d)Look up References:顯示該符號被引用的地方。會彈出一個對話框,根據(jù)選擇的搜索條件進(jìn)行搜索,顯示一個搜索結(jié)果窗口列出這些引用信息(由于該該窗口尺寸原因,這里不好顯示,就不貼圖了)。其實(shí)在“Relation Window”中,也會實(shí)時顯示這些應(yīng)用列表的,這個后面在講該窗口時會詳細(xì)講,這里就不贅述了。
6)窗口工具欄( Window Toolbar):用于控制窗口的排列
7)幫助工具欄(Help Toolbar):訪問幫助文檔。
點(diǎn)擊“Help Mode”后會出現(xiàn)一個“?”,將其拖到你想尋求幫助的地方,就會顯示該處相關(guān)的幫助文檔。
8)視圖工具欄(View Toolbar):開啟/隱藏常用的幾個窗口,后面會專門對這幾個窗口做介紹。
9)構(gòu)建工具欄(Build Toolbar):運(yùn)行和編譯項(xiàng)目。
10)版本控制工具欄(Source Control Toolbar):包含了操作版本控制的相關(guān)工具。
3、源文件窗口(Source File Windows)
源文件窗口,可以稱作是SI的主角了,因?yàn)樵创a都顯示在這個窗口,可編輯,可同時打開多個窗口,在左上角紅框處顯示了源文件文件名和路徑。
在源文件窗口選中某個符號并點(diǎn)擊右鍵,會顯示一個功能菜單,可以對源文件進(jìn)行操作,如下圖所示:
這些功能有些是基本操作,有些是“見名思義”,一看就知道功能,有些在前面介紹工具欄的時候介紹過,這里就不再一一說明了,僅選擇性簡單介紹幾個:
-
Highlight Word 將文件中所有所選單詞高亮顯示,再次點(diǎn)擊會取消高亮。比如截圖中選擇“reason”并高亮,文件中的所有“reason”這個單詞都高亮了。另外,這個功能對注釋區(qū)無效。
-
Special Window Color/Remove Special Window Color 設(shè)置和取消編輯窗口的背景顏色。
-
Keyword List 顯示當(dāng)前文件所有的的關(guān)鍵字列表。
-
-
Document Options 設(shè)置編輯區(qū)文字顏色、大小、間隔等屬性。
-
-
符號的概念前面第二大節(jié)第2小點(diǎn)解釋過,不清楚的可以往前翻看。該窗口和源文件窗口相依相存,同時出現(xiàn)或隱藏,它顯示在源文件窗口的左邊,展示了當(dāng)前文件中的所有符號列表。如下圖所示:
頂部顯示了文件名;搜索欄中輸入要查找的符號可以快速找到要找的符號;中間部分顯示了符號列表,每一項(xiàng)前面都有一個符號,這些符號表示不同的符號類型;底部為工具欄,主要用于顯示符號排序方式,決定顯示哪些內(nèi)容,字體顏色和大小等。(Tips:如果在操作過程中,發(fā)現(xiàn)該窗口為空白了,可以點(diǎn)擊工具欄中的排序方式選擇按鈕,相當(dāng)于刷新了一下,即可正常顯示了,最開始筆者碰到這種情況的時候,曾經(jīng)蒙圈過...)
在窗口區(qū)域內(nèi)點(diǎn)擊右鍵,會顯示一個菜單欄,顯示針對該窗口的一些操作功能,如下圖所示:
值得注意的是,菜單欄中Cut~Select Symbol,操作對象是整個符號所代表的代碼塊,而不是符號所代表的字符串。比如鼠標(biāo)選中某個方法符號,點(diǎn)擊“Copy Symbol”后復(fù)制的就是整個方法了。這里有個比較生僻的功能——“Duplicate Symbol”,表示重復(fù)符號,將符號復(fù)制并粘貼,功能上看就相當(dāng)于“Copy Symbol”和“Paste Symbol”一次組合使用了。菜單中剩余的功能基本上就是Window面板中搜索欄和工具欄中的功能,這里不贅述。
5、項(xiàng)目窗口(Project Window)
項(xiàng)目窗口顯示了項(xiàng)目的相關(guān)信息,可以在SI頂部“View > Project Window”或者Toolbar中“Project Window”按鈕來控制該窗口的顯示/隱藏。
如下圖所示,為項(xiàng)目默認(rèn)窗口的概貌圖,我們可以看到,它顯示了項(xiàng)目名稱,快速搜索欄,中間的內(nèi)容顯示區(qū)和底部的工具欄,當(dāng)然還有右上角的最大/最小化和關(guān)閉按鈕。
這個區(qū)域會根據(jù)“快速搜索欄”輸入的關(guān)鍵字過濾出文件名或路徑包含該關(guān)鍵字的匹配列表,上圖中還顯示了文件大小,和修改時間。這個區(qū)域的內(nèi)容也會隨著工具欄中的按鈕的切換而變化顯示內(nèi)容。后面講工具欄時會再講到。雙擊某一項(xiàng)或者在某一項(xiàng)上點(diǎn)擊右鍵調(diào)出的菜單中點(diǎn)擊“Open”就可以快速進(jìn)入到對應(yīng)的源文件。
?默認(rèn)選擇是顯示,也可以通過在該項(xiàng)目窗口點(diǎn)擊右鍵后顯示的菜單欄“Toolbar”選項(xiàng)來顯示/隱藏工具欄。窗口工具欄中黃框部分按鈕用于切換內(nèi)容顯示區(qū)的顯示內(nèi)容;藍(lán)框部分會根據(jù)黃框部分按鈕的選擇而有所變動,主要用于跳轉(zhuǎn)到某些界面;綠框部分為項(xiàng)目窗口屬性設(shè)置按鈕,包括字體大小、顏色、背景色等。把鼠標(biāo)指針放置在按鈕上,會顯示該按鈕功能。
-
Project File List:項(xiàng)目文件列表。默認(rèn)選擇為該項(xiàng),在“內(nèi)容顯示區(qū)”顯示當(dāng)前項(xiàng)目中的所有文件列表,并降序排列,如概貌圖中所示。Tips:這里可以在搜索欄中靈活使用通配符,比如輸入“*.java”再按“Enter”按鍵,可以篩選出所有的java文件;如果再輸入“*”并“Enter”,則取消前面通配符效果,也可以理解是“*”表示顯示所有。
-
Project File Browser:項(xiàng)目文件瀏覽器,以目錄樹的形式顯示。
-
Project Document Types:按照文件的文檔類型來分類顯示。
-
Project Symbol List:顯示項(xiàng)目中符號列表。
? ? ? ? ?注意:這里工具欄中黃色邊框中的按鈕,與其他幾個界面有所不同了。
-
Project Symbol Classes:按照符號的類型進(jìn)行分類顯示。
前面也提到了,藍(lán)框中的按鈕是變化的。當(dāng)左邊切換到“Project Symbol List”或“Project Symbol Classes”這兩個顯示Symbol的界面時,藍(lán)框中顯示了4個按鈕,這里的4個按鈕和SI整體窗口頂部的工具欄中符號工具欄(Symbol Toolbar)一樣,這里不贅述,不清楚的可以查看前面“工具欄”這一節(jié)。當(dāng)選擇的是其他3種界面時,顯示的是概貌圖中界面:Open Project、Add or Remove Project Files 和 Project Report。Project Report,生成當(dāng)前項(xiàng)目中的統(tǒng)計(jì)數(shù)據(jù),如下圖(1)所示,可以選擇一些統(tǒng)計(jì)項(xiàng),點(diǎn)擊“OK”按鈕,會生成一個統(tǒng)計(jì)報(bào)告文件如下圖(2)所示。
綠框中按鈕的功能是設(shè)置項(xiàng)目窗口的界面信息,如下圖所示,可以設(shè)置顯示內(nèi)容,字體/顏色/大小等。
在該窗口中點(diǎn)擊右鍵,可以調(diào)起項(xiàng)目窗口的功能菜單欄,如下圖所示。前面黃框部分按鈕在切換顯示內(nèi)容是文件或符號的時候,菜單欄會有一點(diǎn)不同,但也是大同小異,這里不單獨(dú)貼圖了。這里單獨(dú)提一下“Synchronize Files”,同步項(xiàng)目中的所有修改,其他功能或在工具欄中講到過,或見名思義,就不贅述了。
?6、關(guān)聯(lián)窗口(Relation Window)
Relation Window也是SI的一個創(chuàng)新點(diǎn),用于顯示當(dāng)前被選中的Symbol和外界的聯(lián)系,比如被哪些地方引用,被哪些地方調(diào)用等。它和后面要講到的Context Window一樣,都是跟蹤選中的Symbol而自動實(shí)時地變化。
可以在SI頂部菜單欄選擇/取消“View > Relation Window”,或者在頂部Toolbar中點(diǎn)擊“Relation Window”快捷按鈕來顯示/隱藏該窗口。
當(dāng)鼠標(biāo)光標(biāo)停留在某個Symbol上時,該窗口中會立即顯示設(shè)置的關(guān)聯(lián)內(nèi)容,該窗口基本內(nèi)容如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4.6.1
頂部“References”表示該窗口顯示的內(nèi)容與當(dāng)前光標(biāo)所在的Symbol是引用關(guān)系,這個關(guān)系可以在設(shè)置中選中,還有“Calls”、Contains等關(guān)系,后面會講到。中間內(nèi)容區(qū)顯示了引用當(dāng)前Symbol的地方,該例子中就是表示變量“_isFaceIDSwitchOpen”被當(dāng)前類KeyguardUpdateMonitor中isFaceIDSwitchOpen()方法的第2760、2764、2769行引用。點(diǎn)擊每一行會在Context Window中實(shí)時顯示上下文。底部是該窗口的快捷工具箱。
-
Jump To Definition:將光標(biāo)移動到所選項(xiàng)被定義的地方,可能是某個方法,或者某個類等。
-
Symbol Info:彈出一個popup window,顯示Relation Window中被選項(xiàng)的定義。
-
Lookup Reference:搜索指定或者選中字段的應(yīng)用情況,后面講搜索的時候會詳細(xì)講到。
-
Lock Relation Window:選中后表示鎖住當(dāng)前窗口,不會實(shí)時改變內(nèi)容。
-
Refresh Relation Window:刷新窗口。
-
View Relation Outline:以大綱的形式顯示內(nèi)容,如圖4.6.2所示。
-
View Relation Horizonal Graph:水平顯示內(nèi)容,如圖4.6.3所示。
-
View Relation Vertical Graph:垂直顯示內(nèi)容,如圖4.6.1所示。
-
Relation Window Properties:窗口屬性設(shè)置,里面功能點(diǎn)比較多,這里單獨(dú)劃出一個小節(jié)詳細(xì)說明。
? ? ? ? ? ? ? ? ? ? ?圖4.6.2
? ? ? ? ? ? ? ? ? ? ?圖4.6.3
(4)Relation Window Properties
該對話框除了能設(shè)置字體,顏色等外觀屬性外,還能設(shè)置內(nèi)容與光標(biāo)選項(xiàng)的關(guān)系等多種內(nèi)在聯(lián)系。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4.6.4
?1)Automatic Symbol Tracking
設(shè)置Symbol自動跟蹤相關(guān)屬性,如下圖所示。如果不希望自動跟蹤Symbol,選擇“Off”或者在Toolbar中選擇“Lock Relation Window”即可。
這些選項(xiàng)字面意思比較簡單,這里就不啰嗦了。
2)Automatic Expansion Option
Expand duplicate branches:是否展開重復(fù)的分支。
Level:展開分支的層級。比如設(shè)置為“2”,那么被Calls的函數(shù),以及該函數(shù)再調(diào)用的函數(shù)都會顯示。
單獨(dú)設(shè)置被選中的Symbol類型與Relaiton Window中顯示內(nèi)容的關(guān)系,選中的類型不同,關(guān)系也不一樣。該處列出了“Type”、“Functions”、“Variables/Constants”、“Classes”、“Files”五種類型,以及可以設(shè)置的關(guān)系。例如,如圖4.6.4中,給“Functions”設(shè)置的是“Calls”關(guān)系,那么當(dāng)鼠標(biāo)選中某個函數(shù),那么當(dāng)前Relation Window中就會顯示被該函數(shù)“Calls”的信息。
這些Relation可以分為3類,不同的類型匹配的速度也不一樣,從快到慢依次為:
-
Contains:顯示當(dāng)前symbol的內(nèi)容。
-
Calls:被當(dāng)前symbol調(diào)用的其他symbol。比如選中了函數(shù),則會顯示被該函數(shù)調(diào)用的其他函數(shù)。
-
References:顯示有哪些symbol調(diào)用了當(dāng)前symbol,作用范圍僅在當(dāng)前文件。比如,選中了某個函數(shù),則會顯示當(dāng)前文件中調(diào)用了該函數(shù)的函數(shù)。在比較大的項(xiàng)目中,這項(xiàng)關(guān)系的匹配是比較耗時的。
對于“Group multiple references into one item” 以及“Columns”,其中的有些功能還沒太明白,以后搞明白了再補(bǔ)上。
該對話框主要用于設(shè)置關(guān)系圖的外觀,這個比較簡單,不多說了。
該菜單欄中的功能有的在前面講到過,有的比較簡單,就不一一列舉。這里說一下“New Relation Window”,同一個窗口中可以同時打開多個Relation Window。開發(fā)者可以同時打開“Calls”關(guān)系窗口和“References”關(guān)系窗口,根據(jù)自己的需求決定,非常便利。
剪貼板窗口是一個浮動窗口,可以隨意拖動和停留在界面中。它類似于剪貼板,但相比于剪貼板只能保存最近一次的剪切外,該窗口可以保留多個剪貼記錄。
可
以在SI界面頂部的Toolbar中點(diǎn)擊“Clip Window”開關(guān),或在頂部菜單欄“View > Clip Window”選擇/取消來顯示/隱藏該窗口。
該窗口的顯示信息如下圖。每一個clip項(xiàng)都包含一clip名稱和該clip的內(nèi)容。
-
New Clip:創(chuàng)建一個新的clip。
-
-
Edit Clip:編輯選中的clip的內(nèi)容。
-
Cut To Clip:在“Source File Window”選中某字符串,點(diǎn)擊該按鈕,所選擇部分將被剪切并彈出對話框創(chuàng)建一個新的clip,被剪內(nèi)容將作為新clip的內(nèi)容,clip名稱需要自定義。
-
Copy To Clip:與“Cut To Clip”類似,不同的是,該功能是復(fù)制選中的部分。
-
Paste From Clip:選中某條clip,如果光標(biāo)在“Source File Window”內(nèi),點(diǎn)擊該功能按鈕,會把clip內(nèi)容粘貼在光標(biāo)處。雙擊選中的clip也有同樣的效果。
-
Clip Window Properties:設(shè)置該窗口的一些屬性
在該窗口內(nèi)點(diǎn)擊右鍵,會顯示如下菜單欄。其中功能上面基本都介紹了,這里不贅述,只簡單補(bǔ)充一下“Show Clipboard”。當(dāng)選中某個clip,并點(diǎn)擊“Show Clipboard”,會彈出一個窗口顯示該clip的內(nèi)容,和點(diǎn)擊“Edit Clip”非常類似,只是無法編輯。
8、搜索窗口(Search Results Window)
搜索功能絕對是一個最常用的功能之一了,使用十分頻繁,下面對搜索功能及搜索結(jié)果窗口做一些基本的介紹。
開發(fā)者可以點(diǎn)擊頂部主菜單欄中“Search”選擇搜索子功能,如下圖4.8.1所示;或者在頂部Toolbar快捷工具欄中點(diǎn)擊相應(yīng)的快捷按鈕進(jìn)行搜索,如下圖4.8.2紅框部分;或者使用快捷鍵調(diào)出對應(yīng)的搜索功能窗口,如下圖4.8.1所示。
? ? ? ? ? ? ? ? ? ? ?圖4.8.2
該功能主要在當(dāng)前文件范圍內(nèi)進(jìn)行搜索,根據(jù)自身的需要添加搜索條件,一般選擇默認(rèn)就可以了。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4.8.3
-
Find:需要搜索的字符串,點(diǎn)擊右邊倒三角可以查看并選擇歷史搜索記錄。
-
-
Use Regular Expressions:使用正則表達(dá)式。
-
-
Select When Found:找到該字符串時,該字符串被選中。
-
Whole Words Only:只包含整個要搜索的字符串。如果不選中,則包含欲搜索字符串的字符串都會被搜索到。
-
Forward/Backward 以當(dāng)前文件中鼠標(biāo)光標(biāo)所在處為參照點(diǎn),向前/向后搜索。與圖4.8.1或圖4.8.2中“Search Forward”/“Search Backward”功能一致。
-
Selection 在當(dāng)前文件可見范圍內(nèi)搜索。
-
Whole File (截圖紅框①處):在當(dāng)前整個文件內(nèi)搜索。
-
Search(截圖紅框②處):如果能搜索到,鼠標(biāo)只會定位到滿足條件的某一個搜索結(jié)果處。
-
Whole File(截圖紅框③處):點(diǎn)擊該按鈕,會在當(dāng)前整個文件中進(jìn)行搜索,如果有多個搜索結(jié)果,會顯示一個搜索結(jié)果列表,如下圖4.8.4所示。
-
Files(截圖紅框④處):點(diǎn)擊該按鈕,會跳轉(zhuǎn)到“Search Files”功能界面,下面會詳細(xì)介紹。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖4.8.4
與“Search”功能相比,這里用于在多個文件中進(jìn)行搜索。如下圖所示,為其功能界面,以下將對該功能進(jìn)行簡單介紹。
1)先看“Options”(上圖紅框②處)中各選項(xiàng)的含義(在“Search”功能中講到過的選項(xiàng)含義,這里不再贅述):
-
Project Wide:在整個項(xiàng)目范圍內(nèi)的所有文件中進(jìn)行搜索。
-
Include Subdirectories:在圖4.8.5紅框①處如果選中的是目錄,該選項(xiàng)用于選擇是否要在該目錄的子目錄中進(jìn)行遞歸搜索。
-
-
Skip Inactive Code:跳過無效代碼查找。
-
-
Search Only Comments:僅在注釋中查找。
2)Find:在“Search”功能中講過,這里不贅述。
3)File Name:制定查找范圍,可以是具體的某個文件,也可以是某個文件夾??梢詧D4.8.5紅框①處中選擇,也可以在截圖右下角點(diǎn)擊“Browser”按鈕進(jìn)行選擇。左邊的倒三角點(diǎn)擊后,顯示歷史記錄列表。
4)圖4.8.5紅框①區(qū):該區(qū)域會顯示具體的文件或者目錄。點(diǎn)擊③處“Show Dirs”,該按鈕顯示的文字會在“Show Dirs”/“Show Files”之間換號,①區(qū)內(nèi)容也會隨之變化。在②區(qū)選擇“Project Wide”也會顯示所有文件,選擇“Include Subdirectories”則會顯示目錄。
5)Search Results:④區(qū)中的選項(xiàng)為設(shè)置搜索結(jié)果需要顯示哪些內(nèi)容,如圖4.8.4所示。
值得注意的是:在選擇源文件的時候,不是硬盤中所有的文件都能顯示,這里和前文介紹新建項(xiàng)目時所選擇的源碼路徑所在盤符有關(guān)。
(
4)Search Project/Lookup Reference
?“Search Project“和”Lookup Reference”功能界面除了左上角標(biāo)題欄不同外,其它一模一樣,這里就以“Lookup Reference”為例,如下圖所示。
1)Search Method:這里有四個選項(xiàng)
-
Simple String:最普通的形式,把搜索項(xiàng)作為字符串,可以查找文件中出現(xiàn)的任意字符或者字符串,當(dāng)工程比較大的時候查找比價慢。
-
Regular Expression:正則表達(dá)式方式搜索。可以參考:【Source Insight搜索正則表達(dá)式使用技巧】
-
Keyword Expression/Lookup Reference:這兩種方式查找的結(jié)果基本相同,只是顯示方式略有差異。有些文章中說,這兩種方式都是使用SI預(yù)先建立的數(shù)據(jù)庫,查找起來速度相當(dāng)快,但通常這種速度只在查找標(biāo)識符時有明顯效果,且強(qiáng)烈建議像函數(shù)名、變量名等的查找,用這兩種方式進(jìn)行查找。這里筆者聲明一下,筆者暫時還沒體驗(yàn)到這里說的快速,在浩瀚的源碼中搜索某個函數(shù)或變量時,都很費(fèi)事,所以這里不敢打包票。
2)Lines of Context:每一條結(jié)果項(xiàng)顯示的行數(shù)。前面我們可以看到,不同方式的搜索結(jié)果種,有的只顯示一行,有的顯示多行,就和這里有關(guān)。有的行數(shù)可以編輯,而有的不能編輯。
4)Find Reference To:這個lable會根據(jù)“Search Method”中方式的選擇而變化。其中的內(nèi)容為搜索項(xiàng),點(diǎn)擊倒三角會顯示搜索記錄列表。
其實(shí)前面已經(jīng)講到過該窗口了,當(dāng)搜索完后,會展示一個窗口用于顯示搜索結(jié)果,如下圖所示,紅色框中顯示了有多少個匹配項(xiàng),多少個文件。主內(nèi)容區(qū)也顯示文件名,所在行數(shù)等信息。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖4.8.10? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
下圖是一個完整的搜索結(jié)果及其它窗口交互界面。當(dāng)選擇“Search Result Window”中某一項(xiàng)時,會在“Context Window”中實(shí)時顯示其上下文內(nèi)容,如下圖中④去所示。在搜索結(jié)果項(xiàng)前都有一個紅色按鈕,如③區(qū)所示。點(diǎn)擊對應(yīng)項(xiàng)該按鈕,會顯示其對應(yīng)的“Source File Window”及所搜索字段所在位置,且也有一個紅色按鈕,如下圖②區(qū)所示,點(diǎn)擊這些按鈕,界面會在“Source File Window”和“Search Result Window”之前來回切換。下圖①區(qū)顯示的Toolbar按鈕,我們在前面講Toolbar的時候介紹過,是"Go To Previous Link / Go To Next Link",此時點(diǎn)擊這兩個按鈕會跳轉(zhuǎn)到前一個/后一個搜索結(jié)果鏈接。
在圖4.8.1中“Search”子菜單中還有很多選項(xiàng),有的比較簡單,有的前文中陸陸續(xù)續(xù)介紹過,這里就不贅述了。
上下文窗口是SI中一個革新功能,在用戶瀏覽或者編輯源碼過程中,會實(shí)時自動顯示鼠標(biāo)點(diǎn)擊或選中部分的相關(guān)信息,可以簡單地看做是預(yù)覽功能。
上下文窗口的顯示/隱藏開關(guān)位于菜單欄“View > Context Window” 或 Toolbar中“Context Window”按鈕。
上下文窗口位于前面SI概貌圖的左下角,其顯示內(nèi)容,會根據(jù)鼠標(biāo)所選取或點(diǎn)擊的內(nèi)容的類型而有很大差別。下表總結(jié)了不同的鼠標(biāo)行為與相應(yīng)的上下文窗口顯示結(jié)果(摘自SI官方幫助文檔):
如果選中的是源文件窗口中的符號或局部變量,參數(shù)等,該窗口會顯示選中內(nèi)容被定義(如果是方法、類或結(jié)構(gòu)體等,下同)或聲明(如果是全局變量或引用等,下同)的上下文信息。如下圖顯示的是在源文件窗口中選中“reason”時的結(jié)果:頂部顯示了選中的內(nèi)容“reason”,類型“Locol Variable”,所在文件名“SystemServer.java”,所在文件路徑等;中間顯示區(qū)高亮顯示了“reason”的定義處,以及它所在的上下文信息——函數(shù)performPendingShutdown()內(nèi);底部為工具欄,這個后面單獨(dú)講到。
如果在源文件窗口中輸入信息,如果以這個字符串開頭的符號有多個,則會在上下文窗口中顯示匹配的符號列表。如下圖顯示的就是在源碼文件中輸入“star”字符串后該窗口的表現(xiàn)。
如果當(dāng)前Project Window顯示的是文件,且鼠標(biāo)選中了其中一個文件,Context Window中顯示的則是文件內(nèi)容。
如果當(dāng)前Project Window顯示的是符號,鼠標(biāo)選中后,Context Window中則會顯示符號的聲明或這定義的上下文代碼。
當(dāng)鼠標(biāo)選中Clip Window列表中的某一項(xiàng)Clip時,Context Window頂部會顯示當(dāng)前內(nèi)容類型為“Clip”,Clip名稱為“Reason”,內(nèi)容來源為“Text from Typing”,Clip內(nèi)容為“Text Clip in Context Window”,當(dāng)雙擊Clip內(nèi)容時,會彈出一個編輯窗口,編輯其內(nèi)容。
如果當(dāng)期鼠標(biāo)選中的是Symbol中的某一個符號,那Context Window顯示的是對符號的定義或聲明。
如果當(dāng)前鼠標(biāo)選中的是Relation Window中的內(nèi)容時,Context Window中顯示的是該引用項(xiàng)所在的位置。如下圖中,Relation Window顯示的是SystemServer.java類中performPendingShutdown()方法中的局部變量reason的應(yīng)用者列表,當(dāng)鼠標(biāo)點(diǎn)擊最后一條時,Context Window就定位并高亮顯示了該引用項(xiàng)的位置。
下圖為Context Wiindow中底部的工具欄,黃框部分功能參考SI頂部Toolbar中部分,這里不贅述。藍(lán)框部分功能為:Complete Symbol、Lock Context Window、Context Window Properties
-
Complete Symbol:自動補(bǔ)全符號功能。即當(dāng)用戶在Source File Window區(qū)域輸入字符串時,點(diǎn)擊該按鈕可以顯示以該字符串開頭的符號列表,供用戶選擇自動補(bǔ)全。如下圖所示:
-
Lock Context Window:上下文窗口鎖。選中該按鈕后,上下文窗口內(nèi)容就會被鎖住,不會實(shí)時變化;再次點(diǎn)擊,則取消鎖功能。
-
Context Window Properties:上下文窗口屬性。設(shè)置上下文窗口的字體類型/大小/顏色,背景色,跟蹤屬性,顯示內(nèi)容等特性。
在Context Window上點(diǎn)擊右鍵調(diào)出功能菜單如下所所示,除了紅框中“Project-Wide Rename(顧名思義:項(xiàng)目范圍內(nèi)對選中項(xiàng)重命名)”外其他都在前面講過了,這里不贅述。
正如大多數(shù)軟件及開發(fā)工具包一樣,官方提供的幫助文檔就是最好的教程,SI也不例外。當(dāng)然這需要讀者有一定的英文文檔閱讀基本功,因?yàn)檫@類文檔都是英文版的。從筆者的經(jīng)驗(yàn)來看,語法什么的其實(shí)不那么復(fù)雜,關(guān)鍵的生僻單詞可以查詞典,也不是難事,反而是閱讀的耐心才是閱讀英文文檔的關(guān)鍵。下面簡單介紹一下SI的幫助相關(guān)的功能。
點(diǎn)擊SI頂部菜單欄“Help”子菜單欄,即可顯示“幫助”相關(guān)的子功能
點(diǎn)擊列表中的“Help”或者快捷鍵F1,會調(diào)出官方幫助文檔來,如下圖所示:
該部分提供了“目錄”、“索引”、“搜索”、“書簽”等搜索方式,搜索起來非常方便。從上面截圖可以看到“Window Tour”,是不是似曾相識?沒錯,筆者前文將到的常用窗口功能,就有一部分是取材于該幫助文檔。該文檔的使用還是比較簡單的,這里就不啰嗦了。
點(diǎn)擊該項(xiàng)后,會在界面上出現(xiàn)一個鼠標(biāo)箭頭+“?”的符號,隨著鼠標(biāo)移動,只要在SI界面上點(diǎn)擊某個窗口或按鈕,就會調(diào)出幫助文檔,并顯示點(diǎn)擊處相關(guān)的幫助信息。
會彈出如下文檔,記錄了SI的功能點(diǎn),以及對應(yīng)的快捷鍵。開發(fā)者可以在其中增、刪、改、查快捷鍵。
形式上類似于上面的“Create Key List”,功能上顯示了SI的功能點(diǎn)以及對該功能點(diǎn)的描述。
在前文講“Toolbar”的時候講到過,這里再提一下。SI頂部Toolbar上有兩個幫助相關(guān)的快捷按鈕,如下圖所示
菜單欄中還有“Serial Number”、“Source Insight Web Site”、“About Source Insight”功能,比較簡單,主要用于顯示一些SI的基本信息,這里也不啰嗦了。
筆者之所以特地用一個章節(jié)來寫“Help”這個用法很簡單的功能,是因?yàn)楣P者在學(xué)習(xí)SI時,就極大地收益于該幫助文檔。該文章中的不少內(nèi)容也是取材于該文檔。與此同時,從使用其他軟件和SDK的經(jīng)歷來看,對官方幫助文檔的作用有著深切的體會。所以筆者在以后的開發(fā)和學(xué)習(xí)中,會更加加強(qiáng)對官方文檔的閱讀,這一節(jié)也是用于勉勵自己,也建議讀者也能夠養(yǎng)成閱讀官方文檔的好習(xí)慣。
介紹SI,就不得不提到宏。宏是SI的一個強(qiáng)大的功能,有的人甚至認(rèn)為是SI中最強(qiáng)大最有趣的功能。用戶可以通過編寫宏來實(shí)現(xiàn)自定義功能,極大地提高效率。筆者以前在網(wǎng)上找到過一個這方面寫得挺好的教程,作者非常用心,筆者這里就不重復(fù)造這個輪子了(當(dāng)然筆者在這方面經(jīng)驗(yàn)和水平都有限-_-),這里把該教程分享出來:
鏈接:?https://pan.baidu.com/s/1-Xi41nwnX94_PrawvXq1fA
該教程介紹了當(dāng)前廣受歡迎的三個宏:Quicker、Code Review、Chnchar的使用,配置等方面的內(nèi)容。
本節(jié)主要記錄一些比較實(shí)用且比較零散的使用技巧。
? ? ? ?可以結(jié)合Toolbar中的“Go Back/Go Forward”快捷鍵使用。
開發(fā)者可以根據(jù)自己習(xí)慣,自行定義快捷鍵。功能路徑為:Menu > Options > Key Assigments
選擇要修改的功能項(xiàng),點(diǎn)擊“Assign New Key”會彈出上圖底部的操作說明,按照操作進(jìn)行即可自定義快捷鍵。如果想恢復(fù)默認(rèn),點(diǎn)擊“Reset”按鈕即可。
?SI的功能太多了,筆者不可能全部能寫出來,這里先從整體上做介紹并打好框架,后續(xù)筆者會根據(jù)自己的使用情況,慢慢完善。由于經(jīng)驗(yàn)和水平有限,難免有描述錯誤或者不妥之處,請讀者多多指教!
https://www.cnblogs.com/andy-songwei/p/9965714.html
版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
成功為華為“續(xù)命:中國芯片之父張汝京
一個工程師的“噩夢”:剛分清CPU和GPU,卻發(fā)現(xiàn)還有……
這位“華為天才少年”,竟然要我用“充電寶”打《只狼》
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!
掃描二維碼,關(guān)注更多精彩內(nèi)容
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
全球嵌入式技術(shù)領(lǐng)域的年度盛會2026嵌入式世界展(Embedded World 2026,簡稱EW26)于3月10日至12日在德國紐倫堡成功舉辦。作為物聯(lián)網(wǎng)和邊緣AI領(lǐng)域的領(lǐng)先企業(yè),Silicon Labs(亦稱“芯科科...
關(guān)鍵字:
物聯(lián)網(wǎng)
邊緣AI
嵌入式
3月10日至12日,2026年嵌入式世界展(Embedded World 2026,簡稱EW26)在德國紐倫堡展覽中心成功舉辦。作為領(lǐng)先的邊緣AI與智能音頻等媒體處理技術(shù)和芯片解決方案提供商,XMOS以沉浸式演示與技術(shù)交...
關(guān)鍵字:
邊緣AI
智能音頻
嵌入式
在嵌入式系統(tǒng)開發(fā)中,SoC(System on Chip)的多樣性始終是橫亙在開發(fā)者面前的難題。以某工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)項(xiàng)目為例,其需同時支持NXP i.MX8M、Rockchip RK3566和Allwinner H616三...
關(guān)鍵字:
Platform Driver模型
嵌入式
在非易失性存儲器領(lǐng)域,EEPROM(電可擦除可編程只讀存儲器)曾長期占據(jù)主流地位,廣泛應(yīng)用于各類電子設(shè)備的參數(shù)存儲、日志記錄等場景。但隨著工業(yè)控制、汽車電子、醫(yī)療設(shè)備等領(lǐng)域?qū)Υ鎯π阅芴岢龈咭螅現(xiàn)RAM(鐵電隨機(jī)存取存...
關(guān)鍵字:
存儲器
可編程
嵌入式
康佳特將aReady.COM擴(kuò)展至Arm架構(gòu)模塊,基于恩智浦i.MX 95處理器打造應(yīng)用就緒的軟硬件構(gòu)建模塊,集成操作系統(tǒng)、系統(tǒng)整合與IoT連接能力,賦能高價值應(yīng)用快速落地
關(guān)鍵字:
處理器
IoT
嵌入式
3月12日,2026年中國家電及消費(fèi)電子博覽會(以下簡稱:AWE 2026)在上海盛大開幕。展會現(xiàn)場,場景化、系統(tǒng)化、一體化的家電解決方案成為行業(yè)焦點(diǎn),消費(fèi)者對家電的關(guān)注也已從基礎(chǔ)的尺寸匹配,延伸至對“空間秩序感”和“視...
關(guān)鍵字:
消費(fèi)電子
蒸烤箱
嵌入式
超高效NPU IP在資源受限設(shè)備中推進(jìn)邊緣AI,因而獲得認(rèn)可
關(guān)鍵字:
人工智能
嵌入式
NPU
上海2026年3月12日 /美通社/ -- 3月12日,2026中國家電及消費(fèi)電子博覽會(AWE 2026)在上海新國際博覽中心和東方樞紐國際商務(wù)合作區(qū)展區(qū)正式啟幕。本屆展會以"AI科技?慧享未來"為...
關(guān)鍵字:
西門子
博世
嵌入式
洗碗機(jī)
在“AI科技,慧享未來”的時代命題下,人工智能正加速滲透至家庭生活的每一個細(xì)節(jié)。2026年中國家電及消費(fèi)電子博覽會(AWE2026)在上海啟幕,聚焦AI技術(shù)如何重塑家電形態(tài)與人居體驗(yàn)。圍繞“智造不凡 悅享非凡”主題,西門...
關(guān)鍵字:
嵌入式
冰箱
AI
在嵌入式系統(tǒng)開發(fā)領(lǐng)域,Qt憑借其跨平臺特性、豐富的GUI組件和高效的開發(fā)框架,成為構(gòu)建交互式界面的首選工具之一。對于嵌入式工程師而言,掌握Qt不僅能提升開發(fā)效率,更能為智能設(shè)備、工業(yè)控制、汽車電子等領(lǐng)域的產(chǎn)品帶來更優(yōu)質(zhì)的...
關(guān)鍵字:
嵌入式
QT
在人工智能加速滲透家庭生活的背景下,2026年中國家電及消費(fèi)電子博覽會(AWE2026)于上海新國際博覽中心盛大開幕。本屆AWE以“AI科技,慧享未來”為主題,集中呈現(xiàn)了前沿科技如何重新定義家電形態(tài)與人居空間。作為全球高...
關(guān)鍵字:
全屋智能
人工智能
嵌入式
2026 年 3 月 11 日,中國北京訊 - 全球先進(jìn)半導(dǎo)體解決方案供應(yīng)商瑞薩電子(TSE:6723)今日宣布,由Altium提供技術(shù)支持的智能模型化平臺“Renesas 365”正式全面上市:該平臺可將元器件與解決方...
關(guān)鍵字:
嵌入式
微控制器
元器件
近日,2026年中國家電及消費(fèi)電子博覽會(AWE2026)在上海盛大舉行,本屆AWE以“AI科技,慧享未來”為主題,全面展示人工智能與家電深度融合所帶來的創(chuàng)新成果。西門子家電以“智造不凡 悅享非凡”為主題亮相展會AWE展...
關(guān)鍵字:
人工智能
抽屜蒸箱
嵌入式
瑞典烏普薩拉,2026年3月9日 — IAR今日宣布,對其嵌入式開發(fā)平臺進(jìn)行擴(kuò)展,推出全新長期支持(Long-Term Support,LTS)服務(wù),旨在幫助客戶在漫長的產(chǎn)品生命周期中,維持穩(wěn)定、可復(fù)現(xiàn)的工具鏈。
關(guān)鍵字:
嵌入式
工具鏈
工業(yè)自動化
中國上海 – 2026年3月9日 – 全球知名的電子元器件授權(quán)代理商富昌電子(Future Electronics)近日憑借在嵌入式領(lǐng)域的持續(xù)深耕與快速成長,榮膺瑞薩電子嵌入式處理產(chǎn)品事業(yè)部頒發(fā)的“2025最佳潛力獎”。...
關(guān)鍵字:
嵌入式
元器件
2026年3月9日 – 提供超豐富半導(dǎo)體和電子元器件?的業(yè)界知名新品引入 (NPI) 代理商貿(mào)澤電子 (Mouser Electronics) 推出內(nèi)容豐富的邊緣計(jì)算資源中心,為工程師提供業(yè)界新動態(tài)。邊緣計(jì)算正在重塑數(shù)字...
關(guān)鍵字:
邊緣計(jì)算
AI
嵌入式
計(jì)劃將加速Wi-Fi HaLow技術(shù)的普及與產(chǎn)品上市進(jìn)程,推動Wi-Fi HaLow生態(tài)系統(tǒng)規(guī)?;l(fā)展
關(guān)鍵字:
Wi-Fi
物聯(lián)網(wǎng)
嵌入式
嵌入式系統(tǒng)與底層驅(qū)動開發(fā),C語言因其高效性和可控性成為主流選擇。然而,隨著項(xiàng)目規(guī)模擴(kuò)大,代碼結(jié)構(gòu)易陷入“架構(gòu)腐爛”——模塊間依賴錯綜復(fù)雜,修改一處需牽動全局,維護(hù)成本指數(shù)級增長。高內(nèi)聚低耦合作為軟件設(shè)計(jì)的黃金準(zhǔn)則,能有效...
關(guān)鍵字:
嵌入式
底層驅(qū)動