Linux开发工具之gdb(下)
2024-08-26 14:12:24
三、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文件
最新文章
- Jenkins安装
- .net类库里ListView的一个BUG
- Spark MLib 数据类型
- OpenCV图像轮廓检测
- poj1988(并查集)
- HP 7440老机器重启
- Windows 服务器开通防火墙后,IISFTP和Serv U开通的FTP账号不能登录
- jquery 实现页面局部刷新ajax做法
- [Ruby on Rails系列]5、专题:Talk About SaSS
- jquery mobile event
- TCP和UDP报文分片的区别
- Python:strip 函数踩坑
- Tensor类型
- [原创]K8Cscan插件之Windows密码爆破
- c# 关于字段内存排序
- Go开发之路 -- strings以及strconv的使用
- oracle存储过程---创建存储过程语句
- #科委外文文献发现系统——导出word模板1.0
- [转]解决ssh登录后闲置时间过长而断开连接
- [转帖] Oracle JDK 11 正式发布.. 版本号真快
热门文章
- VS2010与VAssistX
- RabbitMQ笔记
- 请教 WINDOWSPHONE 有个人录了个传感器等硬件的视频,并且项目是完全开源的,大家有知道地址的吗?或者叫什么。
- 安装search everything中文语言包
- An endpoint configuration section for contract ";serviceReferenc.service"; could not be loaded
- Oracle问题解决(sqlplus无法登陆)
- TortoiseSVN 的分支合并操作
- ZT: WEB学习资料
- VS2010安装Visual Assist
- ZOJ-2112-Dynamic Rankings(线段树套splay树)