国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

這篇具有很好參考價(jià)值的文章主要介紹了VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1、背景介紹

上一篇文章:VScode 結(jié)合Global構(gòu)建linux源代碼閱讀環(huán)境 ,介紹了在VS Code工具中通過(guò)remote-ssh遠(yuǎn)程登陸到Linux遠(yuǎn)程服務(wù)器,使用Global構(gòu)建linux源代碼閱讀環(huán)境,對(duì)linux kernel代碼進(jìn)行解析,實(shí)現(xiàn)全局搜索、自動(dòng)跳轉(zhuǎn)、代碼補(bǔ)全等功能,但是Global工具在建立代碼索引數(shù)據(jù)時(shí),將整個(gè)Linux源代碼都進(jìn)行了數(shù)據(jù)檢索分析,這樣會(huì)有很多重復(fù)的定義和聲明,不夠智能,不夠方便,接下來(lái)介紹使用vscode + clangd工具來(lái)解決此問(wèn)題。

2、原理介紹

clangd 可以實(shí)現(xiàn)代碼語(yǔ)義分析、代碼補(bǔ)全、跳轉(zhuǎn)等,能做到代碼精準(zhǔn)跳轉(zhuǎn)、精準(zhǔn)自動(dòng)補(bǔ)全;其原理是通過(guò)讀取工程編譯自動(dòng)生成的compile_commands.json 文件來(lái)索引其中包含的源文件和關(guān)聯(lián)的頭文件,因此能避免索引非編譯的代碼造成解析時(shí)語(yǔ)義混亂。compile_commands.json 文件是每個(gè)源文件的編譯參數(shù)、路徑等信息組成的一個(gè)json文件,clangd 通過(guò)這個(gè)文件可以準(zhǔn)確定位源文件需要引用的頭文件從而準(zhǔn)確的找到各種宏定義、函數(shù)、變量聲明的準(zhǔn)確值。

Linux源代碼已包含可以直接生成compile_commands.json文件的python腳本,在編譯后Linux kernel代碼路徑下執(zhí)行如下命令即可生成compile_commands.json文件:

python3 ./scripts/clang-tools/gen_compile_commands.py

3、安裝插件

打開VS Code,在擴(kuò)展界面搜索clangd后安裝插件:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

安裝好插件后,使用VS Code打開任意C語(yǔ)言會(huì)提示你安裝clangd程序,由于我是用remote-ssh登陸到遠(yuǎn)程linux服務(wù)器上的,所有clangd程序會(huì)安裝到遠(yuǎn)程的服務(wù)器上,如果自動(dòng)安裝失敗,也可以在遠(yuǎn)程服務(wù)器上使用命令安裝(ubuntu服務(wù)器):

$ sudo apt install clangd
VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

需要注意的是 clangd插件與C/C++ Intellisense、C/C++ GNU Global是沖突的,需要禁用或者卸載。

4、環(huán)境配置

前面的文章有提到在VS code 下如何進(jìn)行配置,和前面一樣clangd的配置我們同樣配置到遠(yuǎn)程用戶 setting.json文件中,在setting.json文件中新增如下配置:

    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}",
        "--background-index",
        "--completion-style=detailed",
        "--header-insertion=never",
        "--log=verbose"
    ],

完成配置后,打開任意源代碼文件觸發(fā)clangd進(jìn)行解析:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

clangd 檢索的數(shù)據(jù)庫(kù)位于工作目錄 .cache/clangd 文件夾,如果想重新生成檢索只要?jiǎng)h除相關(guān)的文件即可。如果一切正常,就看實(shí)現(xiàn)代碼跳轉(zhuǎn)了,但是一般都會(huì)出現(xiàn)問(wèn)題:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

如上圖所示,出現(xiàn)了 Unknown argument: '-fno-allow-store-data-races' 等錯(cuò)誤。

解決方案:在工作目錄新建 .clangd 文件,輸入如下內(nèi)容(同類型的錯(cuò)誤都可以使用此方案解決)

CompileFlags:
  Remove: [-fno-allow-store-data-races,-fconserve-stack]   

clangd解析過(guò)程會(huì)輸出相應(yīng)的日志信息,可以根據(jù)輸出信息進(jìn)行問(wèn)題的排查:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

上圖最核心的錯(cuò)誤提示:unkown target ABI 'lp64',在 .clangd 文件添加:-mabi=lp64

CompileFlags:
  Remove: [-fno-allow-store-data-races,-fconserve-stack,-mabi=lp64]   

解決相關(guān)的錯(cuò)誤問(wèn)題后,重新打開VS code,clangd會(huì)觸發(fā)重新檢索源代碼,檢索完成后即可使用clangd來(lái)檢索代碼:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

