在linux 下如何调试C程序

时间:2021-11-12 09:20:11
我是直接在终端上vim开一个c文件,然后gcc -o指令生成可执行文件。
对于linux下编程,我只会用这一点。
请问怎么调试?
谢谢

9 个解决方案

#1


用 gdb 的话

gcc -g -o target source

gdb target



学学基本 gdb 的命令

#2


编译时加个开关 -g 下面是gcc常用的选项,后面会经常用到的

-g
 在编译的时候,产生调试信息
-c
 只激活预处理,编译和汇编,也就是把程序做成obj文件。如gcc -c test.c  就会生成test.o文件,当然这样还只是目标文件,需要经过ld连接器对所有的.o文件进行联接才能生成可执行文件.

-S
 只激活预处理和编译,把文件编译到汇编代码。相当到对源程序做一个egcs操作,生成.s文件。可以查看生成的汇编文件结果。这个对于研究汇编语言的程序员来说是很有作用的。

-E
 只激活预处理,这个将对文件进行预处理,将对所有引入的include文件和define定义的量进行代换,为我们开头所说的gcc编译的第一步,即用cpp命令将程序语言文件进行预处理.但这一步不生成结果文件,如果你需要生成结果文件保存,那么需要利用系统中的输出重定向。

-o
 定制目标名称,缺省的时候在unix和linux平台下gcc filename的结果是一个文件名为a.out的文件,windows下用mingw里带的gcc编译结果是a.exe。如果我们用gcc -o hello.exe test.c的话,将生成hello.exe可执行程序。这个并不一定只限于最后一步可执行程序的生成,如用上面所讲的-S生成的汇编程序也可以用-o参数生成,比如 gcc -o hello.asm -S test.c 这样hello.asm就是test.c经过预处理和编译之后的结果。

-Idir
 在#include 的时候,先在用这个参数指定的位置找头文件,如果没有找到,则到缺省的目录找头文件
-llibrary
 用于制定编译的时候使用的库,如 gcc -lgtk tset.c则程序使用gtk库进行编译,不过需要注意的是gcc库一般都是以libname.a来命名库文件,在用-l参数来加入库文件的时候,直接用-lname来引入,而前面的lib被省掉。这一点需要注意。
-Ldir
 编译的时候设定库文件查找的路径,不然的话,编译器只在标准库路径里面找库。

GDB手册在chinaunix有一份:你去好好研究下哦,gcc ,gdb, makefile在linux下编程都是很重要的东西
http://wiki.chinaunix.net/index.php/%E5%88%86%E7%B1%BB:GDB%E6%89%8B%E5%86%8C

#3


也可以用ddd这个图形界面的gdb前端,用法:ddd  appName

#4


有一下三个常用的工具:
gdb
kbd
ddd
其中kbd是gdb的图形化软件,简单易用,功能强大,推荐

#5


sorry,是kdbg

#6


学学基本 gdb 的命令
记得加参数 -g
up

#7


gcc -g -o target source
这个就可以生成可执行文件了

gdb target
调试文件的,如果没有错误就可以不用这个了

#8


gcc
gdb

#9


学习了。。。。

#1


用 gdb 的话

gcc -g -o target source

gdb target



学学基本 gdb 的命令

#2


编译时加个开关 -g 下面是gcc常用的选项,后面会经常用到的

-g
 在编译的时候,产生调试信息
-c
 只激活预处理,编译和汇编,也就是把程序做成obj文件。如gcc -c test.c  就会生成test.o文件,当然这样还只是目标文件,需要经过ld连接器对所有的.o文件进行联接才能生成可执行文件.

-S
 只激活预处理和编译,把文件编译到汇编代码。相当到对源程序做一个egcs操作,生成.s文件。可以查看生成的汇编文件结果。这个对于研究汇编语言的程序员来说是很有作用的。

-E
 只激活预处理,这个将对文件进行预处理,将对所有引入的include文件和define定义的量进行代换,为我们开头所说的gcc编译的第一步,即用cpp命令将程序语言文件进行预处理.但这一步不生成结果文件,如果你需要生成结果文件保存,那么需要利用系统中的输出重定向。

-o
 定制目标名称,缺省的时候在unix和linux平台下gcc filename的结果是一个文件名为a.out的文件,windows下用mingw里带的gcc编译结果是a.exe。如果我们用gcc -o hello.exe test.c的话,将生成hello.exe可执行程序。这个并不一定只限于最后一步可执行程序的生成,如用上面所讲的-S生成的汇编程序也可以用-o参数生成,比如 gcc -o hello.asm -S test.c 这样hello.asm就是test.c经过预处理和编译之后的结果。

-Idir
 在#include 的时候,先在用这个参数指定的位置找头文件,如果没有找到,则到缺省的目录找头文件
-llibrary
 用于制定编译的时候使用的库,如 gcc -lgtk tset.c则程序使用gtk库进行编译,不过需要注意的是gcc库一般都是以libname.a来命名库文件,在用-l参数来加入库文件的时候,直接用-lname来引入,而前面的lib被省掉。这一点需要注意。
-Ldir
 编译的时候设定库文件查找的路径,不然的话,编译器只在标准库路径里面找库。

GDB手册在chinaunix有一份:你去好好研究下哦,gcc ,gdb, makefile在linux下编程都是很重要的东西
http://wiki.chinaunix.net/index.php/%E5%88%86%E7%B1%BB:GDB%E6%89%8B%E5%86%8C

#3


也可以用ddd这个图形界面的gdb前端,用法:ddd  appName

#4


有一下三个常用的工具:
gdb
kbd
ddd
其中kbd是gdb的图形化软件,简单易用,功能强大,推荐

#5


sorry,是kdbg

#6


学学基本 gdb 的命令
记得加参数 -g
up

#7


gcc -g -o target source
这个就可以生成可执行文件了

gdb target
调试文件的,如果没有错误就可以不用这个了

#8


gcc
gdb

#9


学习了。。。。