MinGW(Minimalist GNU for Windows)提供了一套简单方便的Windows下的基于GCC程序开发环境。MinGW收集了一系列免费的Windows是用的头文件和库文件;同时整合了GNU的工具集,特别是GNU程序开发工具,如经典的gcc,g++,make等。MinGW是完全免费的自由软件,它在Windows平台下模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好的基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。简单的说,它是个精简的C/C++编译器,它实际上是将经典的开源C语言/C++编译器GCC/G++移植到了Windows下,并且包含了Win32API,因此可以将源代码编译生成Windows下的可执行程序。虽然VC6等编译器,只要点击鼠标就可以完成编译,但它会自动生成一大堆工程文件,让初学者摸不着头脑,而MinGW则只会生成一个可执行文件。
 
gdb调试测试代码(test.c):
#include <stdio.h>

void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
} int main(void)
{
int a=,b=;
swap(&a,&b);
printf("a = %d ,b = %d\n",a,b);
return ;
}

要支持调试,在编译时要加入-g选项,编译命令

gcc -g test.c -o test.exe

gdb调试加载文件:

gdb test.exe

出现gdb命令行:

GNU gdb (GDB) 7.6.
Copyright (C) Free Software Foundation, Inc.
License GPLv3+: GNU GPL version or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "mingw32".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from D:\mypro\C\test.exe...done.
(gdb)

gdb调试命令表:

命令 解释 简写
file 加载一个可执行文件,也可以在运行gdb的时候加载,两种方法都不会运行程序。
list 列出可执行源码的一部分,通常在程序开始运行前执行,用来设置断点。 l
next 单步调试,不进入函数。 n
step 单步执行,进入函数。 s
run 运行加载了的程序。 r
continue 继续执行程序。 c
quit 退出调试。 q
printf 输出指定的变量的值,变量要在程序运行处可见。 p
break 设置断点。 b
info break 查看断点的信息。 i b
delete 删除断点。 d
watch 监视一个变量的值,一旦发生变化,程序将会被暂停执行。 wa
help 查看gdb的帮助信息。 h
1.l命令,列出部分代码:
(gdb) l

   void swap(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
} int main(void)
{
int a=,b=;
(gdb)

继续输入l命令可以继续列出后面的代码,直到文件里代码列完

(gdb) l
swap(&a, &b);
printf("a = %d ,b = %d\n",a,b);
return ;
}(gdb) l
(gdb) Line number out of range; test.c has lines.
2.start命令,开始运行,会停到main入口处:
(gdb) start
Temporary breakpoint at 0x401491: file test.c, line .
Starting program: D:\mypro\C/test.exe
[New Thread .0x18c4]
[New Thread .0x2418] Temporary breakpoint , main () at test.c:
int a=,b=;
3.n命令:单步调试,不进入函数,跳到第12行:
(gdb) n
swap(&a,&b);
4.s命令:单步调试,进入函数,跳到第4行:
(gdb) s
swap (a=0x61ff2c, b=0x61ff28) at test.c:
int temp = *a;
5.b命令设置断点(b + 第n行代码的行数):
(gdb) b
Breakpoint at 0x401478: file test.c, line .
6.r命令,运行程序,直到下一个断点就停:
The program being debugged has been started already.
Start it from the beginning? (y or n)
...
Breakpoint , swap (a=0x61ff2c, b=0x61ff28) at test.c:
*b = temp;
7.p命令,输出制定的变量的值,变量要在程序运行处可见:
(gdb) p *a
$ =
(gdb) p *b
$ =
(gdb) p a
$ = (int *) 0x61ff2c
(gdb) p b
$ = (int *) 0x61ff28

next一下,再看b的值:

(gdb) n
}
(gdb) p *b
$ =
8.i b命令,查看断点信息:
(gdb) i b
Num Type Disp Enb Address What
breakpoint keep y 0x00401478 in swap at test.c:
breakpoint already hit time
9.d命令,删除断点,不加断点位置即删除所有断点:
(gdb) d
Delete all breakpoints? (y or n) [answered Y; input not from terminal]
(gdb) i b
No breakpoints or watchpoints.
10.没有断点后,再试一下r命令,可以看到,执行完了程序:
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) [answered Y; input not from terminal]
error return ../../gdb-7.6./gdb/windows-nat.c: was
Starting program: D:\mypro\C/test.exe
[New Thread .0x1460]
[New Thread .0x5e0]
a = ,b =
[Inferior (process ) exited normally]
11.q命令,退出gdb:
(gdb) q

