GDB
编译gdb可执行C++程序
g++ -g a.cc
#include <iostream>
#include <math.h>
void testfunc(){
std::cout << "testfunc" << std::endl;
}
int main(int argc, char const *argv[]){
int arr[4];
for(int i = 0; i <= 3; i++){
arr[i] = i;
}
testfunc();
return 0;
}
gdb 可执行程序
gdb ./a.out
run r 运行程序
quit 退出gdb模式
list 查看我们的源码
b break 打断点
- 函数名字
- 行号
info b 查看断点情况
print p 打印变量
- p arr[0] 打印数组元素值
- p &arr[0] 打印数组元素地址
step s 进去某一个具体的函数调试
gdb的小技巧
shell调用终端的命令
- shell ls
日志功能
- set logging on
watchpoint 观察变量是否变化
- warch *0x7fffffffe09c
- info watch info查看watch
#include <iostream>
#include <math.h>
int main(int argc, char const *argv[]){
int *a = NULL;
*a = 22;
return 0;
}
调试挂掉的程序 core文件
ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7258
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 4096
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
去除 core 限制
- ulimit -c unlimited
gdb 二进制文件 core文件
- gdb ./a.out core.15846
调试正在运行的程序
- gdb -p 进程编号