提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
功能开发时,调试出现Segmentation fault,总结已掌握的gdb调试技巧及经验于本文,下面这段是示例代码gdb方便调试,代码在释放内存后,再去访问该内存第17行,因此出现了Segmentation fault
#include <stdio.h>
#include <stdlib.h>
#define NUM_CH 8
int main(int argc,int **argv)
{
char *test_str = (char *)malloc(NUM_CH*sizeof(char));
char *test_str_n = test_str;
int num = NUM_CH;
while(num > 0){
num --;
*(test_str+num) = 0x30+num;
printf("hello world: %d\r\n",num);
}
printf("test_str:%s\r\n",test_str);
free(test_str);
test_str=NULL;
*(test_str) = 'i';
return 0;
}
一、基于Clion使用gdbserver调试
主机(172.20.1.170) --------- 目标机(172.20.1.22)
1.主机可以直接访问目标机
step1.目标机
gdbserver 172.20.1.22:6666 ./gdb_test
step2.主机 clion配置gdbserver,在甲壳虫旁边操作栏增加配置
如下图箭头标示配置Target remote ,设置为目标机IP和端口
step3.点击甲壳虫运行结果如下:
gdb调试结果上看,同样看出在17行异常
2.主机和目标机不能直接访问,借助跳板机调试
主机(10.32.68.99) ~~~~~~ 跳板机(172.20.1.170 & 10.32.68.96) ------- 目标机(172.20.1.22)
首先确认跳板机ping通目标机
step1.目标机
目标机设置及运行方式不变
gdbserver 172.20.1.22:6666 ./gdb_test
step2.主机 clion配置gdbserver,在甲壳虫旁边操作栏增加配置
如下图箭头标示配置Target remote ,改为localhost:12344
step3.打开clion终端输入:ssh -NfL 12344:172.20.1.22:6666 ht@10.32.68.96
跳板机IP 10.32.68.96, PC监听端口12344
step4.点击甲壳虫运行结果如下:
gdb调试结果上看,同样看出在17行异常
总结
以上就是今天要讲的内容,本文仅仅简单介绍了gdb/gdbserver的使用,以及基于ide界面调试。