gdb命令和gcc命令

时间:2019-11-18
本文章向大家介绍gdb命令和gcc命令,主要包括gdb命令和gcc命令使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

gcc/g++命令

使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。

选项:
-c:仅执行编译操作,不进行连接操作;
-o:指定生成的输出文件;
-wall:显示警告信息;
-E:仅执行编译预处理;
-S:将C代码转换为汇编代码;
-g: 在编译时产生调试信息,使用gdb工具时使用。

实例:
假设源程序文件名为test.c

1. 预处理,.c文件 -> .i文件。
gcc -E test.c -o test.i

2. 编译,.i文件 -> .s文件。
gcc -S test.i -o test.s
将预处理过程生成的.i后缀的文件转化成汇编文件,里面存储的是相应的汇编代码,这个过程叫做编译。

3. 汇编,.s文件 -> .o文件。
gcc -c test.s -o test.o
将汇编文件中的汇编代码翻译成相应的机器语言,这个过程叫做汇编。

4. 链接, .o文件 - 可执行程序
gcc test.o -o test
完成链接这个过程,它通过链接器ld将运行程序的目标文件和库文件链接在一起,生成最后的可执行文件

如果有多个源文件,基本上有两种编译方法,假设有两个源文件为test.c和testfun.c:
1). 多个文件一起编译
用法:# gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2). 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
gcc -c testfun.c //将testfun.c编译成testfun.o
gcc -c test.c //将test.c编译成test.o
gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

gcc和g++的区别

  1. gcc和g++的区别主要是在对cpp文件的编译和链接过程中,因为cpp和c文件中库文件的命名方式不同,那为什么g++既可以编译C又可以编译C++呢,这时因为g++在内部做了处理,默认编译C++程序,但如果遇到C程序,它会直接调用gcc去编译.
  2. gcc不能自动链接库文件,一般用g++来链接库文件,非要用gcc的话,一般使用gcc -lstdc++命令
  3. extern “c”对于gcc和g++没有区别
  4. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL;

gdb命令

gdb命令包含在GNU的gcc开发套件中,是功能强大的程序调试器。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。

命令 解释 示例
file <文件名> 加载被调试的可执行程序文件。因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径。 (gdb) file gdb-sample
r Run的简写,运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 (gdb) r
c Continue的简写,继续执行被调试程序,直至下一个断点或程序结束。 (gdb) c
b <行号>
b <函数名称>
b *<函数名称>
b *<代码地址>
d [编号]
b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
其中在函数名称前面加“*”符号表示将断点设置在“由编译器生成的prolog代码处”。如果不了解汇编,可以不予理会此用法。
d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。
(gdb) b 8
(gdb) b main
(gdb) b *main
(gdb) b *0x804835c
(gdb) d
s, n s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
n: 执行一行源程序代码,此行代码中的函数调用也一并执行。
s 相当于其它调试器中的“Step Into (单步跟踪进入)”;n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。
(gdb) s
(gdb) n
p <变量名称> Print的简写,显示指定变量(临时变量或全局变量)的值。 (gdb) p i
(gdb) p nGlobalVar
q Quit的简写,退出GDB调试环境。 (gdb) q

选项:
-cd:设置工作目录;
-q:安静模式,不打印介绍信息和版本信息;
-d:添加文件查找路径;
-x:从指定文件中执行GDB指令;
-s:设置读取的符号表文件。

文件:
二进制可执行文件。

原文地址:https://www.cnblogs.com/khche/p/11882229.html