Linux 程序調試(GDB,PDB,JDB,VScode)

1 Linux C++調試(GDB調試)

基本條件:會寫Makefile文件,會使用終端編譯。(若不會,可以參考我的博客實例)

參考網站:https://jingyan.baidu.com/article/acf728fd464984f8e410a369.html

Makefile編譯運行後,最後生成main文件,調試過程如下:

1)命令行輸入$gdb;

2)命令行輸入$file main  #調試生成的main文件;

3)命令行輸入$l    #查看cpp文件代碼;

4)命令行輸入$b 13   #在代碼的第13行設置斷點;

      命令行輸入$b 函數名   #在具體某一函數處設置斷點;b main即在主函數開始處設置斷點;

5)命令行輸入$r       #從開始運行代碼,在斷點處停止;

6)命令行輸入$n      #單步調試,從當前代碼開始,一步步執行;

7)命令行輸入$print 變量      #打印出自己想要看到的變量值;

8)命令行輸入$s     #進入函數

9)命令行輸入$set args param1 param2……即可加入參數進行調試。(參考:http://visualgdb.com/gdbreference/commands/set_args

cuda-gdb調試caffe參考網站:https://blog.csdn.net/u010158659/article/details/78418701

10)命令行輸入$ptype  變量(var)      #輸出變量類型

11)命令行輸入$x/12xb &var      #查看內存。&var爲首地址, 12爲數據塊字節數

12)命令行輸入$b filename:N      #指定文件filename第N行設置斷點

 

2 Linux python調試(pdb調試)

參考網站:https://blog.csdn.net/linda1000/article/details/11031771

我直接選用一種常用方法了!

1)在需要調試的python代碼中,選定一個斷點,在斷點對應位置寫入(即設置斷點):

import pdb
pdb.set_trace()

2)使用命令python *.py運行程序;

3)程序會停在設置的斷點處,方可利用多種命令查看變量、查找問題。

命令如下:

(Pdb)p param #查看當前 變量值
(Pdb)l #查看運行到某處代碼
(Pdb)a #查看全部棧內變量

停止調試輸入q即可。

輔助命令:terminal上內容搜索:Ctrl + Shift + F 

3 linux下java程序調試JDB

1)編譯時加入-g

javac -g -classpath ./ helloWorld.java

2)JDB進入調試

jdb -classpath ./ helloWorld

 3)打函數斷點(停在main函數)

stop in helloWorld.main

     Deferring breakpoint helloWorld.main.
     It will be set after the class is loaded. 

     某一行打斷點:stop at helloWorld:12

 4)運行至main函數

run

     Breakpoint hit: "thread=main", helloWorld.main(), line=4 bci=0
     4            System.out.println("Hello world");

5)部分命令

  • 單步運行:next
  • 查看局部變量:locals
  • 查看當前代碼:list
  • 停止:exit

4 VScode調試caffe

這裏採用的是比較簡單的方式調試caffe,原理就是GDB調試的原理!只是用VScode集成了很多功能。

1)編譯

step1_1:修改Makefile.config文件:取消DEBUG的註釋;

step1_2:編譯。我直接在caffe目錄下,採用命令行編譯,即:make clean && make all -j32 && make pycaffe #make clean就是清除之前編譯產生的文件,make all -j32是爲了加速編譯,make pycaffe編譯的是caffe中的python接口。

2)調試

step2_1:用VScode打開caffe根目錄;

step2_2:寫GDB的launch.json文件:(調試->添加配置->選GDB(這裏沒有的話就需要先配置C/C++的擴展)->修改"program"和"args"項)

"program": "${workspaceFolder}/build/tools/caffe.bin",
"args": ["train","--solver=examples/mnist/solver.prototxt"],

step2_3:在程序中插入斷點,啓動調試即可。

ps:vscode調試需要保證protobuf環境等沒有問題,同時我只能在cpp文件中插斷點,因此目前只能調試cpu-only模式。

調試模式下的VScode快捷鍵:F5-運行到下一個斷點,F11-單步調試,調試窗口中可以查看當前Local變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章