MinGW的gdb调试的更多相关文章

  1. 为DEV C++/CodeBlock配置gdb调试遇到的问题

    DEV C++和CodeBlock都只是一个IDE,不能编译调试,需要自己配置MINGW和gdb调试 1.MINGW 在这下载mingw-get-setup.exe安装即可. https://sour ...

  2. GDB 调试 ---转 比较全的东东

    转自 程序人生:http://www.programlife.net/gdb-manual.html Linux 包含了一个叫gdb 的GNU 调试程序.gdb 是一个用来调试C和C++程序的强力调试 ...

  3. GDB调试教程

    简介 GDB(GNU debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具.可以使用它通过命令行的方式调试程序.它使你能在程序运行时观察程序的内部结构和内存的使用情况.你也可以使 ...

  4. GDB调试手册[转]

    Linux 包含了一个叫gdb 的GNU 调试程序.gdb 是一个用来调试C和C++程序的强力调试器.它使你能在程序运行时观察程序的内部结构和内存的使用情况.以下是 gdb 所提供的一些功能:它使你能 ...

  5. GDB调试命令小结

    1.启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息.gdb program //最常用的用gdb启动程序,开始调试的方 ...

  6. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  7. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

  8. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  9. gdb调试PHP扩展错误

    有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gdb 首先,使用ulimit -c命令,查 ...

随机推荐

  1. python_paramiko_SSHException Invalid requirement, parse error at

    不加sleep(0.5)会出现SSHException: Invalid requirement, parse error at " '' "问题,原因暂时未知. 结论如下 如果不 ...

  2. Python3基础 str while+iter+next 字符串的遍历

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. linux下去掉pdf的密码(前提:知道密码)

    一.背景 Linux jello 4.16.3 SMP Thu Apr 19 07:32:02 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 二.去掉密码 2.1 先 ...

  4. IDEA,RubyMine等JetBrains系列软件通用破解教程

    此教程不光适用于IDEA,还可以在RubyMine等JetBrains系列软件使用,亲测可用. (1)下载安装你需要的JetBrains系列软件,安装完最好不要打开,直接finish,断开网络. (2 ...

  5. 马尔科夫随机场模型(MRF-Markov Random Field)

    原文: http://blog.sina.com.cn/s/blog_92c398b00102vs3q.html 马尔科夫过程​ 隐马尔科夫过程​​ 与马尔科夫相比,隐马尔可夫模型则是双重随机过程,不 ...

  6. bootstrap栅格系统进行偏移格式

    本文为博主原创,转载请注明出处: offset偏移都是向右偏移,且只能向右偏移,例: col-md-offset-2,向右偏移两列. col-md-pull-偏移数值         //向左偏移 c ...

  7. C# WinCE项目 VS2008 单例窗体实现

    项目现有主界面FormMain,模板界面FormModel,其余5个子界面皆继承自模板. 现在想要实现在主界面下可以打开任意子界面,并且可以随时关闭.当打开的子窗体未执行Close事件时,要保证每次显 ...

  8. NS3 实验脚本的编写步骤

    第一步:配置主机,安装模块 (1)创建N个节点: NodeContainer nodes; nodes.Creat(N); 比如我目前接触到的PointToPoint,N就是2 (2)利用拓扑助手He ...

  9. Ubuntu 12.04 安装JDK

    为了在Ubuntu上安装好eclipse,按照步骤先进行JDK的安装. (1) 新建java文件夹 命令行操作: (2) 下载解压JDK安装包后无法移动文件夹至File System 移动时提示:Pe ...

  10. 关于react native的快捷键和常用规范

    一:快捷键 1.让其自更新----shift+cmd+z 选择热更新 2.cmd+r ---重新刷新 3 二:常用规范: 1.文件也是一种组件 所以应该命名规则和组件名的命名规则相同  -----使用 ...