linux-文件编辑器与C程序的编译,运行,调试
gedit是一个GNOME桌面环境下兼容UTF-8的文本编辑器。它使用GTK+编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括gb2312、gbk在内的多种字符编码。gedit是一个自由软件。
启动命令gedit
file
要从命令行打开多个文件 gedit file1.txt file2.txt file3.txt
vi/vim
linux 一般会有内置vi可以使用, 编辑或创建文件可以用vi 文件名
C程序编译运行
LINUX上可用的C编译器是GNU C编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布。LINUX 上的GNU C编译器(GCC)是一个全功能的ANCI C兼容编译器,而一般UNIX用的编译器是GCC。下面介绍GCC和一些GCC编译器最常用的选项。
通常后跟一些选项和文件名来使用GCC编译器。GCC命令的基本用法如下:
gcc [options] [filenames]
编译成功后,当前目录下就产生了一个a.out文件。
也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。
例如有一个hello.c, 可以进行如下编译
gcc -c hello.c -o hello
该命令会生成文件名为 hello 的可运行文件
使用gcc编译优化选项
常用的选项
命令选项 | 选项功能 |
---|---|
-E | 进行预处理和编译,生成汇编文件。 gcc -E test.c //会生成test.i文件 |
-S | 进行预处理,编译,汇编等步骤,生成“.s”文件 gcc -S test.c //会生成test.s文件 |
-c | 会直接生成二进制目标文件。 gcc -c test.c //会生成test.o文件 |
-include | 包含某个代码。相当于在文件中加入#include gcc test.c -include /root/file.h //编译test.c时包含file.h头文件 |
-Idir | 当你使用#include”file”的时候,会先到你定制的目录里面查找。 |
-llibrary | 定制编译的时候使用的库 gcc -lpthread test.c //在编译的时候要依赖pthread这个库 |
-Ldir | 定制编译的时候搜索库的路径。如果是自己定制的库,可以用它来定制搜索目录,否则编译器只在标准库目录里面找,dir就是目录的名字。 |
-g | 在编译的时候假如debug调试信息,用于gdb调试。 |
-static | 链接时使用静态链接,但是要保证系统中有静态库。 |
-Wall | 生成所有警告信息。 |
-O0 | (字母o和数字0):没有优化 -o1:缺省值 -o2:二级优化 -o3:最高级优化 |
当用gcc编译C代码时,它会试着用最少的时间完成编译并且使编译后的代码易于调试. 易于调试意味着编译后的代码与源代码有同样的执行次序,编译后的代码没有经过优化。有很多选项可用于告诉gcc,在耗费更多编译时间和牺牲易调试性的基础上,产生更小更快的可执行文件。这些选项中最典型的是-O和-O2选项。
-
-O选项告诉gcc对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。
-
-O2选项告诉gcc产生尽可能小和尽可能快的代码。-O2选项将使编译的速度比使用-O 时慢。但通常产生的代码执行速度会更快。
使用调试和剖析选项
gcc支持数种调试和剖析选项。在这些选项里最常用的是-g和-pg选项。
-
-g选项告诉gcc产生能被GNU调试器使用的调试信息以便调试程序。使用GDB调试就需要用到-g来编译程序。gcc 提供了一个很多其他C编译器里没有的特性,在gcc里能使-g和-O(产生优化代码)连用。这一点非常有用,因为能在与最终产品尽可能相近的情况下调试代码。同时使用这两个选项时必须清楚所写的某些代码已经在优化时被gcc作了改动。
-
-pg选项告诉gcc在程序里加入额外的代码,执行时,产生gprof用的剖析信息以显示程序的耗时情况。
gdb基本使用命令
gdb是Linux程序调试工具,可以在程序运行时观察程序的内部结构和内存的使用情况,对程序进行源码调试。
gdb 所提供的一些功能包括:
-
运行程序,设置所有的能影响程序运行的参数和环境;
-
控制程序在指定的条件下停止运行;
-
当程序停止时,可以检查程序的状态;
-
修改程序的错误,并重新运行程序;
-
动态监视程序中变量的值;
-
可以单步执行代码,观察程序的运行状态。
gdb使用的基本命令
1)进入gdb #gdb test
test是要调试的程序,由gcc test.c -g -o test生成(注意 -g)。进入后提示符变为(gdb) 。
2)查看源码 (gdb) l
源码会进行行号提示。
3)设置断点 (gdb) b 6
这样会在运行到源码第6行时停止,可以查看变量的值、堆栈情况等;这个行号是gdb的行号。另外还可以对函数名下断点。
4)查看断点处情况 (gdb) info b
显示当前断点列表,包括每个断点到达的次数。
5)运行代码 (gdb) run
run[运行参数] 运行参数可以向程序传入参数。
6)显示变量值 (gdb) p n
在程序暂停时,键入"p 变量名"(print)即可; gdb在显示变量值时都会在对应值之前加上"$N"标记,它是当前变量值的引用标记,以后若想再次引用此变量,就可以直接写作"$N",而无需写冗长的变量名;
7)观察变量 (gdb) watch n
在某一循环处,往往希望能够观察一个变量的变化情况,这时就可以键入命令"watch"来观察变量的变化情况,GDB在"n"设置了观察点;
8)单步运行 (gdb) n
9)程序继续运行 (gdb) c
使程序继续往下运行,直到再次遇到断点或程序结束;
10)删除断点 d 1
指定一个断点号码,则删除指定断点。不指定参数则删除所有的断点。
11)退出GDB (gdb) q
以上都采用了gdb的短命令格式,如b 6 实际等于break 6 ,q 实际等于quit ,键入短命令按Tab键可补全命令的全称。命令的用法可以键入help [command]查看,如help b。C
其他命令
-
file命令:装入想要调试的可执行文件。
-
cd命令:改变工作目录。
-
kill命令:停止正在调试的应用程序。
-
list命令:列出正在调试的应用程序的源代码
-
break命令:设置断点。
-
Tbreak命令;设置临时断点。它的语法与break相同。区别在于用tbreak设置的断点执行一次之后立即消失。
-
print命令;显示表达式的值。
-
watch命令:设置监视点,监视表达式的变化。
-
awatch命令:设置读写监视点。当要监视的表达式被读或写时将应用程序挂起。它的语法与watch命令相同。
-
rwatch命令:设置读监视点,当监视表达式被读时将程序挂起,等侍调试。此命令的语法与watch相同。
-
next命令:执行下一条源代码,但是不进入函数内部。
-
step命令:执行下一条源代码,进入函数内部。
-
display命令:在应用程序每次停止运行时显示表达式的值。
-
info files命令:显示调试文件的信息。
-
info func命令:显示所有的函数名。
-
info local命令:显示当前函数的所有局部变量的信息。
-
info prog命令:显示调试程序的执行状态。
-
delete命令:删除断点。指定一个断点号码,则删除指定断点。不指定参数则删除所有的断点。
-
Shell命令:执行Linux Shell命令。
-
make命令:不退出gdb而重新编译生成可执行文件。
-
Quit命令:退出gdb。
本文来自博客园,作者:漫漫长夜何时休,转载请注明原文链接:https://www.cnblogs.com/ag-chen/articles/13455112.html