三、gdb调试(下)
01.查看运行时数据
print - 查看变量值
ptype - 查看类型
print array - 查看数组
print *array@len - 查看动态内存
print x =5 - 改变运行时数据
#vi simple.c
#include<stdio.h>
long fun(int n);
int main(int argc,char *argv[])
{
int i;
int x = 5;
double z = 2.5;
char ch  = 'q';
 
int arr1[] = {0,1,2,3,4,5,6,7,8,9};
int *arr2 = (int *)malloc(sizeof(int)*10);
for(i=0;i<10;i++)
{
arr2[i] = i;
}
printf("Entering main ...\n");
for(i=0;i<argc;++i)
{
printf("%s ",argv[i]);
}
printf("\n");
long result = 0;
for(i=1;i<100;++i)
{
result += i;
}
printf("result[1-100] = %d\n", result);
printf("result[1-10] = %d\n",func(10));
printf("Exiting main ...\n");
retuln 0;
}
02.gdb调试逻辑错误
#vi reverse.c
#include<stdio.h>
int main(void)
{
int i;
char str[6] = "hello";
char reverse_str[6] = "";
printf("%s\n",str);
for(i=0;i<5;i++)
reverse_str[5-i] = str[i];(逻辑出错的地方
,将reverse_str[5-i]改为reverse_str[4-i])
printf("%s\n",reverse_str);
return 0;
}
:wq
#make
#./reverse
hello
(空,出错的原因:单步调试在循环完成后,查看reverse_str的结
果,p reverse_str,结果是"\000olleh",而打印时以"\0"开头,所
以停止。
#make clean
#make
#./reverse
03.gdb调试段错误
  段错误是由于访问非法地址而产生的错误。
    访问系统数据区,尤其是往系统保护的内存地址写数据。最常
见就是给一个指针以0地址;
    内存越界(数组越界,变量类型不一致)访问到不属于你的内
存区域
#vi bugging.c
#include<stdio.h>
#include<stdlib.h>
void segfault()
{
int *p = NULL;
*p = 100;
}
int main(void)
{
segfault();
char buf[1] = "a";
buf[10003] = "A";
printf("%c\n",buf[10003]);
return 0;
}
#./bugging.c
段错误
Starting program: 
/home/study/cppcourse/devtool/06gdb/bugging
Program received signal SIGSEGV,Segmentation fault.
(gdb)bt(栈回溯)
#0 0x12345678 in segfault () at bugging.c:7
#1 0x12345678 in main() at bugging.c:12
#2 0x12312312 in __libc_start_main() from 
/lib/tls/llibc.so.6
04.core文件调试
  core文件
在程序崩溃时,一般会生成一个文件叫core文件。core文
件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生
成的过程叫做core dump
  设置生成core文件
ulimit -c 查看core-dump状态
ulimit -c 数字(如:ulimit -c 1024)
ulimit -c unlimited
  gdb利用core文件调试
gdb文件名core文件
bt
#ulimit -c
0(表示无法查看core文件的名)
#./bugging.c
段错误(core dumped)
#ulimit -a 
core file size (blocks size) 0
#ls
core.9351
#gdb bugging core.9351
……
(gdb)bt(查看栈回溯信息)
gdb总结
  查看运行时数据
  程序错误
  gdb调试逻辑错误
  gdb调试段错误
  core文件

最新文章

  1. Jenkins安装
  2. .net类库里ListView的一个BUG
  3. Spark MLib 数据类型
  4. OpenCV图像轮廓检测
  5. poj1988(并查集)
  6. HP 7440老机器重启
  7. Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录
  8. jquery 实现页面局部刷新ajax做法
  9. [Ruby on Rails系列]5、专题:Talk About SaSS
  10. jquery mobile event
  11. TCP和UDP报文分片的区别
  12. Python:strip 函数踩坑
  13. Tensor类型
  14. [原创]K8Cscan插件之Windows密码爆破
  15. c# 关于字段内存排序
  16. Go开发之路 -- strings以及strconv的使用
  17. oracle存储过程---创建存储过程语句
  18. #科委外文文献发现系统——导出word模板1.0
  19. [转]解决ssh登录后闲置时间过长而断开连接
  20. [转帖] Oracle JDK 11 正式发布.. 版本号真快

热门文章

  1. VS2010与VAssistX
  2. RabbitMQ笔记
  3. 请教 WINDOWSPHONE 有个人录了个传感器等硬件的视频,并且项目是完全开源的,大家有知道地址的吗?或者叫什么。
  4. 安装search everything中文语言包
  5. An endpoint configuration section for contract &quot;serviceReferenc.service&quot; could not be loaded
  6. Oracle问题解决(sqlplus无法登陆)
  7. TortoiseSVN 的分支合并操作
  8. ZT: WEB学习资料
  9. VS2010安装Visual Assist
  10. ZOJ-2112-Dynamic Rankings(线段树套splay树)