GDB调试一】的更多相关文章

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…
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)指令查看内存地址中的值,但目前…
想要使用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 查看断点后,删除相应的观察点处设置的…
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的数字 这样当程序运行错的时候,就会把运行…
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获取汇编代码,…
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…
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…
GDB调试汇编堆栈过程分析 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 使用gdb调试代码. 使用break main指令在main函数处设置断点,然后调试,直到mian函数处. 使用diassemble指令获取汇编代码 查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0 使用命令display /i $pc每次程序中断后可以看到即将被执行的下一条汇编指令…
GDB调试汇编分析 代码 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学.代码借用的是卢肖明同学的代码进行调试运行. GCC编译 使用gcc -g gdbtest.c -o gdbtest -m32命令在64位的机器上产生32位汇编代码 在使用gdb进行调试运行时,有cgdb和gdb两种工具,我建议大家使用张梓靖同学使用的cgdb工具,因为使用时可以随时看到自己的源代码,看到我们的断点在哪里,每一步返回值到了哪行,更加直观. 分析过程 使用b main指令在main函数处设置…
20145337 GDB调试汇编堆栈过程分析 测试代码 #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 f(8) + add…
用Go语言已经有一段时间了,总结一下如何用GDB来调试它! ps:网上有很多文章都有描述,但是都不是很全面,这里将那些方法汇总一下 GDB简介  GDB是GNU开源组织发布的⼀一个强⼤大的UNIX下的程序调试⼯工具.或许,各位⽐比较喜欢那种图形界⾯面⽅方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会 发现GDB这个调试⼯工具有⽐比VC.BCB的图形化调试器更强⼤大的功能.所谓“⼨寸有所⻓长,尺有所短”就是这个道理. 目前支持的语言 (GNU gdb (GDB) 7.8…
20145208 GDB调试汇编堆栈过程分析 测试代码 #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 f(8) + a…
GDB调试汇编分析 代码 #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 f(8) + addend3; } 这次代码因…
  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调试多进程程序 程序经常使用fork/exec创建多进程程序.多进程程序有自己独立的地址空间,这是多进程调试首要注意的地方.Gdb功能强大,对调试多线程提供很多支持. 方法1:调试多进程最土的办法:attach pid Attach是调试进程的常用办法,只要有可执行程序以及相应PID,即可工作.当然,为方便调试,可以在进程启动后,设定sleep一段时间,如30s,这样即可有充足的时间来attach. 方法2: set follow-fork-mode child + main断点 当设置s…
GDB调试32位汇编堆栈分析 测试源代码 #include <stdio.h> int g(int x){ return x+5; } int f(int x){ return g(x)+3; } int main(ing argv,char *argc[]){ return f(7)+19; } main函数汇编代码 g函数汇编代码 f函数汇编代码 调试过程 在汇编调试中单步执行使用si,而display /i $pc该语句可以使得我们每一次单步执行时输出正在执行的语句,i r $xxx则可…
mac上eclipse用gdb调试 With its new OS release, Apple has discontinued the use of GDB in OS X. Since 2005 Apple has steadily been moving away from the GNU toolchain in favor of LLVM. This means that Xcode now uses LLDB instead. LLDB looks to be a very nic…
gdb调试命令 1>. 启动gdb gdb 可执行程序的名字 2>. 查看代码 l -- 查看当前文件 -- 默认main函数 2. 查看其它文件: l 文件名:行号, 显示指定行号的上下文 l 函数名 -- 当前文件 l 文件名:函数名 -- 指定文件 3. 查看默认显示的行数: show listsize 4. 设置: set listsize 行数 3>. 断点操作 1. 当前文件设置断点: b(break) 行号 2. 指定文件: b 文件名:行号 b 函数名 -- 当前文件的这…
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显示出来 3 单步执行 4 运行时修改变量的值 5 跟踪路径 6 线程切换 等等 下面以以下程序为例 当我们要使用GDB进行程序的调试时,在用GCC编译时需要加上-g,如下: GDB之所以能够进行程序的调试也是在于进行编译时的-g选项,当设置了这个选项的时候,GCC会向程序中塞入一下信息,作为GDB调…
GDB调试汇编堆栈过程分析 虚拟机中分析过程 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误: 这时需要使用sudo apt-get install libc6-dev-i386命令安装一个库之后就可以产生汇编代码了. 使用gdb example进入gdb,b example.c:main设置一个函数断点,run启动程序 disassemble获取汇编代码,若命令不带参数,默认的反汇编范围是所选择帧的pc附近的函数.info…
GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o example -m32,在64位机器上产生32位汇编. 测试源代码 #include short addend1 = 1; static int addend2 = 2; const static long addend3 = 3; static int g(int x) { return x + adden…
原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程度的优化,编译成汇编代码(.s.S) l 用汇编器把汇编代码进一步生成目标代码(.o) l 用连接器把生成的目标代码和系统或用户提供的库连接起来,生成可执行文件 格式: l gcc -E test.c//预处理阶段 l Gcc -S test.c//编译阶段 l Gcc -c test.c//汇编阶…
今天总算解决了一个大的bug,爽! 我的程序crash,有了coredump文件,在Linux PC上用arm-linux-gdb debug it. The result is: #0  0x4022b178 in ?? ()(gdb) bt#0  0x4022b178 in ?? ()#1  0x4022b134 in ?? ()#2  0x4022b134 in ?? ()Backtrace stopped: previous frame identical to this frame (…
gdb调试器使用的一般步骤(不断更新完善): 1.编译过程中要用-g参数来添加调试符号——gcc test.c -g: 2.gdb启动可执行文件——gdb a.out: 3.出现gdb符号表示启动成功: 4." l " (小写l)命令可以查看当前代码是否是要执行的代码: 5.断点 b 行号/函数名字——作用是程序执行过程中会自动在断点处暂停,等待指令 info b—— 查看断点列表 d 编号——删除指定编号的断点 6.执行程序 r 回车——程序启动,执行到代码中第一个出现断点处暂停 7…
一.gdb 调试-源代码关联 在调试程序的过程中,可以自由地查看相关的源代码(如果有源代码的话)是一项最基本的特性.gdb 当然也提供了这项特性,虽然不如IDE直观,但在一定程度上要比IDE更加灵活和快捷.gdb之所以能够知道对应的源代码,是因为调试版的可执行程序中记录了源代码的位置:因为源代码的位置在编译之后可能会移动到其它地方,所以gdb还会在当前目录中查找源代码,另外gdb也允许明确指定源代码的搜索位置. 在一个调试会话中,gdb维护了一个源代码查找目录列表,默认值是编译目录和当前工作目录…
20145318 GDB调试汇编堆栈分析 代码 #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 f(8) + adden…
GDB 是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行 序列,形成脚本.UNIX 下的软件全是命令行的,这给程序开发提供了极大的便利,命令行 软件的优势在于, 他们可以非常容易的集成在一起, 使用几个简单的已有工具的命令,可就 以做出一个非常强大的功能. 于是 UNIX 下的软件比 windows 下的软件更能有机的结合,各自发挥各自的长处,组合 成更为强筋的功能.而 windows 下的图形软件基本上各自为营,互相不能条用,很不利于 各种软件的相互集成.在这里并不是要…
[1].终端目录设置到: proj.android[2].make文件的编译选项加上: -g -gstabs+[3].执行编译脚本: sh ./build_native.sh NDK_DEBUG=1[4].将生产的gdbserver push到手机上,找个能写的目录: adb push ./libs/armeabi/gdbserver data/data/tmp[5].启动app[6].终端: adb shell[7].终端: su[8].终端: cd data/data/tmp (到存放gdb…