gdb调试常用实用命令和core dump文件的生成(转)
1、生成core dump文件的方法:
$ ulimit -c //查看是否为0
如果为0
$ ulimit -c unlimited
这样在程序崩溃以后会在当前目录生成一个core.xxxx的文件
2、调试core dump文件
生成了core.xxx文件以后
$ gdb ./应用程序 core.xxxx
就会恢复现场到你的程序崩溃的那一刻
(gdb)bt //这个命令会列出程序崩溃时的堆栈信息,一层一层会有标号 #0 #1 #2 .......
如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查看栈下面层的详细信息,首先要做的是切换到你想看的栈
(gdb)f N //N是你想要切换的栈的标号,达到后可以用 ‘p 变量’ 查看变量的值,以查找异常出现的原因
info args
打印出当前函数的参数名及其值。
info locals
打印出当前函数中所有局部变量及其值。
info catch
打印出当前的函数中的异常处理信息。
3、gdb调试命令
l 列出此刻运行到代码行的函数的上下文代码
b 设置断点
r 开始运行程序
s 单步调试,进入函数
n 单步,不进入下一层函数
n k(一个数字) 这样是相当于输入了k次n,也就是走了k步
c 继续运行程序(一般是跑到断点后,跟了几步,输入c继续往下一个断点跑)
[enter] 回车键默认执行上一次的命令
finish 执行完当前函数返回到调用他的函数,例如单步执行如果进入到了某函数,但你又想退出该函数
u(until) 制定程序直到退出当前的循环体,输入u自动执行完全部的循环
break 34 if var=12 //设置条件断点,当var等于12的时候就在34行设置断点watch i != 10 //监控某一个条件,然后设置断点,如果i不等于10的时候,就设置断点
break func //为某一个函数设置断点
break filename:N //在某一个文件的第N行设置断点
info breakpoints 显示所有的断点的信息
delete N //删除标号为N的断点
delete 删除所有的断点
clear N //清楚N上面的所有的断点
p var 打印变量var的值
//打印字符串的时候,有长度限制,想打印完整的长字符串,通过命令set print element 0就可以了
p /x var 以16进制显示var的值
x 16进制
d 10进制
t 二进制
c 按字符格式显示变量
f 按浮点数
print *a@10 //如果a是一个数组,这样显示数据的10个元素的值
print var=10 //修改运行时变量的值
whatis var //显示一个变量的类型
ptype var //更详细的方式显示变量var的类型,会打印出var的结构定义
4、编译的时候要加入-g选项,才可以对程序进行跟踪
5、gdb调试程序的时候打印变量值会出现<value optimized out> 情况,可以在gcc编译的时候加上 -O0参数项,意思是不进行编译优化,调试的时候就会顺畅了,运行流程不会跳来跳去的,发布项目的时候记得不要在使用 -O0参数项,gcc 默认编译或加上-O2优化编译会提高程序运行速度
转自:https://eric-gcm.iteye.com/blog/2149842
gdb调试常用实用命令和core dump文件的生成(转)的更多相关文章
- gdb调试常用实用命令和core dump文件的生成
1.生成core dump文件的方法: $ ulimit -c //查看是否为0 如果为0 $ ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxx ...
- core dump文件的生成
#include <stdio.h> int main(int argc, char *argv[]) { char * p = "abcdefg"; p[] = '; ...
- GDB调试——常用的命令
首先说明一点,如果我们要使用GDB来调试我们的C/C++程序时,在使用GCC编译程序时,应该带上 –g 参数, 它负责生成 与GDB相关的调试信息: 1.如何对一个文件启动GDB调试? 方法一: 命令 ...
- ZT 用gdb调试core dump文件
用gdb调试core dump文件 转载自:http://blog.chinaunix.net/u2/83905/showart_2134570.html 在Unix系统下,应用程序崩溃,一般会产生c ...
- gdb调试常用命令
gdb 调试常用命令 gcc -g mian.c -o main.out -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 gdb main. ...
- 使用GDB 追踪依赖poco的so程序,core dump文件分析.
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...
- 【Z】段错误Segment Fault定位,即core dump文件与gdb定位
使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行 ...
- Ubuntu16.04下写的Qt程序,调试时没问题,运行时偶现崩溃 (需要在运行时生成core dump文件,QMAKE_CC += -g)
记录一下 Ubuntu16.04下写的Qt程序,调试时没问题,运行时偶现崩溃 需要在运行时生成core dump文件 首先在pro结尾里加入 QMAKE_CC += -g QMAKE_CXX += - ...
- linux下生成core dump文件方法及设置【转】
转自:http://blog.csdn.net/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/196 ...
随机推荐
- 数仓1.4 |业务数仓搭建| 拉链表| Presto
电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金 ...
- window.location.replace和window.location.href区别
有3个页面 a,b,c 如果当前页面是c页面,并且c页面是这样跳转过来的:a->b->c 1:b->c 是通过window.location.replace("..xx/c ...
- Codeforces 1131F Asya And Kittens (构造)【并查集】
<题目链接> 题目大意:有$n$只小猫,开始将它们放在指定的n个单元格内,然后随机从n-1个隔板中拆除隔板,最终使得这些小猫在同一单元格.现在依次给出拆除隔板的顺序,比如:1 4 就表示1 ...
- Java中的泛型 --- Java 编程思想
前言 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ...
- STRING DELIMITED BY SIZE
The following COBOL program depicts the use of STRING DELIMITED BY SIZE IDENTIFICAT ...
- python 多线程和多进程
多线程与多进程 知识预览 一 进程与线程的概念 二 threading模块 三 multiprocessing模块 四 协程 五 IO模型 回到顶部 一 进程与线程的概念 1.1 进程 考虑一个场景: ...
- 关于GitHub中文乱码的问题
其实跟Git里中文乱码相比,这个问题好解决得多. GitHub中的乱码是由于其使用的编码与Windows记事本的默认编码不同.只要在本地将编码改成UTF-8,再重新push就可以了. 修改编码的方法是 ...
- 译:为什么使用 NoSQL 数据库
原文链接:Why NoSQL Database? 向数据时代的转变正在推动 NoSQL 随着各行各业朝着数据时代转变,商业世界正在经历巨大的变革.这是由互联网以及其他二十一世纪新技术--云计算.移动应 ...
- 如何去掉linux配置文件的注释行和空行
1.使用grep -v "^#" 来去掉注释行,其中:-v 就是取相反的 ^# 表示以#开头的行 eg. grep -v "^#" /etc/vsftp ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...