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

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

這篇具有很好參考價(jià)值的文章主要介紹了【vscode基于clangd實(shí)現(xiàn)Android/Linux代碼跳轉(zhuǎn)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wè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)高效開發(fā)。

一、準(zhǔn)備工作

首先自然就是卸載vscode官方提供的C/C++因?yàn)楣δ芎蚦langd會(huì)有沖突,建議直接刪除(禁用)
準(zhǔn)備所需插件:主要有兩個(gè)clangd以及SSH(按需求安裝)
1.clangd
linux源碼跳轉(zhuǎn),vscode,android,linux
2.SSH(使用遠(yuǎn)程服務(wù)器配置)
linux源碼跳轉(zhuǎn),vscode,android,linux

二、本地vscode鏈接到遠(yuǎn)程服務(wù)器(本地配置過(guò)可跳過(guò))

參考:vscode連接SSH遠(yuǎn)程服務(wù)器(詳細(xì)版)

三、clangd配置

3.1下載clangd

安裝好clangd插件之后只是一個(gè)套殼現(xiàn)在代碼是不能跳轉(zhuǎn)的,需要通過(guò)clangd language的支持來(lái)完成跳轉(zhuǎn),clangd language的下載方式有兩種方法
方式一:
下載好之后任意打開一個(gè)C/CPP文件,vscode下方會(huì)出現(xiàn)彈窗直接install即可(若網(wǎng)絡(luò)原因或其他原因這里一直下載不出來(lái)請(qǐng)參考方式二)
linux源碼跳轉(zhuǎn),vscode,android,linux
方式二:
從GitHub上下載clangd-language
linux源碼跳轉(zhuǎn),vscode,android,linux
選擇最新的版本即可,開發(fā)環(huán)境是linux選擇linux即可,博主這里選用的就是linux,其他系統(tǒng)同理。
將下載好的clangd解壓到任意一個(gè)path下,如下

cd /home/zly/tools/
unzip clangd_16.0.2.zip

在vscode上按住ctrl+,進(jìn)入配置選項(xiàng),如下在clangd中填寫我們下載好的language的path。
linux源碼跳轉(zhuǎn),vscode,android,linux

3.2配置clangd(重點(diǎn))

clangd準(zhǔn)備工作在上述,雖然已經(jīng)基本完成,但是如果打開工程代碼還是會(huì)發(fā)現(xiàn)代碼還是不能夠任意跳轉(zhuǎn),這是因?yàn)閏langd查詢不到對(duì)應(yīng)的工程頭文件,因此需要生成compile_commands.json,使用compile_commands.json文件來(lái)生成索引文件,這樣當(dāng)我們點(diǎn)擊某個(gè)函數(shù)時(shí)可以飛快跳轉(zhuǎn)到它定義的地方。

compile_commands.json文件中記錄的是每個(gè)文件的編譯選項(xiàng),樣式如下:

    {
        "arguments": [
            "/home/zly/work/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc",
            "-c",
            "-Wp,-MD,cmd/.test.o.d",
            "-nostdinc",
            "-isystem",
            "/home/zly/work/prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/include",
            "-Iinclude",
            "-I./arch/arm/include",
            "-include",
            "./include/linux/kconfig.h",
            "-D__KERNEL__",
            "-D__UBOOT__",
            "-Wall",
            "-Wstrict-prototypes",
            "-Wno-format-security",
            "-fno-builtin",
            "-ffreestanding",
            "-fshort-wchar",
            "-Werror",
            "-Os",
            "-fno-stack-protector",
            "-fno-delete-null-pointer-checks",
            "-g",
            "-fstack-usage",
            "-Wno-format-nonliteral",
            "-Werror=date-time",
            "-D__ARM__",
            "-Wa,-mimplicit-it=always",
            "-mthumb",
            "-mthumb-interwork",
            "-mabi=aapcs-linux",
            "-mword-relocations",
            "-fno-pic",
            "-mno-unaligned-access",
            "-mabi=aapcs-linux",
            "-funwind-tables",
            "-ffunction-sections",
            "-fdata-sections",
            "-fno-common",
            "-ffixed-r9",
            "-msoft-float",
            "-pipe",
            "-march=armv7-a",
            "-D__LINUX_ARM_ARCH__=7",
            "-I./arch/arm/mach-rockchip/include",
            "-DKBUILD_STR(s)=#s",
            "-DKBUILD_BASENAME=KBUILD_STR(test)",
            "-DKBUILD_MODNAME=KBUILD_STR(test)",
            "-o",
            "cmd/test.o",
            "cmd/test.c"
        ],
        "directory": "/home/zly/work/u-boot",
        "file": "cmd/test.c"
    },

