gdb基本使用方法】的更多相关文章

一. gcc常用编译命令选项 假设源程序文件名为test.c. 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认输出为a.out. 2. 选项 -o 用法:#gcc test.c -o test 作用:将test.c预处理.汇编.编译并链接形成可执行文件test.-o选项用来指定输出文件的文件名. 3. 选项 -E 用法:#gcc -E test.c -o test.i 作用:将test.c预处理输出test…
gdb时linux下的一个非常好用的调试工具.下面给出它几个常用的方法 b 设置断点.c 继续执行. i 查看一些信息,比如断点,i b. bt 查看函数调用栈. n 执行下一条指令,但不会进入到调用的函数. s, 同n,但会进入到调用的函数…
一.多线程调试 多线程调试可能是问得最多的.其实,重要就是下面几个命令: info thread 查看当前进程的线程. thread <ID> 切换调试的线程为指定ID的线程. break file.c:100 thread all  在file.c文件第100行处为所有经过这里的线程设置断点. set scheduler-locking off|on|step,这个是问得最多的.在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?…
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10693247.html 本文以嵌入式 Linux 环境下的 gdb 使用为例,记录交叉编译过程中一个比较关键的问题:configure 过程中 --build, --host, --target 参数的区别. 1. 交叉编译 交叉编译是指在一种平台上编译出运行于另一种平台的程序.这里的平台,涉及硬件和软件两个部分,硬件平台指 CPU 架构,软件平台指操作系统.交叉编译主要针对嵌入式领域…
1.设置环境变量 用户可以在GDB的调试环境中定义自己需要的变量,用来保存一些调试程序中的运行数据.要定义一个GDB的变量很简单,只需使用GDB的set命令. GDB的环境变量和Linux一样,也是以$起头.如: (gdb)set $foo=xxx 使用环境变量时,GDB会在第一次使用时创建这个变量,而在以后的使用中,则直接对其赋值.环境变量没有类型,可以给环境变量定义任意的类型,包括结构体和数组.如果要查看当前的所有环境变量,可以输入: (gdb)show convenience 正是由于环境…
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个对于“段错…
GCC的编译流程分为四个步骤: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 可以看的出来文件大小 gdb 调试 gdb -g tets.c -o test //生成gdb的.o方式,现在开始运行代码 gdb test --开始运行 查看文件 (gdb) l -l每次看10行, l后面可以设置行数,看哪一行. 设置断点 (gdb) b 6--设置断点了,可以删除断点del 1(这个1指的是我设置的第一个断点,前面的6是行…
刚才看了一个CSDN上分享gdb调试工具使用的教程,讲得非常好,推荐到这里: http://blog.csdn.net/liigo/article/details/582231…
0x00 peda peda 安装: git clone https://github.com/longld/peda.git ~/peda echo "source ~/peda/peda.py" >> ~/.gdbinit echo "DONE! debug your program with gdb and enjoy" 使用:例如 echo "source ~/.GdbPlugins/peda/peda.py" > ~/…
1.Gdb的基本调试 示例代码 //e.c #include <stdio.h> void debug(char *str) { printf("debug info :%s\n",str ); } int main(int argc,char *argv[]){ int i,j; j=0; for(i=0;i<10;i++){ j+=5; printf("now a=%d\n", j); } } 1 2 3 4 5 6 7 8 9 10 11 1…
Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for java jdk 6 android sdk 2.2 andrid ndk r7 当然,在windows环境下通过cygwin等工具也是可以实现gdb调试的,我也确实实现过.但是性能实在太低,卡的根本没法用.Linux下直接用gdb调试本地方法是很流畅的. 再确定安装并配置好开发环境之后,就可以开始了.…
GDB它是GNU Debuger缩写,它是GNU发表了unix通过应用程序调试工具. 它被广泛应用于在各种各种生产内部应用.GDB和所有的调试工具经常使用相同的,其主要特点是:监视变量的值.设置断点及单步运行. 注意,在源程序编译时.要使用gcc -g 或 cc -g 或 g++ -g将源程序编译成可运行文件,然后才干使用gdb进行调试. 仅仅有这样,生成的可运行文件才包括调试信息. 參考别人的写一个简单的c程序,在linux下使用gcc编译成可运行文件,然后使用gdb进行调试. 程序源码例如以…
参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标机调试stub共同构成,两者通过串口或TCP连接.使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能.调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在. 就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不…
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5.gdb调试入门 一.背景介绍这个笔记主要介绍开源的程序调试器(gdb)的入门知识,目的是使unix/linux环境的编程新手能够快速学会使用gdb调试程序的方法,同时也是对我使用gdb的一个经验总结.本文假设你能使用简单的unix/linux命令并能用gcc(GNU C Compiler, GNU…
1 小侃GCC 在正式使用gcc之前,我们先来侃侃gcc是啥玩意儿? 历史 如今的GCC是GNU Compiler Collection的简称.既然是Collection,就是指一些工具链的集合. 最初的GCC(当时还仅仅有C编译器,GCC还是GNU C Comiler的简写)是由Richard Stallman开发的,Stallman也是GNUproject的首创者.那时还是在1984年. 随着程序设计语言的发展,GCC逐渐開始支持C语言之外的语言,如C++.Objective-C.Java.…
GDB中print方法并不能直接打印STL容器中保存的变量,想知道STL容器保存的变量,使用如下办法: 1. 创建文件~/.gdbinit: # # STL GDB evaluators/views/utilities - 1.03 # # The new GDB commands: # are entirely non instrumental # do not depend on any "inline"(s) - e.g. size(), [], etc # are extrem…
第一种方法:为程序传递参数5 root@guo-virtual-machine:~/debug# gdb --args factorial 5 第二种方法:为程序传递参数5 (gdb) run 5 方法三: (gdb) set args 5 (gdb) run…
一:为了更好的在GDB中显示STL容器.我们首先要下载一个python脚本 PS:要确定你所安装的GDB能够运行python脚本 cd ~ mkdir .gdb cd .gdb svn co svn://gcc.gnu.org/svn/gcc/trunk/libstdc++-v3/python 二:改动用户文件夹下的.gdbinit文件(将下面文本复制一份即可) #为了更好的在GDB中显示STL容器而运行的python脚本 python import sys #qch是我的username,大家…
GDB:从单线程调试到多线程调试 1. 裸跑GDB 1.1 安装GDB sudo apt-get install gdb 1.2 编译程序 由于需要调试,因此编译的时候需要添加-g编译参数: 1.3 GDB调试运行 1.4 常用调试参数 进入上面那个界面以后,说明正常启动GDB了,目前只是GDB启动了,程序还没有跑起来,输入run可以让程序跑起来,但是这样程序就直接执行结束了,没有被逐行调试,没什么意义,因此通常需要先打断点,再启动程序.下面先列出常用的命令: 命令 简写形式 说明 list l…
1.GDB调试器概述 GDB是GNU开源组织发布的一个强大的程序调试工具,具有查看程序运行状态.设置断点.查看表达式.显示变量等众多功能,是程序员进行Linux编程必须要掌握的一种调试技术. GDB调试工具的优势主要包含以下5个方面: (1)用户可以在程序运行过程中查看运行的状态: (2)用户可以在程序中任何需要的地方设置断点,并暂停程序的执行: (3)当程序暂停时,用户可以随时查看程序中各表达式.变量值以及内存值: (4)程序暂停时用户可以进行单步调试,依此检查程序每步运行的结果是否跟预测值一…
陈皓:用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点…
一.概述   GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.没有统一的界面,所有的操作都是通过命令的方式进行提供.对于习惯了图形界面方式进行调试的猿猿来说可能不是很顺手,但是如果你在linux下面开发,却不得不适应,很多疑问和问题,都必须通过gdb去定位,用的久了,它除了没有像VC.BCB等 IDE的调试界面外,其它的功能相对于可视化的调试工具都有过之无不及.所以,熟练掌握和使用gdb的调试方法将会使你在linux下面编程时如沐春风,左右逢缘.   一般来说,GDB主要做的事情…
title: linux下使用gdb对php源码调试 date: 2018-02-11 17:59:08 tags: --- linux下使用gdb进行php调试 调试了一些php的漏洞,记录一下大概的过程 安装编译php sudo apt-get install -y autoconf libtool re2c libxml2-dev openssl libcurl4-openssl-dev libbz2-dev libjpeg-dev libpng12-dev libfreetype6-de…
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 在window下我们习惯了IDE的各种调试按钮,说实话确实挺方便的,但到了Linux下,没有那么多的IDE支持我们调试,但是Linux有也有强大的命令行C/C++的调试工具--GDB,GNU提供的开源调试工具. 刚开始不习惯,使用多了我们就会喜欢上他,程序调试的单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量.GDB都有,此外gdb还可以生成程序非法执行后core dump文件,这个文件有快…
前  言 关于GDB工具 GDB工具是GNU项目调试器,基于命令行使用.和其他的调试器一样,可使用GDB工具单步运行程序.单步执行.跳入/跳出函数.设置断点.查看变量等等,它是UNIX/LINUX操作系统下强大的程序调试工具.GDB支持多种语言,包括Ada.汇编.C/C++.D.Fortran.GO.Objective-C.OpenCL.Modula-2.Pascal和Rust. GDB具有一种"远程"模式,此种模式多半是在为嵌入式系统进行调试时使用,远程操作指的是:GDB在一部机器内…
GDB的简单使用一 一.概念 二.GDB的基本使用方法一 调试前预备知识 获取进程的内核转储 启动gdb调试 1.启动 2.设置断点 3.运行程序 4.显示栈帧 5.显示变量 6.显示寄存器 7.单步执行 8.继续执行 9.监视点,监控变量在何处改变 10.删除断点和监视点 11.改变变量的值 12.生成内核转储文件 总结: 一.概念 Ptrace 是一个系统调用,提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值.其基本原理是:当使用了ptr…
作者:徐汉彬链接:https://zhuanlan.zhihu.com/p/21493018来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.AMS是一个主要采用PHP语言实现的活动运营平台, CGI日请求3亿左右,高峰期达到8亿.然而,在之前比较长的一段时间里,我们都采用了比较老旧的基础软件版本,就是PHP5.2+Apache2.0.尤其从去年开始,随着AMS业务随…
  a storage class can only be specified for objects and functions extern修饰一个struct报错,错误原因如上,C++中存储类修饰符有auto.register.extern.static,这几种修饰符只能修饰对象或者函数,这里用extern来修饰struct是错误的. g++生成动态链接库的命令 -shared表示是标准对象,-fPIC表示函数能够重定向. g++ -o libThreadPool.so -shared -…
作为一个嵌入式Linux的初学者,我知道我可能将长期处于初学者阶段,因为我至今仍然没有能够摸索出一条很好的道路让我由初学者进入到更高级阶段.但是我始终没有放弃,本篇文章就是用来记录我学习嵌入式Linux的历程.我想,通过不断编辑,不断总结修改本文,或许我还真能够探索出一条最佳的路线来,但愿最终能够帮到那些后来人吧.同时,也希望看到这篇文章的高手们能够给小弟指一条明路,小弟将不甚感激. 第一阶段 熟悉平台 工欲善其事,必先利其器.既然是学习Linux,那么必然需要先安装一个Linux的发行版,当然…
title: buffer-overflow date: 2016-01-10 14:17:17 categories: information-security tags: buffer-overflow --- Excrcise1 Now, you can write some code. Your job is to print the address of the variable buffer, in the C program stack1.c, and compile the C…