vscode remote gdb調(diào)試 linux代碼

/**
 * @author siwen.li (lisiwen945@163.com)
 * @brief 簡述vscode用gdb調(diào)試linux代碼
 * @version 0.1
 * @date 2021-03-02
 *
 * @copyright Copyright (c) 2021
 */

關(guān)于c/c++代碼編輯器

對(duì)于c/c++程序員來說趴拧,可能更多使用的環(huán)境是linux環(huán)境
在linux上編寫調(diào)試c/c++代碼比較麻煩

vim

在寫代碼這塊奶卓,大神vim玩到飛起晴音,
但是要記憶的快捷鍵太多肘交,像我這種手殘黨無法適應(yīng)

notepad++,source insight

初學(xué)時(shí)可能用的比較多的是notepad++唆缴,source insight等傳統(tǒng)的編輯器
notepad++只適合單文件編輯鳍征,
source insight對(duì)c++的特性支持不太好,
而且只是文本編輯器面徽,不能提示錯(cuò)誤艳丛,不能智能提示和補(bǔ)全代碼

vs 和 codeblocks

后來用了宇宙第一ide vs,確實(shí)很好用趟紊,能夠監(jiān)視進(jìn)程資源氮双,代碼編寫、編譯霎匈、調(diào)試 一氣呵成戴差,但是太過臃腫,動(dòng)則好幾十G铛嘱,堪稱巨無霸
codeblocks 配合Mingw在windows上寫代碼還是比較方便造挽,但是不能試用于linux環(huán)境

vscode

vscode用過之后極大的提升了效率,不僅界面好看弄痹,能夠自動(dòng)補(bǔ)全和智能提示錯(cuò)誤饭入,而且支持很多插件,如markdown darwio等肛真,而且還集成了git能夠查看diff文件谐丢,還能夠用remote ssh登錄服務(wù)器......

ssh remote

vscode 安裝remote插件


remote.png

連接服務(wù)器,網(wǎng)上教程很多蚓让,不多贅述乾忱,連上后會(huì)左下角狀態(tài)如下


ssh.png

gdb調(diào)試

調(diào)試單個(gè)文件

點(diǎn)擊運(yùn)行 - 調(diào)試 默認(rèn)會(huì)生成兩個(gè)json文件在 .vscode下,

  • gcc - 生成和調(diào)試活動(dòng)文件 launch.json (用于調(diào)試)
  • C/C++: gcc 生成活動(dòng)文件 task.json (用于編譯)

小試牛刀調(diào)試個(gè)hello world历极,代碼左邊添加斷點(diǎn)
可以看出窄瘟,能夠非常方便的查看堆棧信息 可視化的看各個(gè)變量的值


hello.png
多文件編譯調(diào)試

多文件編譯調(diào)試,可以打開tasks.json看看

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc 生成活動(dòng)文件",
            "command": "/usr/bin/g++",
            "args": [
                "-I",
                "/home/swing/code/apue.3e/include",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "調(diào)試器生成的任務(wù)趟卸。"
        }
    ],
    "version": "2.0.0"
}

可以看出task.json就是用g++生成了一個(gè)和文件同名的可執(zhí)行文件蹄葱,對(duì)于多文件不適用,多文件我更習(xí)慣于用Makefile或者cmake來生成

  • 在終端上用gdb調(diào)試demuxer 進(jìn)程锄列,需要傳遞一個(gè)圖片參數(shù)
swing@ubun:~/code/ffmpeg$ make demuxer 
g++ -g -Wall -o ./bin/demuxer -I ./include -L /home/swing/ffmpeg_src/output/lib ./src/demux.cpp ./src/Xdemux.cpp -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale -lpthread

swing@ubun:~/code/ffmpeg/bin$ gdb --args ./demuxer jpeg_dog.jpeg 
(gdb) r
Starting program: /home/swing/code/ffmpeg/bin/demuxer jpeg_dog.jpeg
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
open jpeg_dog.jpeg success! 
totalMs = 40
Input #0, image2, from 'jpeg_dog.jpeg':
  Duration: 00:00:00.04, start: 0.000000, bitrate: 24002 kb/s
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 1298x793 [SAR 96:96 DAR 1298:793], 25 tbr, 25 tbn, 25 tbc
[Inferior 1 (process 70727) exited normally]
(gdb) Quit
(gdb) q
swing@ubun:~/code/ffmpeg/bin$
  • 在vscode上調(diào)試編譯好的文件
    打開launch.json
{
    // 使用 IntelliSense 了解相關(guān)屬性图云。
    // 懸停以查看現(xiàn)有屬性的描述。
    // 欲了解更多信息邻邮,請(qǐng)?jiān)L問: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "gcc - 生成和調(diào)試活動(dòng)文件",
            "type": "cppdbg",
            "request": "launch",
            // "program": "${fileDirname}/${fileBasenameNoExtension}",
            "program": "/home/swing/code/ffmpeg/bin/demuxer",
            // "args": [],
            "args": ["/home/swing/code/ffmpeg/bin/jpeg_dog.jpeg"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "console": "externalTerminal",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "為 gdb 啟用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // 這個(gè)在調(diào)試前會(huì)調(diào)用編譯單個(gè)文件的task竣况,可以注釋掉
            // "preLaunchTask": "C/C++: gcc 生成活動(dòng)文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

將program替換成你要調(diào)試的進(jìn)程,在agrs中添加你要傳遞的參數(shù)筒严,啟動(dòng)調(diào)試


gdb.png
  • 可以看出在local中不僅可以查看局部變量丹泉,還可以查看在this指針中的全部成員變量情萤,非常方便
  • 還可以顯示堆棧和斷點(diǎn)信息
  • 在調(diào)試控制臺(tái) 中用-exec指令輸入 gdb中的命令可以實(shí)現(xiàn)和在終端中一樣的效果

總結(jié)

使用vscode remote 用gdb調(diào)試,可以可視化的查看代碼的運(yùn)行狀態(tài)摹恨,非常方便筋岛,極大的提升了效率

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睬塌,隨后出現(xiàn)的幾起案子泉蝌,更是在濱河造成了極大的恐慌,老刑警劉巖揩晴,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋陪,死亡現(xiàn)場離奇詭異,居然都是意外死亡硫兰,警方通過查閱死者的電腦和手機(jī)诅愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劫映,“玉大人违孝,你說我怎么就攤上這事∮靖常” “怎么了雌桑?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祖今。 經(jīng)常有香客問我校坑,道長,這世上最難降的妖魔是什么千诬? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任耍目,我火速辦了婚禮,結(jié)果婚禮上徐绑,老公的妹妹穿的比我還像新娘邪驮。我一直安慰自己,他們只是感情好傲茄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布毅访。 她就那樣靜靜地躺著,像睡著了一般烫幕。 火紅的嫁衣襯著肌膚如雪俺抽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天较曼,我揣著相機(jī)與錄音,去河邊找鬼振愿。 笑死捷犹,一個(gè)胖子當(dāng)著我的面吹牛弛饭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萍歉,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侣颂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枪孩?” 一聲冷哼從身側(cè)響起憔晒,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔑舞,沒想到半個(gè)月后拒担,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡攻询,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年从撼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧栖。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡低零,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拯杠,到底是詐尸還是另有隱情掏婶,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布潭陪,位于F島的核電站雄妥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畔咧。R本人自食惡果不足惜茎芭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誓沸。 院中可真熱鬧梅桩,春花似錦、人聲如沸拜隧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洪添。三九已至垦页,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間干奢,已是汗流浹背痊焊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人薄啥。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓辕羽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親垄惧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刁愿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容