一、GDB常用命令
想用gdb调试C或C++程序,编译时需要加-g选项,编译出的文件为debug状态(如果不加则是release状态),且不可以加-O选项进行优化。
命令 | 简写 | 解释 |
set args | 设置程序传递的参数 例:./demo -v value -o a.out 传递了四个参数 | |
break | b | 设置断点 例:b 20 在20行打断点 |
run | r | 开始运行程序(遇到断点停止) |
next | n | 执行当前行语句(如果当前为函数调用,则不会进入函数内部) |
step | s | 进入函数内部执行一行语句 (如果为第三方库,进不去) |
p | 打印某个变量的值 例:p i 打印当前变量i的值 | |
continue | c | 继续执行到下一个断点 |
set var | 设置变量的值(针对已有变量) 假设程序中存在变量i set var i=100 将变量i设置为100,然后继续调试 | |
quit | q | 退出gdb |
backtrace | bt | 查看函数调用栈 |
二、GDB调试core文件
当执行一个程序时,可能会因为内存越界而崩溃。但此时没有错误信息,我们无法调试。通过生成的core文件,可以看到导致崩溃的具体代码。
默认系统是不生成core文件的,可以通过以下命令打开
ulimit -c unlimited
再运行后,即使崩溃,也会在当前目录生成core.XXX的文件。调试方式如下:
gdb core.XXX ./demo
此时在gdb中会显示崩溃行的具体代码。
三、GDB调试正在运行的程序
四、静态库与动态库
(注意:[ ]表示可选项,{ }表示必选项)
目的 | 选项 | 命令 |
链接.h文件 | -I | g++ main.cpp [ -I .h所在目录 ] |
编译静态库 | -c | g++ -c myKu.cpp -o libmyKu.a (注意:动态库一般以.a作为尾缀,lib作为前缀) |
编译动态库 | -fPIC -shared | g++ -fPIC -shared myDKu.cpp -o libmyDKu.so (注意:动态库一般以.so作为尾缀,lib作为前缀) |
链接静态库 | -L -l | g++ main.cpp [ -L 库所在路径 -l 库名称 ] (注意:不是完整的库名,而是去掉前缀lib和尾缀.so或.a的库名) |
链接动态库 | -L -l | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在目录 (注意:以上语句是将动态库所在目录包含到库路径中) g++ main.cpp [ -L 库所在路径 -l 库名称 ] (注意:不是完整的库名,而是去掉前缀lib和尾缀.so或.a的库名) |
五、tmux开启多个窗口
首先使用tmux命令打开多行窗口,然后在以下选项中选择:
1.按住Ctrl+B,再按 " 表示垂直开启另一个窗口
2.按住Ctrl+B,再按 " 表示垂直开启另一个窗口
(切换窗口Ctrl+B,再按方向键)(退出则输入exit)