后端开发核心技术 第5章调试 gdb coredump

gdb简介

gdb是gcc的调试工具,主要用于C和C++这两种语言编写的程序,功能强大,主要体现在以下4点:
①启动程序,可以按照用户自定义的要求随心所欲地运行程序
②可让被调试的程序在指定的断点处停住
③当程序被停住时,可以检查此时程序运行的状态
④动态的干部程序的执行环境

要调试,必须在编译时,要将调试信息加到可执行文件中。使用编译器 -g参数可以做到

gcc -g hello.c -o hello
g++ -g hello.cpp -o hello

如果没有-g,则看不到程序的函数名,变量名,所替代的全是运行时的内存地址。

启动gdb的方法

1) gdb program
program也就是你的执行文件,一般在当前目录下
2)gdb program core
用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件
3)gdb program 1234
如果程序是一个服务程序,那么这个可以指定这个服务程序的的进程ID,gdb会自动attach操作

gdb常用命令

l: 列出函数代码及其行数
b 16: 在代码16行处设置断点
b func: 在函数func处设置断点
r: 运行程序
n: 单条执行语句
p i: 打印i变量的值
bt: 查看函数的堆栈
finish: 退出函数
q: 结束调试

用gdb分析coredump文件

core,又称为coredump文件,是UNIX/Linux操作系统的一种机制,出core的过程意味着服务暂时不能正常响应。

coredump文件的存储路径

通过下面的命令看到core文件的存在位置
cat /proc/sys/kernel/core_pattern
通过下面的命令更改coredump文件的存储位置,将core文件生成到/data/coredump/core目录下
echo “/data/coredump/core” > /proc/sys/kernel/core_pattern
通过修改kernel参数,可以指定内核生成coredump文件名,例如,使用下面的命令生成core.filename.pid格式
echo “/data/coredump/core.%e.%p” >/proc/sys/kernel/core_pattern
这样配置,产生的core文件带有崩溃的程序名,以及它的进程ID

产生coredump文件的条件

保证当前能生成coredump文件大小大于0
当前目录有对写入core目录的写权限和足够的空间
产生coredump文件的原因

产生coredump文件的原因

内存访问越界

①使用错误的下标。②字符串越界。③使用strcpy,strcat,sprintf,strcmp,strcasecmp等字符串操作函数,容易出现目标字符串读/写越界,应该使用strncpy,strlcpy,strncat等函数防止读写容易出现越界

多线程程序使用了线程不安全的函数

多线程读写的数据未加锁保护

对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则容易造成coredump

非法指针,包括使用空指针或随意使用指针转换

堆栈溢出

局部变量太大,容易造成堆栈溢出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值