首页 > 编程知识 正文

gdb常用调试命令(程序g代码大全)

时间:2023-05-05 21:45:22 阅读:84252 作者:508

gcc是linux系统集成的编译器。 在linux环境下编辑程序时,首先必须克服的是没有集成开发环境的一键操作带来的故障。 其中包括命令行操作、编译选项设置、文件相关性写入(makefile )等问题。 下面主要介绍gcc的常用命令行参数及其相应的作用。 (编译c文件时,只要将以下命令的gcc替换为g,源文件的后缀就会是. C/.cpp/.c /.cc等)

基本格式: GCC [选项]文件1文件2 .//如果不包含参数,则使用缺省参数依次执行编译、程序集和连接操作,生成的可执行文件名为a.out公共参数:-E //不进行汇编操作,生成的是汇编文件(内容是汇编语言-c //编译和汇编,但不链接。 也就是说,只生成可重新定位目标文件(.o ),二进制文件不生成完整的可执行文件-o filename //,而是将操作后的内容输出到文件名指定的文件-static //动态文件使用静态链接而不是动态链接进行链接操作-g //编译时生成调试程序信息- -生成--save-temps //编译过程的中间结果文件(预处理文件(x.ii ),汇编在由PATH指定的目录下相关的include文件-lxx //其中,xx是指定的库,对于Linux环境中的库,静态库扩展名为. a,动态库扩展名为. so,一般情况下, 添加到libm.so库时使用参数;如果不指定,则搜索默认的库函数路径。 -std=xx //指定用于编译的语言标准- x语言//指定要编译的文件的语言。 不是编译器根据文件的后缀自己判断。 也就是说,缺省情况下,gcc根据文件后缀判断要使用的编程语言。 例如,使用文件名hello作为源文件名是不合适的。 使用hello.c-Wall //输出简单错误或可能有问题的警告-Wextra //输出-Wall中不包含的警告等-Werror //输出错误警告- d name=定义中决定了编译器的优化级别,优化级数越高,执行效率一般会越高,但优化会改变原程序的结构,进行缓冲区溢出实验时可能需要的选项- f stack-protector -zexecstack//enable可执行堆栈,缺省情况下禁用///(echo0/proc/sys/kernel/randomize _ va _ space将关闭地址随机化。 这是另一个命令

# # includeiostreamusingnamespacestd; int main () {cout'helloword!' 电子邮件; 返回0; }上面的main.cpp的编译过程如下。

以下是一些常见的命令。

指令1 :将源文件编辑为可执行文件

美国大奖赛

执行此命令时,会将:a.out文件添加到目录中

实际上,也可以为生成的文件指定名称。

g main.cpp -o main//在此将生成文件的名称指定为main

命令将在目录中生成一个主文件。

指令2 :编译文件,输出到main.s

编译g-s-omain.s主文件//主文件,然后使用-o选项将中间的. s文件保存到主文件

ge/1533200260447a8350e4fb1?from=pc">

其实上面的指令可以采用更精简的格式:

g++ -S main.cpp > main1.s//表示把编译后的文件写入到main1.s中

指令3:生成可重定位目标文件(即编译后的文件)

g++ -c main.cpp//生成main.o,不进行链接操作,即仅进行预处理、编译、汇编,而不进行链接

指令4:输出一些简单的错误以及一些可能存在问题的警告

g++ -Wall main.cpp -o output//将输出文件名指定为output

为了让编译器提示错误,此时先把上面的helloword程序修改,删除cout语句后的分号

此时可以,编译器确实给出了警告信息:

指令5:通过-save-temps选项输出所有中间代码

g++ -save-temps main.cpp

为了演示次命令的效果,此时清空所有文件,只保留main.cpp文件

执行上面的指令后:

生成目录中确实多了几个中间文件

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。