生成compile_commands.json

compile_commands.json(也就是compilationdatabase,具體詳細(xì)規(guī)范可以參考clangd說(shuō)明)給clangd傳遞這些參數(shù)。
接下來(lái)通過(guò)kernel以及Android工程來(lái)分別生成compile_commands.json,
一、kernel中生成compile_commands.json

方法a:(注意!進(jìn)行以下操作前需要確保工程提前被編譯過(guò)
kernel中自帶了scripts/clang-tools/gen_compile_commands.py可以直接生成(低內(nèi)核版本沒有該腳本,可以從網(wǎng)上下載一個(gè))

  • 編譯一遍kernel
zly@zly-machine:~/work$ ./build.sh kernel
  • 通過(guò)find -name "*.cmd"確認(rèn)是否生成
........................................
./kernel/arch/arm/lib/.memchr.o.cmd
./kernel/arch/arm/lib/.lib1funcs.o.cmd
./kernel/arch/arm/lib/.call_with_stack.o.cmd
........................................
  • 執(zhí)行g(shù)en_compile_commands.py在當(dāng)前目錄下生成compile_commands.json
zly@zly-machine:~/work/kernel$ python3 ./scripts/clang-tools/gen_compile_commands.py

  • cp compile_commands.json到kernel目錄下

方法b:(注意工程要沒有編譯過(guò)!若編譯過(guò)make clean一下)
通過(guò)使用bear來(lái)生成:Bear 是一個(gè)用于生成編譯器的工具,它可以將編譯器前端的源代碼轉(zhuǎn)換成抽象語(yǔ)法樹(AST)并輸出到一個(gè)JSON文件中。

  • 安裝bear
zly@zly-machine:~$ sudo apt-get install bear
  • 使用bear命令來(lái)生成compile_commands.json
    用法如下:
bear make [其他make本身的參數(shù)]

它會(huì)記錄make過(guò)程編譯文件時(shí)用到的命令。
所以我們編譯內(nèi)核的目的是生成compile_commands.json,執(zhí)行如下命令:

zly@zly-machine:~/work$ bear ./build.sh kernel

同樣會(huì)生成compile_commands.json,將該json,cp到我們對(duì)應(yīng)的工程下即可。

二、Android中生成compile_commands.json
安卓和kernel其實(shí)是同理的,但是安卓工程更加龐大,在安卓7之后基本工程直接使用ninja來(lái)進(jìn)行編譯構(gòu)建的,因此我們可以直接通過(guò)ninjia快速構(gòu)建同步生成對(duì)應(yīng)的compile_commands.json.
ninja提供了一個(gè)工具(-t commands)可以生成特點(diǎn)目標(biāo)的編譯命令:

ninja -f combined-hal.ninja -t commands MODULES-IN-vendor-rockchip > commands.txt

使用gen_compdb:
gen_compdb: -c -i commands.txt -o compile_commands.json
cp compile_commands.json ./work

restart clangd server

綜上將compile_commands.json生成好并且放到相關(guān)工程中即可,正式使用了,使用前,在vscode重啟下clangd:ctrl+shift+p
linux源碼跳轉(zhuǎn),vscode,android,linux
之后就可以實(shí)現(xiàn)代碼的任意跳轉(zhuǎn)了~,clangd功能十分強(qiáng)大!不單單只有代碼跳轉(zhuǎn)那么簡(jiǎn)單,還可以為代碼提供補(bǔ)全、錯(cuò)誤提示、跳轉(zhuǎn)、導(dǎo)航等功能。

四、clangd簡(jiǎn)介

clangd是一個(gè)C/C++語(yǔ)言的基于LSP的語(yǔ)言服務(wù)實(shí)現(xiàn),可以為代碼提供補(bǔ)全、錯(cuò)誤提示、跳轉(zhuǎn)、導(dǎo)航等功能。

1.代碼補(bǔ)全、跳轉(zhuǎn)、導(dǎo)航、查看引用、查看實(shí)現(xiàn)

代碼補(bǔ)全:
linux源碼跳轉(zhuǎn),vscode,android,linux
轉(zhuǎn)到定義、引用、實(shí)現(xiàn):
linux源碼跳轉(zhuǎn),vscode,android,linux
快速定位:(ctrl+shift+o、ctrl+T)
linux源碼跳轉(zhuǎn),vscode,android,linux

2.錯(cuò)誤提示、靜態(tài)檢查

錯(cuò)誤提示:
linux源碼跳轉(zhuǎn),vscode,android,linux
靜態(tài)檢查:快速修復(fù)
linux源碼跳轉(zhuǎn),vscode,android,linux

3.格式化代碼

對(duì)整個(gè)文件(Shitft+Alt+F),選中區(qū)域格式化(Ctrl+K Ctrl+F)
linux源碼跳轉(zhuǎn),vscode,android,linux

4.重構(gòu)

5.懸浮提示

linux源碼跳轉(zhuǎn),vscode,android,linux
按住ctrl+左鍵即可跳躍到對(duì)應(yīng)函數(shù)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-674427.html

到了這里,關(guān)于【vscode基于clangd實(shí)現(xiàn)Android/Linux代碼跳轉(zhuǎ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使用clangd構(gòu)建Linux驅(qū)動(dòng)開發(fā)環(huán)境

    VSCode使用clangd構(gòu)建Linux驅(qū)動(dòng)開發(fā)環(huán)境

    最初在使用Linux內(nèi)核源碼進(jìn)行驅(qū)動(dòng)開發(fā)時(shí),由于沒有代碼補(bǔ)全、自動(dòng)提示等功能寫起來(lái)十分不方便,雖然有人使用Source Insight來(lái)閱讀源碼,但是我用起來(lái)還是感覺怪怪的,有時(shí)間同一個(gè)函數(shù)會(huì)找到很多的定義,不便判斷。在調(diào)用層次方面,還是clangd更好用。 Clangd 是一個(gè)基于

    2024年01月16日
    瀏覽(37)
  • Linux下使用VScode開發(fā)ROS時(shí)clangd插件的使用

    Linux下使用VScode開發(fā)ROS時(shí)clangd插件的使用

    本人在最近剛開始接觸Linux和ROS開發(fā),在開發(fā)過(guò)程中發(fā)現(xiàn),微軟的C/C++的intelliSense的代碼補(bǔ)全,糾錯(cuò)等功能是真的難用,恰好有學(xué)長(zhǎng)跟我提起了clangd這個(gè)東西,而且以前用clion去寫一些小的C/C++工程,想著怎么去配置一下在vscode上使用clangd,讓自己寫代碼更舒服一些(主要是太

    2024年02月02日
    瀏覽(21)
  • VSCode C/C++無(wú)法跳轉(zhuǎn)到定義(又是你 clangd !)

    VSCode C/C++無(wú)法跳轉(zhuǎn)到定義(又是你 clangd !)

    原博客:VSCode C/C++無(wú)法跳轉(zhuǎn)到定義、自動(dòng)補(bǔ)全、懸停提示功能_c/c++:edit configurations(json)-CSDN博客 ?我在此基礎(chǔ)上加一點(diǎn): 首先確保自己有這個(gè)插件: 點(diǎn)擊 齒輪? 符號(hào),進(jìn)入 配置設(shè)置,找到 把 C_cpp : Intelli Sense Engine 的內(nèi)容設(shè)置為 default ?如果設(shè)置不了,那就吧clangd這個(gè)擴(kuò)展禁

    2024年02月21日
    瀏覽(16)
  • 關(guān)于在Vscode安裝clangd的教程(分別在linux和windows)[很詳細(xì),很細(xì)節(jié),很全!]【W(wǎng)indows端:缺少 language enginee的解決方法】

    關(guān)于在Vscode安裝clangd的教程(分別在linux和windows)[很詳細(xì),很細(xì)節(jié),很全!]【W(wǎng)indows端:缺少 language enginee的解決方法】

    一.背景: 在Vscode中,使用c/c++ 編譯器(插件),但是自帶的補(bǔ)全語(yǔ)法不好 clang 也是個(gè)編譯器,而其對(duì)應(yīng)的clangd的補(bǔ)全語(yǔ)法的功能很友善 所以在Vscode中,我們可以使用插件c/c++編譯和執(zhí)行,但是補(bǔ)全的語(yǔ)法用clangd,話不多說(shuō),直接開干! 安裝分為2部分,linux端和本地端 1.先在

    2024年02月20日
    瀏覽(28)
  • clangd的使用,實(shí)現(xiàn)跳轉(zhuǎn)提示

    一、插件卸載c插件下載clangd 二、設(shè)置搜索clangd 若沒有找到compile_commands.json文件可以通過(guò)如下方式之后再便于即可生成 cmake項(xiàng)目: 在項(xiàng)目最頂層的.cmake文件中或者CMakeList文件中加入如下命令 或者 makefile項(xiàng)目: ①安裝bear ② 編譯時(shí)用 若后面突然失靈了 找到/home/xuerui/.vscode-s

    2024年02月10日
    瀏覽(18)
  • 【深度學(xué)習(xí)】vscode實(shí)現(xiàn)代碼跳轉(zhuǎn)功能

    【深度學(xué)習(xí)】vscode實(shí)現(xiàn)代碼跳轉(zhuǎn)功能

    在遠(yuǎn)程訪問(wèn)Linux服務(wù)器,使用vscode軟件代碼不能實(shí)現(xiàn)跳轉(zhuǎn)主要是由于沒有配置解釋器,故對(duì)其配置解釋器即可實(shí)現(xiàn)該功能。 在vscode中安裝Python,如下圖所示 在vscode中安裝Pylance,如下圖所示 如下圖所示,在vscode軟件右下角點(diǎn)擊后選擇對(duì)應(yīng)自己的解釋器即可 在File -- Preferences

    2024年02月17日
    瀏覽(15)
  • 【Linux | C++ 】基于環(huán)形隊(duì)列的多生產(chǎn)者多消費(fèi)者模型(Linux系統(tǒng)下C++ 代碼模擬實(shí)現(xiàn))

    【Linux | C++ 】基于環(huán)形隊(duì)列的多生產(chǎn)者多消費(fèi)者模型(Linux系統(tǒng)下C++ 代碼模擬實(shí)現(xiàn))

    在上一篇文章中,我們深入探討了Linux操作系統(tǒng)中的POSIX信號(hào)量,這是一個(gè)強(qiáng)大的同步機(jī)制,用于協(xié)調(diào)進(jìn)程或線程對(duì)共享資源的訪問(wèn)。通過(guò)對(duì)信號(hào)量的深入理解和應(yīng)用,我們學(xué)習(xí)了如何有效地解決并發(fā)編程中的競(jìng)爭(zhēng)條件,確保程序的穩(wěn)定性和效率。隨著并發(fā)編程技術(shù)的不斷深入

    2024年02月21日
    瀏覽(19)
  • Linux Ubuntu18.04配置Unity3D開發(fā)環(huán)境并解決VSCode中Dotnet Mono Omnisharp等問(wèn)題實(shí)現(xiàn)MonoBehaviour代碼提示

    Linux Ubuntu18.04配置Unity3D開發(fā)環(huán)境并解決VSCode中Dotnet Mono Omnisharp等問(wèn)題實(shí)現(xiàn)MonoBehaviour代碼提示

    如果說(shuō)Windows安裝Unity3D、配置Unity3D開發(fā)環(huán)境已經(jīng)讓人頭疼。那么,Linux中搭建Unity3D開發(fā)環(huán)境就更加讓人癲狂了。網(wǎng)上這類教程很少,出現(xiàn)問(wèn)題都找不到現(xiàn)成的解決方法,很多坑都是自己不斷嘗試,填補(bǔ)過(guò)來(lái)的。大致分為以下幾個(gè)坑:1.Ubuntu18.04配置Unity3D軟件不成功;2.VSCode識(shí)別

    2024年02月14日
    瀏覽(16)
  • 為vscode配置clangd

    為vscode配置clangd

    clangd能提供更好的補(bǔ)全和提示,自帶檢查一些warning的問(wèn)題,可以減少大家未來(lái)找存在的warning的時(shí)間。經(jīng)過(guò)配置可以在unittest和timetest中也實(shí)現(xiàn)自動(dòng)補(bǔ)全,平均速度比vscode c/c++插件更快。 在插件市場(chǎng)搜索clangd。安裝即可。注意c/c++可以不用卸載,否則調(diào)試可能會(huì)有點(diǎn)問(wèn)題。 在

    2023年04月08日
    瀏覽(18)
  • Linux環(huán)境使用VSCode調(diào)試簡(jiǎn)單C++代碼

    Linux環(huán)境使用VSCode調(diào)試簡(jiǎn)單C++代碼

    本文將通過(guò)演示一個(gè)簡(jiǎn)單C++代碼的編譯調(diào)試過(guò)程,介紹在VSCode中如何使用Linux環(huán)境下的GCC C++編譯器(g++)和GDB 調(diào)試器(gdb)。 關(guān)于GCC、g++、gcc、gdb,這里不做詳細(xì)介紹,如果感興趣可以參考另一篇文章:詳解C/C++代碼的預(yù)處理、編譯、匯編、鏈接全過(guò)程,里面有詳細(xì)的解釋。 看懂

    2024年02月04日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包