gcc程序编译和gdb程序调试的基本选项

GCC程序编译

基本格式:gcc [options] [filename]

-o 输出可执行文件,如果不给出这个选项,则默认输出a.out可执行文件;如:gcc hello.c -o hello

-c 只编译,不连接为可执行文件,生成为以.o为后缀名的目标文件;如:gcc -c hello.c

-S 只激活预处理和编译,就是指把文件编 译成为汇编代码。如:gcc -S hello.c

   -O 优化编译、连接;-O2对-O再进行优化编译、连接;

   -g 编译时,对函数库产生符号信息;(注:当在gdb中调试时,这个必选);

   -D 定义宏命令;相当于:#denfine

   -static 静态链接库文件;一般默认的为动态;

   -Wall 生成警告信息;

   -w不生成任何警告信息;

GDB程序调试

基本步骤:

1、启动调试;如:gdb filename

2、在指定地方停住程序;

3、程序停住时,可检查程序的状态;

4、退出;

注:如调试,必须在gcc中的选项中加入-g

list(l):查看程序;

break(b):设置断点;可以是函数名、行号、文件名:行号、行号 if 条件;

info break:查看断点;

delete:删除断点,如:delete 断点编号;

run(r):运行;

next(n):单步执行,不进入子函数;

step(s):单步执行,进入到子函数中;

continue(c):继续;

print(p):查看变量;

finish:运行程序,到当前函数结束;

watch:对指定变量进行监控;

quit(q):退出;

时间: 2024-09-19 17:57:58

gcc程序编译和gdb程序调试的基本选项的相关文章

64位Solaris系统上gcc在编译出来的程序默认是32位总结

最近发现一个问题,gcc在64位Solaris上编译出来的程序默认是32位的,而在64位Linux上编译出来的程序默认就是64位的,觉得有点奇怪,在国外的网站上找到原因,原来这是Solaris有意而为之.总结一下,有以下几点: (1)64位的gcc或程序不一定比32位运行快: (2)Studio程序默认是32位的,gcc最好和它行为保持一致: (3)从用户体验出发,以前都是默认生成32位程序,现在一下变成64位,用户可能需要改很多配置: (4)64位Solaris位的gcc可以既编译32位,又编

嵌入式arm linux环境中gdb+gdbserver调试

采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试.目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序.在此我们还不能直接采用linux发行版自带的gdb,需要交叉编译gdb和gdbserver. 一.前言 嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序.采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gd

GDB如何调试没有符号表(未加-g选项的编译)的程序

/********************************************************************* * Author  : Samson * Date    : 01/30/2015 * Test platform: *              3.13.0-24-generic *              GNU bash, 4.3.11(1)-release  * *****************************************

Linux下C程序的编辑,编译和运行以及调试

国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送)国内私募机构九鼎控股打造,九鼎投资是在全国股份转让系统挂牌的公众公司,股票代码为430719,为"中国PE第一股",市值超1000亿元.  -----------------------------------------------------------------------------

安卓开发-编译好的程序无法在手机或模拟器中调试

问题描述 编译好的程序无法在手机或模拟器中调试 程序如图所示,也已经将layout添加进manifest,程序却依然无法运行 另外,在创建android新工程时,系统也没有总动创建main_activity 文件 下图分别为主程序与layout文件开发-编译好的程序无法在手机或模拟器中调试-安卓开发模拟器调试"> 下图为控制台输出 解决方案 http://www.cnblogs.com/jxgxy/p/3669554.html 解决方案二: 出现这个的原因我想是因为你没有在AndroidM

x64无法调试-win8.1系统下VS2010编译64位程序无法调试

问题描述 win8.1系统下VS2010编译64位程序无法调试 win8.1系统下VS2010编译64位程序无法调试,出现下面这个错误:**Microsoft visual Studio 调试监控器(MSVSMON.EXE)未能启动.请通过控制面板中的"添加或删除程序"修复Visual Studio安装.** 解决方案 64位Win7下用VS2010编译OpenSSL64位Win7下用VS2010编译OpenSSL 解决方案二: 你好,你这个回答貌似和我的问题无关啊~

程序-vs2005编译代码后的调试问题

问题描述 vs2005编译代码后的调试问题 用vs2005编译生成了一个exe程序,这个程序是在另外一个程序执行过程中被调用的,怎么能在另一个程序调用此exe的时候用vs2005启动这个exe程序的调试呢,我知道vs有一个附加到进程的功能,但是这个exe程序不是一直存在,只再被调用的时候存在一会儿 解决方案 这个没办法,一般这种情况都是加日志来分析运行时的状态信息.

Linux系统中的gdb程序调试工具的命令知识介绍

在Linux系统中有许多的命令程序来辅助系统的正常和方便运行,那么其中在系统中有着一个叫做gdb命令的程序,那么我们今天就来了解下关于gdb命令的知识吧! 一.常规调试 gdb是Linux下常用的程序调试工具,当然前提是用gcc/g++编译时加上-g参数,这样编译出的可执行程序会加上gdb调试信息. gdb命令不少,但常用的主要包括如下命令: (1)list [file:]functuon 命令缩写是l,查看源码,不加参数时,向下显示源码,加参数-l时,向上显示源码,默认显示10行. 也可以设置

GDB程序调试工具的使用例子

1.启动被调试程序. 2.让被调试的程序在指定的位置停住. 3.当程序被停住时,可以检查程序状态(如变量值). 接下来实践一下,vim test.c #include<studio.h> int main() {     int i;     long result = 0;     for(i=0; i<100; i++){         result+=i;     }     printf("result=%d\n",result);     return 0