GDB使用例子】的更多相关文章

GDB使用例子 一般来说GDB主要调试的是C/C++的程序.要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中.使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点.如: > gcc -g hello.c -o hello> g++ -g hello.cpp -o hello 如果没有-g,你将看不见程序的函数名.变量名,所代替的全是运行时的内存地址.当你用-g把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用gdb来调试他. 启动GDB的方法有以…
在很多人的眼里,C语言和linux常常是分不开的.这其中的原因很多,其中最重要的一部分我认为是linux本身就是C语言的杰出作品.当然,linux操作系统本身对C语言的支持也是相当到位的.作为一个真正的程序员来说,如果没有在linux下面用C语言编写过完整的程序,那么只能说他对C语言本身的理解还相关肤浅,对系统本身的认识也不够到位.作为程序员来说,linux系统为我们提供了很多理想的环境,这其中包括了下面几个方面,        (1)完善的编译环境,包括gcc.as.ld等编译.链接工具   …
GDB调试例子的汇编堆栈 代码 直接-m32编译出现问题 编译64位Linux版本32位的二进制文件,需要安装一个库,使用指令sudo apt-get install libc6-dev-i386 编译成功,进入gdb调试界面 在main处设置断点.运行并获取汇编代码查看各寄存器状态 主函数栈基址为0xffffd104,值为0 call指令将下一条指令地址入栈,%esp.%ebp值发生变化 上一个函数的基址入栈,从当前%esp开始作为新基址,原地址压栈保存 为传参做准备 实参计算在%eax中进行…
我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练掌握C语言是最基本的一项技能.关于如何学好C语言,以及C语言话题的讨论,网上有很多经典的文章,我就不一一列举了.在这里,我只想谈一点我个人的体会:刚毕业时,我来到一家比较大的软件公司工作,而公司的工作模式是每个人只负责一个小模块.这样工作两年后,我自认为我的C语言水平已经很高了.后来,我来到现在这家公司.由于…
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.…
http://blog.csdn.net/hzhsan/article/details/38227647…
网络上已经有很多gdb调试的文章了,为什么我还要写这篇文章呢,因为本文是写给gdb新手的,目的就是通过一个简单的例子来让新手很快上手.一旦上手入门了,其他的问题就可以自己去搜索搞定了.右边是gdb的Logo,为啥是条吹泡泡的小鱼呢?我也不懂啊.   本文的例子基于以下代码 main.c: #include <stdio.h> 2 void print_str(char* str){ printf("%s", str); str[] = 'a'; printf("\…
一 单步执行和跟踪函数调用 先给出一段代码,可以用下面介绍的例子. #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…
[转] 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内核或者扩展错误等…
源文件移动后gdb不显示代码的原因   问题 我们从一个最简单的C语言程序开始.源文件main.c在 用户目录gdb文件夹下. florian@florian-pc:~/gdb$ cat main.c int main() { return 0; }; 然后将源文件编译为main(需要调试选项-g),并将main.c移动到src/main.c下,然后对main进行调试. florian@florian-pc:~/gdb$ gcc main.c -o main -g florian@florian…
第一部分牛刀小试:启动GDB开始调试 1.       编译带调试信息的可执行程序:用gcc(g++)编译的时候带上-g选项即可 2.       启动GDB开始调试 (1)gdb program       ///最常用的用gdb启动程序,开始调试的方式 (2)gdb program core   ///用gdb查看core dump文件,跟踪程序core的原因 (3)gdb program pid    ///用gdb调试已经开始运行的程序,指定pid即可 3.       应用程序带命令行…
Gdb调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办法:attach pid Attach是调试进程的常用办法,只要有可执行程序以及相应PID,即可工作.当然,为方便调试,可以在进程启动后,设定sleep一段时间,如30s,这样即可有充足的时间来attach. 方法2: set follow-fork-mode child + main断点 当设置s…
中文快速入门: http://coolshell.cn/articles/3643.html (关于多线程的部署说的并不太对) 进阶: 多进程相关概念: inferiors 是什么? http://moss.cs.iit.edu/cs351/gdb-inferiors.html 多线程怎么调试: 分 all-stop 和 non-stop 两个模式. all-stop 模式下,一个断点.所以线程全部终止运行. 使用 set non-stop on命令可以进入non-stop模式.其他线程不会受到…
GDB的深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存为文件 gdblianxi.c 中,用GCC编译. 在上面的命令行中,使用-o参数指定了编译生成的可执行文件名为 gdblianxi,使用参数-g表示将源代码信息编译到可执行文件中.如果不使用参数-g,会给后面的GDB调试造成不便. 下面输入"gdb"命令启动GDB,将首先显示GDB说明: 下面使用"file"命令载入被调试程序 gdblianxi(这里的 gdblia…
GDB 是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行 序列,形成脚本.UNIX 下的软件全是命令行的,这给程序开发提供了极大的便利,命令行 软件的优势在于, 他们可以非常容易的集成在一起, 使用几个简单的已有工具的命令,可就 以做出一个非常强大的功能. 于是 UNIX 下的软件比 windows 下的软件更能有机的结合,各自发挥各自的长处,组合 成更为强筋的功能.而 windows 下的图形软件基本上各自为营,互相不能条用,很不利于 各种软件的相互集成.在这里并不是要…
windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境   http://rongmayisheng.com/post/windows%E4%B8%8B%E7%94%A8eclipsegoclipse%E6%8F%92%E4%BB%B6gdb%E6%90%AD%E5%BB%BAgo%E8%AF%AD%E8%A8%80%E5%BC%80%E5%8F%91%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83   目前go语言在window或者lin…
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓“寸有所长,尺有所短”就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能:     A.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    B.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)    C.当程序…
转载请注明http://www.cnblogs.com/adong7639/p/4119467.html 无意中发现了Visual GDB这个工具,可以再Visual Studio中进行Android开发吸引了我,前不久,看到说是微软将.net开源,可以用C#语言在Visual Studio去构建跨平台的移动应用开发 iOS.Android apps,不过目前目前这方面还不多,利用Visual GDB马上就可以利用强大的VS来开发Android程序了,而且还可以开发调试linux下面的程序. >…
用GDB调试程序GDB概述 2使用GDB 5GDB中运行UNIX的shell程序 8在GDB中运行程序 8调试已运行的程序 两种方法: 9暂停 / 恢复程序运行 9一.设置断点(BreakPoint) 9二.设置观察点(WatchPoint) 10三.设置捕捉点(CatchPoint) 10四.维护停止点 11五.停止条件维护 12六.为停止点设定运行命令 12七.断点菜单 13八.恢复程序运行和单步调试 13九.信号(Signals) 14十.线程(Thread Stops) 15查看栈信息…
查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的.当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入"栈"(Stack)中.你可以用GDB命令来查看当前的栈中的信息. 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息.如: (gdb) bt #0 func (n=250) at tst.c:6 #1 0x08048524 in main (argc=1, argv=0xbffff6…
GDB深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存到文件 gdb-sample.c 中,用GCC编译之 #include <stdio.h> ; int tempFunction(int a, int b) { printf("tempFunction is called, a = %d, b = %d /n", a, b); return (a + b); } int main() { int n; n = ; n++; n-…
GDB深入研究 一.GDB代码调试 (一)GDB调试实例 在终端中编译一个示例C语言小程序,保存到文件 gdb-sample.c 中,用GCC编译之 #include <stdio.h> int nGlobalVar = 0; int tempFunction(int a, int b) { printf("tempFunction is called, a = %d, b = %d /n", a, b); return (a + b); } int main() { in…
利用GDB调试汇编代码 首先编写c语言原代码,我使用的是同学分析过的代码 #include<stdio.h>short addend1 = 1;static int addend2 = 2;const static long addend3 = 3;static int g(int x){    return x + addend1;}  static const int f(int x){    return g(x + addend2);}int main(void){    return…
使用 GDB 调试多进程程序 GDB 是 linux 系统上常用的调试工具,本文介绍了使用 GDB 调试多进程程序的几种方法,并对各种方法进行比较. 3 评论 田 强 (tianq@cn.ibm.com), 软件工程师, IBM中国软件开发中心 2007 年 7 月 30 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强大.对于较为复杂的系统,比如多进程系统,如何使用 GDB 调试呢?考…
一.GDB 我用的是 GCC+POWERSHELL+GDB,  GDB刚刚接触也有很多要记的. 二.一个调试示例 tst.c #include <stdio.h> int func(int n) { int sum=0,i; for(i=0; i<n; i++) { sum+=i; } return sum; } int main() { int i; long result = 0; for(i=1; i<=100; i++) { result += i; } printf(&q…
参考资料:GDB调试精粹及使用实例 # 调试实例 #include <iostream> #include <cstring> using namespace std; ][]; int ax,ay; int bx,by; ]={,,-,}; ]={,,,-}; ; ; int n,m,k; void dfs(int d,int t,int curx,int cury) { if(t>_min) return ; || cury< || cury>n- || cu…
为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可. #apt-get install libc6-dbg libc6-dbg其实只是包含libc6中的debug symbol. 如何判断一个可执行文件或者动态链接库含有debug symbols,可以使用readelf来验证. #readelf -w prog_name 也许你会想直接去下载gli…
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能: 启动程序,可以按照工程师自定义的要求随心所欲的运行程序. 让被调试的程序在工程师指定的断点处停住,断点可以是条件表达式. 当程序被停住时,可以检查此时程序中所发生的事,并追索上文. 动态地改变程序的执行环境. 不管是调试Linux内核空间的驱动还是调试用户空间的应用程序,掌握gdb的用法都是必须.而且,调试内核和调试应用程序时使用的gdb命令是完全相同的,下面以代码清单22.2的应用程…
2015.1.22 c高级的环境搭建:GCC编译器:全称 GNU CC,是GNU工具(tool chain)的一种,源码编译成机器码,gcc的编译依赖于很多小工具4.3.3和3.4.3版本的比较稳定 GCC编译分为四个步骤:(用WC命令可以分别查看每个阶段代码的大小,可以比较一下,ls -l 也能看出大小) 1.预处理 ->cpp预处理文件*.i gcc -E2.编译 ->cc1汇编文件*.s gcc -S3.汇编 ->as汇编文件*.o gcc -c4.链接 ->ld可执行文件*…
正文转自:http://www.cppblog.com/lucency/archive/2012/08/09/59214.html 之前在网上搜索了好久使用sublime调试C和C++的文章,但是徒劳无功:后来才醒悟sublime下的调试C/C++其实和命令行中调试程序是一样的,所以即使是装了sublime GDB后,一样是要依据gdb手册那种调试步骤的. 正文: 这篇文章基本上是摘自gdb手册,除此之外就是加了实际的代码样例,这样可以更清楚的看到一些命令的执行效果.当然,这儿不会涉及到所有的g…