5、閱讀代碼

clangd index 完成后,打開任意代碼文件,選擇相關(guān)函數(shù)或者變量,使用快捷鍵: CTRL+鼠標(biāo)左鍵(或者F12),實(shí)現(xiàn)函數(shù)定義的跳轉(zhuǎn)查詢,跳轉(zhuǎn)以后使用快捷鍵:ALT+左鍵頭 返回;當(dāng)然也具備對(duì)函數(shù)進(jìn)行自動(dòng)提示、補(bǔ)全的功能:

VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境

這樣就可以對(duì)linux kernel 代碼進(jìn)行愉快的探索了................

6、后記

根據(jù)前面一系列的文章,已介紹使用VS Code 遠(yuǎn)程登陸到服務(wù)器,對(duì)Linux kernel代碼建立索引,實(shí)現(xiàn)全局搜索、自動(dòng)跳轉(zhuǎn)、代碼補(bǔ)全等功能,愉快的閱讀Linux kernel源代碼了,下一步將介紹如何在VS code 中實(shí)現(xiàn)gdb可視化調(diào)試linux kernel源代碼。

VS code 可視化調(diào)試Linux kernel內(nèi)核文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-415444.html

到了這里,關(guān)于VScode 結(jié)合clangd 構(gòu)建linux源代碼閱讀環(huán)境的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vscode git 源代碼管理 無(wú)法自動(dòng)更新顯示變更

    最近vscode 遠(yuǎn)程寫代碼遇到問(wèn)題,git的源代碼管理不能自動(dòng)羅列被修改的文件 原因: 早期出現(xiàn)警告\\\"Visual Studio Code is unable to watch for file changes in this large workspace\\\"無(wú)法在這個(gè)大型工作區(qū)中監(jiān)視文件更改?,時(shí)不小心按到了“不再提醒”,導(dǎo)致當(dāng)前工作區(qū)的文件數(shù)量超過(guò)了VS Code文

    2024年02月11日
    瀏覽(109)
  • 【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建

    【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建

    我們?cè)谑褂貌煌囊孢M(jìn)行大數(shù)據(jù)計(jì)算時(shí),需要將數(shù)據(jù)根據(jù)計(jì)算引擎進(jìn)行適配。這是一個(gè)相當(dāng)棘手的問(wèn)題,為此出現(xiàn)了一種新的解決方案:介于上層計(jì)算引擎和底層存儲(chǔ)格式之間的一個(gè)中間層。這個(gè)中間層不是數(shù)據(jù)存儲(chǔ)的方式,只是定義了數(shù)據(jù)的元數(shù)據(jù)組織方式,并向計(jì)算引

    2024年02月09日
    瀏覽(24)
  • vscode同步git代碼時(shí)源代碼管理出現(xiàn)10k+更改如何處理?

    vscode同步git代碼時(shí)源代碼管理出現(xiàn)10k+更改如何處理?

    出現(xiàn)原因:獲取項(xiàng)目代碼,通過(guò)vscode的sftp插件進(jìn)行遠(yuǎn)程項(xiàng)目拉取。建立新文件夾后發(fā)現(xiàn)vscode的git源代碼管理器出現(xiàn)多個(gè)更改需要處理,如下圖左側(cè)所示(10k+)。 解決辦法:查看具體更改,定位更改發(fā)生的文件夾(我的在桌面),打開文件管理器,定位到對(duì)應(yīng)路徑,刪除.gi

    2024年02月12日
    瀏覽(111)
  • ST電機(jī)庫(kù)v5.4.4源代碼分析(1): FOC原理(結(jié)合ST電機(jī)庫(kù))

    ST電機(jī)庫(kù)v5.4.4源代碼分析(1): FOC原理(結(jié)合ST電機(jī)庫(kù))

    編者:沉尸 (5912129@qq.com) 本文字描述電機(jī)FOC的原理性內(nèi)容,大部分取材于網(wǎng)絡(luò),但是我對(duì)于某些細(xì)節(jié)進(jìn)行了比較詳細(xì)的描述。因?yàn)楹芏嘧畛醯某鎏庢溄記](méi)有記錄下來(lái),所以沒(méi)有標(biāo)明,忘諒解!本文字不會(huì)用于任何商業(yè)行為! ?設(shè)計(jì)目標(biāo): 電流流經(jīng)三個(gè)繞組會(huì)產(chǎn)生磁場(chǎng),我們希

    2024年01月17日
    瀏覽(41)
  • Jenkins自動(dòng)拉取SVN源代碼構(gòu)建打包vue前端項(xiàng)目

    Jenkins自動(dòng)拉取SVN源代碼構(gòu)建打包vue前端項(xiàng)目

    目錄 1.功能需求 2.安裝插件 2.1 安裝NodeJS插件 2.2? 安裝SVN插件 3.配置環(huán)境 3.1? NodeJS環(huán)境 4.新建任務(wù)配置部署信息 4.1? 源代碼管理 4.2? 構(gòu)建觸發(fā)器 4.3? 構(gòu)建環(huán)境 ?4.4? 構(gòu)建步驟 5.構(gòu)建項(xiàng)目 ?5.1?點(diǎn)擊查看控制臺(tái)日志 使用Jenkins從SVN上拉取Vue項(xiàng)目進(jìn)行自動(dòng)構(gòu)建打包。如果需要發(fā)

    2023年04月22日
    瀏覽(24)
  • 【vscode基于clangd實(shí)現(xiàn)Android/Linux代碼跳轉(zhuǎn)】

    【vscode基于clangd實(shí)現(xiàn)Android/Linux代碼跳轉(zhuǎn)】

    背景: 在開發(fā)大型工程例如Android或Linux時(shí)若我們使用vscode搭配官方的C/C++插件使用發(fā)現(xiàn),經(jīng)常很多代碼都無(wú)法跳轉(zhuǎn),代碼補(bǔ)全功能幾乎是廢的,通過(guò)網(wǎng)友以及同事身邊了解之后發(fā)現(xiàn) vscode+clangd可以實(shí)現(xiàn)代碼任意跳轉(zhuǎn)補(bǔ)全等功能 ,因此本文通過(guò)講解如何配置clangd相關(guān)環(huán)境實(shí)現(xiàn)高

    2024年02月11日
    瀏覽(24)
  • 新手入公司git的運(yùn)用,項(xiàng)目克隆拉取與推送。vscode的源代碼管理

    新手入公司git的運(yùn)用,項(xiàng)目克隆拉取與推送。vscode的源代碼管理

    1.項(xiàng)目的克隆拉取 新建一個(gè)文件夾 ?打開文件夾后,鼠標(biāo)右鍵git Bash Here ?選擇好分支,在復(fù)制url ? 就把項(xiàng)目克隆下來(lái) , 拉取就是 后面的master也是對(duì)應(yīng)的分支 2、項(xiàng)目的推送 ?新建一個(gè)空的文件夾 ??打開文件夾后,鼠標(biāo)右鍵git Bash Here 先倉(cāng)庫(kù)初始化 git init? ?把你寫的項(xiàng)目復(fù)

    2024年02月03日
    瀏覽(91)
  • 看代碼神器:vscode+clangd輕松實(shí)現(xiàn)linux內(nèi)核代碼跳轉(zhuǎn)(圖文并茂)

    看代碼神器:vscode+clangd輕松實(shí)現(xiàn)linux內(nèi)核代碼跳轉(zhuǎn)(圖文并茂)

    一點(diǎn)感悟 還是那句老話:工欲善其事必先利其器。在做代碼開發(fā)之前,先準(zhǔn)備好開發(fā)過(guò)程幫助提效的工具,能起到事半功倍的效果。比如本文要講的vscode下進(jìn)行l(wèi)inux內(nèi)核代碼開發(fā)或者閱讀就是很好例子,如果沒(méi)有先把代碼跳轉(zhuǎn)等基礎(chǔ)環(huán)境搭建好,對(duì)后續(xù)的代碼閱讀和開發(fā)都可

    2024年01月23日
    瀏覽(21)
  • linux 源代碼編譯

    有時(shí)候會(huì)在linux上下載源碼包,然后進(jìn)行編譯成可執(zhí)行的文件,這個(gè)過(guò)程需要經(jīng)過(guò)configure、make、make install、make clean四個(gè)步驟 configure 為這個(gè)程序在當(dāng)前的操作系統(tǒng)環(huán)境下選擇合適的編譯器和環(huán)境參數(shù)來(lái)編譯該代碼 make 對(duì)程序代碼進(jìn)行編譯操作,會(huì)將源碼編譯成可執(zhí)行的目標(biāo)文

    2024年02月11日
    瀏覽(78)
  • 【Linux】源代碼軟件包

    【Linux】源代碼軟件包

    人不走空 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? 目錄 ? ????????個(gè)人主頁(yè):人不走空?????? ??系列專欄:算法專題 ?詩(shī)詞歌賦:斯是陋室,惟吾德馨 1. 什么是源代碼軟件包? 2. 源代碼軟件包的主要組成部分 3. 源代碼軟

    2024年01月16日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包