问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在Linux下如何开发C程序?

发布网友 发布时间:2022-04-23 06:17

我来回答

4个回答

懂视网 时间:2022-04-10 09:40

,而不能同时跟踪多个进程,但可以设置gdbfork之后跟踪父进程还是子进程。以上面的程序为

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#define MAXLINE 80

int main(void)
{
 int n;
 int fd[2];
 pid_t pid;
 char line[MAXLINE];

 if (pipe(fd) < 0)
 { 
 perror("pipe");
 exit(1);
 } 
 if ((pid = fork()) < 0)
 { 
 perror("fork");
 exit(1);
 } 
 if (pid > 0) /* parent */
 { 
 close(fd[0]);
 write(fd[1], "hello world
", 12);
 wait(NULL);
 } 
 else  /* child */
 { 
 close(fd[1]);
 n = read(fd[0], line, MAXLINE);
 printf("---------------in-----------");
 write(STDOUT_FILENO, line, n); 
 } 
 return 0;
}

  

$ gcc main.c -g
$ gdb a.out
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) l
2	#include <unistd.h>
3	#include <stdio.h>
4	#include <stdlib.h>
5	
6	int main(void)
7	{
8		pid_t pid;
9		char *message;
10		int n;
11		pid = fork();
(gdb) 
12		if(pid<0) {
13			perror("fork failed");
14			exit(1);
15		}
16		if(pid==0) {
17			message = "This is the child
";
18			n = 6;
19		} else {
20			message = "This is the parent
";
21			n = 3;
(gdb) b 17
Breakpoint 1 at 0x8048481: file main.c, line 17.
(gdb) set follow-fork-mode child
(gdb) r
Starting program: /home/akaedu/a.out 
This is the parent
[Switching to process 30725]

Breakpoint 1, main () at main.c:17
17			message = "This is the child
";
(gdb) This is the parent
This is the parent

技术分享 

技术分享

 

--------------------------------------------------------------------- 

编写代码过程中少不了调试。在windows下面,我们有visual studio工具。在Linux下面呢,实际上除了gdb工具之外,你没有别的选择。那么,怎么用gdb进行调试呢?我们可以一步一步来试试看。

 

[cpp] view plain copy  
  1. #include <stdio.h>  
  2.   
  3. int iterate(int value)  
  4. {  
  5.     if(1 == value)  
  6.         return 1;  
  7.   
  8.     return iterate(value - 1) + value;  
  9. }  
  10.   
  11. int main()  
  12. {  
  13.     printf("%d ", iterate(10));  
  14.     return 1;  
  15. }  

    既然需要调试,那么生成的可执行文件就需要包含调试的信息,这里应该怎么做呢?很简单,输入 gcc test.c -g -o test。输入命令之后,如果没有编译和链接方面的错误,你就可以看到 可执行文件test了。

 

    调试的步骤基本如下所示,


(01) 首先,输入gdb test
(02) 进入到gdb的调试界面之后,输入list,即可看到test.c源文件
(03) 设置断点,输入 b main 
(04) 启动test程序,输入run 
(05) 程序在main开始的地方设置了断点,所以程序在printf处断住  
(06) 这时候,可以单步跟踪。s单步可以进入到函数,而n单步则越过函数
(07) 如果希望从断点处继续运行程序,输入c
(08) 希望程序运行到函数结束,输入finish
(09) 查看断点信息,输入 info break
(10) 如果希望查看堆栈信息,输入bt
(11) 希望查看内存,输入 x/64xh + 内存地址
(12) 删除断点,则输入delete break + 断点序号
(13) 希望查看函数局部变量的数值,可以输入print + 变量名

(14)希望修改内存值,直接输入 print  + *地址 = 数值
(15) 希望实时打印变量的数值,可以输入display + 变量名
(16) 查看函数的汇编代码,输入 disassemble + 函数名
(17) 退出调试输入quit即可

linux下的C语言开发(gdb调试)

标签:data-   class   version   查看   turn   png   let   gcc   sas   

热心网友 时间:2022-04-10 06:48

在Linux开发环境下,GCC是进行C程序开发不可缺少的编译工具。GCC是GNU C Compile的缩写,是GNU/Linux系统下的标准C编译器。虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C++编译器。《linux就该这么学》非常值得您一看。Linux平台下C程序开发步骤如下:
1.利用编辑器把程序的源代码编写到一个文本文件中。
比如编辑test.c程序内容如下:
/*这是一个测试程序*/
#include<stdio.h>
int main(void)
{
printf("Hello Linux!");
}
2.用C编译器GCC编译连接,生成可执行文件。
$gcc test.c
编译完成后,GCC会创建一个名为a.out的文件。如果想要指定输出文件,可以使用选项-o,命令如下所示:
$gcc-o test1 test.c
这时可执行文件名就变为test1,而不是a.out。
3.用C调试器调试程序。
4.运行该可执行文件。 在此例中运行的文件是:
$./a.out 或者 test1
结果将得出:
Hello Linux!
除了编译器外,Linux还提供了调试工具GDB和程序自动维护工具Make等支持C语言编程的辅助工具。如果想要了解GCC的所有使用说明,使用以下命令:
$man gcc

热心网友 时间:2022-04-10 08:06

gccfirst.C-ofirst说明:1>编译当前目录下、名字叫做first.C的c源文件;2>在当前目录下、生成名字叫first(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序;关于运行:用ls-l命令,可以看到当前目录下有一个绿色的文件、名字叫first,就是刚刚编译得到的文件;使用命令“./first”既可运行(无双引号、双引号是用来说明的);不懂再问~

热心网友 时间:2022-04-10 09:41

在linux下输入:(以hello.c为例)
首先选中文件要保存的路径(如:cd work)
vi hello.c(要编辑的文件名)
输入程序:
# include<stdio.h>
int main(void)
{
printf("hello,world!\n");
return 0; 注:return和0之间要有空格
}
退出并保存程序:
在vi模式下,按ESC后,按 :wq加enter键
利用gcc编译程序:
(先要找到程序存在哪个文件夹中)
ls
cd work
gcc -Wall hello.c (或者是gcc hello.c -o hello) 注:在编译时最好加上-Wall选项,这样的话可以把隐藏的warning也显示出来,Wall首字母要大写。
输出程序结果:
./hello (或者是 ./a.out)
执行完后可以得到:
hello, world!
想学就看看《Linux就该这么学》
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
外鼻基底细胞癌的手术 医生您好,请问一年前头皮基底细胞癌患者已经术后痊愈,现在想吃点韩国的... 基底细胞癌手术后一年能要孩子吗 皮肤基底细胞癌专家好!我爸得了皮肤基底细胞癌从上次做切除手术到现在一... 我现在的QQ中了二等奖 25--29日的活动 是不是真的 我中奖了,能信吗?急! qq音乐如何分享好声音歌曲 织梦下channelartlist下使用如何使用判断if 判断typeid="" 在线等,关于从日本连接国内网游的问题 我在日本上学,玩国内的网游很卡,求推荐款软件或者方法让我玩国服不卡... linux与c语言有什么异同? 为什么我会心烦啊?? 人为什么会心烦啊 人为什么会烦 为什么人总是感觉心烦呢? 人为什么会心烦意乱? 为什么人会心烦? 人为什么总是会心烦 为什么人会烦躁? 为什么我总会心烦? 人为什么会烦躁 为什么会心烦? 为什么人会心情烦躁? 为什么人会无缘无故心烦? 为什么会烦躁 为什么会觉得烦躁 为什么会心烦 人为什么会心烦呢? 最近我为什么会心烦? 做羊蝎子牛肚烧烤店名怎么起? linux操作系统是用C++还是C语言写的? linux是用C写的吗? Linux下的C语言和Unix下的C语言编程有区别吗? linux 下的c和 C++ 有什么区别 ?linux 不是主要以c开发为主吗???c++... 利率上浮10是什么意思?利率上浮10%是什么意思 linux系统能够编写c语言吗 linux c和windows c 有什么区别 贷款利率上浮10%什么意思? linux c和c有什么区别 买房时销售说贷款利率上浮是什么意思? 做奶茶都需要什么材料? 自己怎么做奶茶需要些什么 上浮利率什么意思 做奶茶需要什么材料?有哪些技巧? 商业贷款利率上浮%10什么意思,假如20万贷款十年要还多少 商铺贷款利率5年和10年是多少?上调%10是什么意思? 如何做奶茶? 奶茶都是用什么做的? 怎么做奶茶简单呢? ddr3是什么意思?怎么区分内存条是第几代的?