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变量