linux-文件编辑器与C程序的编译,运行,调试

文件编辑器

gedit

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。 

 

 

posted @ 2020-08-07 20:35  漫漫长夜何时休  阅读(558)  评论(0编辑  收藏  举报