GDB使用小记】的更多相关文章

By francis_hao Nov 7,2016   记录GDB常用功能.   GDB可以让你查看一个程序在运行时其内部发生了什么,或者当一个程序崩溃时发生了什么(通过使用GDB查看core dump文件)   基础   启动GDB gdb            仅启动GDB,未加载程序文件,可通过file program进行加载,也可以在启动时添加-q选项,不输出版本信息 gdb program        启动GDB并加载程序文件 gdb program core    启动GDB加载程…
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东----->Linux Core Dump Linux Core Dump 引用 文章 <Linux Core Dump>  http://www.cnblogs.com/hazir/p/linxu_core_dump.html 的话: 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的…
上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352959.html 这儿继续学习下,poco在linux 下用cmake 编译. 从文档开始编译出错 从poco的 README 文件上可知: " BUILDING ON UNIX/LINUX/MAC OS X=============================== For building o…
ref:http://sunyongfeng.com/201506/programmer/tools/gdb.html 简介 GDB,GNU Debugger,特性如下: GDB具备各种调试功效,可对计算机程序的运行进行追踪.警告.使用者可以监控及修改程序内部变量的值,甚至可在程序的正常运行之外调用函数. GDB支持多数处理器架构 持续开发中 支持远程调试 支持内核调试,KGDB 从事嵌入式软件开发两年来,主要在以下几方面使用GDB: 查看.修改运行时变量: 多线程调试,查看当前线程运行状态(以…
atop分析小记 atop这个工具相当NB 项目中需要用到它的磁盘使用率统计值,为了一探究竟,挖了下它的代码 atopsar atopsar实际就是atop的一个链接指向. 从atop.c的main源码可以看到 int main(int argc, char *argv[]) { char *p; if ((p = strrchr(argv[0], '/'))) p++; else p = argv[0]; if (memcmp(p, "atopsar", 7) == 0) retur…
1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDBServer发出命令,而开发板上的gdbserver就会向应用程序发出信号,使应用程序停下来或者完成其他一些工作. 2.安装GDB和GDBServer(gdb-7.4.tar.bz2 ) 2.1.GDB 1.下载: http://ftp.gnu.org/gnu/gdb/  2.解压:tar xvf…
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. keystone 是 openstack的各模块之间调用时候采取的认证,主要方式是在WSGI接口下增加filter,对调用者做身份验证. Paste.deploy 详细介绍: paste.deploy 通过 loadapp(configPath)来启动WSGI应用, 其中configPath 包含…
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的Logo,为啥是条吹泡泡的小鱼呢?我也不懂啊.   本文的例子基于以下代码 main.c: #include <stdio.h> 2 void print_str(char* str){ printf("%s", str); str[] = 'a'; printf("\…
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程序中的其他线程才会继续运行.这个限制使得被调试的程序不能够像真实环境中那样运行--当某个线程断在一个断点上,让其他线程并行运行. GDBv7.0引入的non-stop模式使得这个问题迎刃而解.在这个模式下, 当某个或多个线程断在一个断点上,其他线程仍会并行运行 你可以选择某个被断的线程,并让它继续运…
1.查看源码: list [函数名][行数] 2.暂停程序 (1)设置断点: a.break + [源代码行号][源代码函数名][内存地址] b.break ... if condition   ...可以是上述任一参数,condition是条件.例如在循环体中可以设置break ... if i = 100 来设置循环次数 (2)观察断点: a.watch + [变量][表达式]  当变量或表达式值改变时即停住程序. b.rwatch + [变量][表达式] 当变量或表达式被读时,停住程序.…
gdb的FID从1开始,并且FID唯一,从数字化时开始,每个图形对应唯一的FID,删除图形亦删除对应的FID.FID可能出现中断的情况. shp的FID从0开始,并且永远连续.删除图形,则编号在其下面的图形,会相应上移.…
1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方式gdb program core //用gdb查看core dump文件,跟踪程序core的原因gdb program pid //用gdb调试已经开始运行的程序,指定pid即可gdb attach pid //用gdb调试已经开始运行的程序,指定pid即可 2.调试命令(1)执行命令模式-bat…
一 单步执行和跟踪函数调用 先给出一段代码,可以用下面介绍的例子. #include <stdio.h> int add_range(int low, int high) { int i, sum; for (i = low; i <= high; i++) sum = sum + i; return sum; } int main(void) { ]; result[] = add_range(, ); result[] = add_range(, ); printf(], resul…
一.简介 GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上.它同时也是Linux系统中的默认调试器.GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统.一般来说,GDB主要可以帮助我们完成以下四个方面的功能 .启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. .可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) .当程序被停住时,可以检查此时你的程序中所发生的事. .动态的改变你程序的执行环境. 二.配置 http://…
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值: 可见此时主函数的栈基址为0xffffd068,用x(examine)指令查看内存地址中的值,但目前…
1.如题: gdb可以调试python的pdb么? 答案:可以,实验如下. 2.实验: 生成一个a.py代码文件,代码如下: import pdb a = 1 print "111",apdb.set_trace()a = 2 print "222",a gdb python (gdb) b mainBreakpoint 1 at 0x400770: file ./Modules/python.c, line 23.(gdb) b exitFunction &quo…
想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 b func    可以设置到func函数的断点 info break 可以用来查看断点 r    (run的首字母)运行程序 n     (next首字母)下一步,单步调试,不会进入函数内 watch  i    用以设置观察点,可以通过info break 查看断点后,删除相应的观察点处设置的…
MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----------->类的属性 一行------------->一个对象 3.建库代码 1.create database 数据库名 2.带字符集 3.带校验规则 collate 验证规则 create database 数据库名 character set utf8 collate utf8_gener…
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + vv; } static const int f(int xx) { return g(xx); } int main(void) { return f(9)+ val; } 分析过程 通过gcc - g gdb.c -o gdb -m32指令在64位的机器上产生32位汇编 进入gdb调试,先在main函数…
有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查看系统是否会生成 core文件. #返回结果可能是0 ulimit -c 当返回结果为0时,说明系统不会生成core文件,这个时候使用ulimit -c命令改变系统的默认设置 ulimit -c unlimited #或者 ulimit -c n #n大于0的数字 这样当程序运行错的时候,就会把运行…
基本i threads 等操作略过,只谈线程同步.异步控制: 先点到,gdb attach到主线程t1 时,所有线程都会停止,所谓同步异步效果,是指在apply continue到所有线程之后, 再切换到t2,发现t3还在运行(如果t3卡在了断点上,也算运行,只不过运行后停止了). 再点到,gdb 直接attach 到非主线程时,是不影响,其他线程的启停的.无论如何设置non-stop或者schedule选项. 以下,重点说下non-stop和schedule选项: 1 non-stop 只能在…
写此文解决两个问题: 1.在Sublime Text中实现编译运行含有外部输入的C程序(如含有scanf的程序); 2.在程序运行完毕后不退出cmd,能继续用gdb调试程序. 一.MinGW 下载地址:https://sourceforge.net/projects/mingw/,点击”download“后等待几秒钟便会弹出下载框. 相关介绍:http://blog.csdn.net/k1988/article/details/4375382(没找到原作者地址,引用了一篇转载的) 安装与配置参考…
gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值: 可见此时主函数的栈基址为0xffffd058,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也…
·代码(实验楼中的代码,改了部分数值)命名为test.c int g(int x) { return x + 7; } int f(int x) { return g(x); } int main(void) { return f(3) + 5; } ·在64位的机器上产生32位汇编(使用指令为:gcc - g test.c -o test -m32),然后使用gdb test指令进入gdb调试器,进入后在main这里设置一个断点,然后运行: · ·使用指令:disassemble获取汇编代码,…
关于Gdb的使用,请参考:http://blog.csdn.net/haoel/article/details/2879…
定断点b line.会返回一个断点号(breakpoint-no). 输出p val.可以夹杂类型装换.解引用. 遇到断点自动执行命令commands breakpoint-no. 停止执行s. 退出GDBq.…
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调试,先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码: 通过info registers查看使用的寄存器: 此时主函数的栈基址为0xffffd038,用x(examine)指令查看内存地址中的值,目前%esp所指堆栈内容为0,%ebp所指内容也为0: Step6:使用d…
[转] http://www.syyong.com/php/Using-strace-GDB-and-tcpdump-debugging-tools-in-PHP.html 在php中我们最常使用调试方式是输出打印方式,比如通过echo.var_dump输出信息到终端或者通过fwrite.file_put_contents将信息写入到文件中.这种普通方式能帮我们解决绝大部分调试问题.但仍然有些问题是需要借助其他工具来分析的,比如死循环,程序执行时间超预期,占用cpu过高,php内核或者扩展错误等…
Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就不再赘述,直接记录git命令吧! 文章会尽量按照使用git的顺序来记录,不定时的更新,版面可能会较为杂乱. 你的计算机上是否有Git? windows版本的安装: Git下载 ,下载之后双击安装即可. 仓库怎么创建? 仓库(repository),即是一个项目,你要对这个项目进行版本管理.使用如下命…
GDB调试汇编堆栈 分析过程 C语言源代码 int g(int x) { return x+6; } int f(int x) { return g(x+1); } int main(void) { return f(5)+1; } 使用gcc -g exp1.c -o exp1 -m32指令在64位机器上产生32位汇编. 进入gdb调试器. 在main函数处设置一个断点. 使用run指令开始运行程序,返回main函数运行的结果. 使用disassemble指令获取汇编代码. 使用info re…