精华内容
下载资源
问答
  • 主要给大家介绍了关于在Linux系统利用C程序输出某进程的内存占用信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友下面来一起看看吧。
  • Linux下C语言程序的调试

    千次阅读 2018-10-04 16:07:11
    Linux中调试C语言程序1.编译时添加调试信息2.使用调试命令进行调试gdb调试器语法gdb模式的命令[^1]**readelf命令**ELF文件类型ELF文件作用ELF文件总体组成选项 1.编译时添加调试信息 使用gcc -g -o [生成...

    1.编译时添加调试信息

    使用gcc -g -o [生成文件名] [源文件名]来编译生成一个带调试信息的可执行文件
    例如:gcc -g -o test.debug test.c

    加上-g选项以后,gcc在编译是会做以下额外的操作:

    1. 创建符号表,符号表包含了程序中使用的变量名称的列表。

    2. 关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行

    生成的可执行文件可以用readelf1 命令来显示文件的具体信息。

    2.使用调试命令进行调试

    最常用的是gdb调试器

    gdb调试器

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

    语法

    gdb [选项] [参数]

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

    一般可以直接使用gdb命令进入gdb命令行模式,然后用file [可执行程序] [参数列表] 的方式来打开需要调试的程序,因为这样可以带参数启动程序,而直接gdb [文件名] 将参数带不进去。

    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
    • si, ni
      si命令类似于s命令,ni命令类似于n命令。所不同的是,这两个命令(si/ni)所针对的是汇编指令,而s/n针对的是源代码。
      示例:(gdb) si
      示例:(gdb) ni
    • p <变量名称>
      Print的简写,显示指定变量(临时变量或全局变量)的值。
      示例:(gdb) p i
      示例:(gdb) p nGlobalVar
      display … undisplay <编号>
      display,设置程序中断后欲显示的数据及其格式。
      例如,如果希望每次程序中断后可以看到即将被执行的下一条汇编指令,可以使用命令
      “display /i $pc”
      其中 $pc 代表当前汇编指令,/i 表示以十六进行显示。当需要关心汇编代码时,此命令相当有用。 undispaly,取消先前的display设置,编号从1开始递增。
      示例:(gdb) display /i $pc (gdb) undisplay 1
    • i
      info的简写,用于显示各类信息,详情请查阅“help i”。
      示例:(gdb) i r
    • q
      Quit的简写,退出GDB调试环境。
      示例:(gdb) q
    • help [命令名称]
      GDB帮助命令,提供对GDB名种命令的解释说明。
      如果指定了“命令名称”参数,则显示该命令的详细说明;如果没有指定参数,则分类显示所有GDB命令,供用户进一步浏览和查询。
      示例:(gdb) help

    readelf命令

    readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。

    这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。

    运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。

    ELF文件类型

    • 可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。
    • 可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。
    • 共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。

    ELF文件作用

    ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待elf格式的文件:

    • 如果用于编译和链接(可重定位文件),则编译器和链接器将把elf文件看作是节头表描述的节的集合,程序头表可选。
    • 如果用于加载执行(可执行文件),则加载器则将把elf文件看作是程序头表描述的段的集合,一个段可能包含多个节,节头表可选。
      如果是共享文件,则两者都含有。

    ELF文件总体组成

    elf文件头描述elf文件的总体信息。包括:系统相关,类型相关,加载相关,链接相关。

    • 系统相关表示:elf文件标识的魔术数,以及硬件和平台等相关信息,增加了elf文件的移植性,使交叉编译成为可能。
    • 类型相关就是前面说的那个类型。
    • 加载相关:包括程序头表相关信息。
    • 链接相关:节头表相关信息。

    选项

    • -a
      –all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I.

    • -h
      –file-header 显示elf文件开始的文件头信息.

    • -l
      –program-headers
      –segments 显示程序头(段头)信息(如果有的话)。

    • -S
      –section-headers
      –sections 显示节头信息(如果有的话)。

    • -g
      –section-groups 显示节组信息(如果有的话)。

    • -t
      –section-details 显示节的详细信息(-S的)。

    • -s
      –syms
      –symbols 显示符号表段中的项(如果有的话)。

    • -e
      –headers 显示全部头信息,等价于: -h -l -S

    • -n
      –notes 显示note段(内核注释)的信息。

    • -r
      –relocs 显示可重定位段的信息。

    • -u
      –unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。

    • -d
      –dynamic 显示动态段的信息。

    • -V
      –version-info 显示版本段的信息。

    • -A
      –arch-specific 显示CPU构架信息。

    • -D
      –use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。

    • -x
      –hex-dump= 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件中的段名。

    • -w[liaprmfFsoR] or
      –debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 显示调试段中指定的内容。

    • -I
      –histogram 显示符号的时候,显示bucket list长度的柱状图。

    • -v
      –version 显示readelf的版本信息。

    • -H
      –help 显示readelf所支持的命令行选项。

    • -W
      –wide 宽行输出。

    • @file 可以将选项集中到一个文件中,然后使用这个@file选项载入。


    1. ↩︎
    展开全文
  • 在当前目录、生成名字叫demo1(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序; 关于运行: 用ls -l 命令,可以看到当前目录有一个文件、名字叫demo1,就是刚刚编译得到的文件; 使用命令“./demo...

    代码如下:

    gcc demo.c -o demo1

    说明:
    1>编译当前目录下、名字叫做demo.c的c源文件;
    2>在当前目录下、生成名字叫demo1(这个名字可以自己随便写、符合linux命名规则就行)的可执行程序

    关于运行:
    用ls -l 命令,可以看到当前目录下有一个文件、名字叫demo1,就是刚刚编译得到的文件;
    使用命令“./demo1”既可运行(无双引号、双引号是用来说明的);

    例:以下为实验楼环境的例子
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 前几天发表了在windows系统上使用VC软件进行C语言程序的编写,今天分享一下如何在Ubuntu等Linux发行版系统上进行C语言的编写。(此次分享只是为了使本人巩固操作方法,不是完整的教程。) 我们这里用到的是Vim编辑器...

    前几天发表了在windows系统上使用VC软件进行C语言程序的编写,今天分享一下如何在Ubuntu等Linux发行版系统上进行C语言的编写。(此次分享只是为了使本人巩固操作方法,不是完整的教程。)
    首先安装gcc编译器:
    按照以下代码:sudo apt-get update(先更新),sudo apt-get install gcc
    其次是编写代码,我们这里用到的是Vim编辑器。首先我们先卸载掉预装在系统下的Vim编辑器因为这不好用,下载完整版,具体方法是:1、sudo apt-get remove vim-common 2、sudo apt-get install vim。
    接下来教你们如何使用vim,按i进入编辑模式,按esc退出编辑模式;按:进入末行模式,此模式用于退出或退出并保存文件等操作。
    接下来进行编写代码,然后打开终端。进行以下操作:1、gcc filename.c -o filename 2、./filename。

    展开全文
  • Ubantu和Windows系统使用c语言编辑简单程序Ubantu系统使用c语言编辑简单程序Ubantu系统使用Makefile编辑简单程序Windows系统使用VC6.0编辑简单程序 Ubantu系统使用c语言编辑简单程序 本次内容,是使用的是...

    Linux系统下使用c语言编辑简单程序

    本次内容,是使用的是Ubantu16.04版本。
    1.打开虚拟机,登陆进入Linux系统。
    2.创建sub1.h头文件。
    (1)输入以下命令, 创建sub1.h文件。

    vi sub1.h
    

    (2)打开后,键盘输入s进入编辑模式,输入代码(主要为创建一个名为x2x的函数,对a、b两个数进行相乘)。

    #include<stdio.h>
    float x2x(int a,int b) //创建x2x函数
    {
    	float c;
    	c=a*b;
    	return c;          //返回a、b之积c的值
    }
    

    (3)编辑完成后,键盘按Esc按键,输入:wq(注意“:”也要输入!意为保存并退出)。
    3.创建main1.c文件。
    (1)输入以下命令, 创建main1.c文件。

    vi main1.c
    

    (2)打开后,键盘输入s进入编辑模式,输入代码。

    #include"sub1.h"                //包含sub1.h头文件
    #include<stdio.h>
    main()
    {
    	int a,b;
    	float c;
    	printf("Please enter number:");
    	scanf("%d%d",&a,&b);
    	c=x2x(a,b);                //将x2x函数返回值赋值给c
    	printf("The product of a and b is:");
    	printf("%f",c);
    	printf("\n");
    }
    

    (3)编辑完成后,键盘按Esc按键,输入:wq(注意“:”也要输入!意为保存并退出)。
    4.输入命令,对sub1.h和main1.c文件的代码进行编译。

    gcc sub1.h main1.c
    

    注意:如果出现警告可以不用修改,出现错误请根据提示打开相应文件进行修改。
    5.输入命令,运行编译好的程序。

    ./a.out
    

    根据以上程序出现的结果如图所示:
    在这里插入图片描述

    Linux系统下使用Makefile编辑简单程序

    1.创建Makefile文件。
    (1)输入以下命令, 创建文件。

    vi makefile
    

    (2)打开后,键盘输入s进入编辑模式,输入代码(同样实现两个数a、b的积并输出)。

    main1:main1.o
    	gcc -o main1 main1.o
    main1.c: main1.c sub1.h
    	gcc -c main1.c
    clean:
    	rm *.o main1 
    

    (3)编辑完成后,键盘按Esc按键,输入:wq(注意“:”也要输入!意为保存并退出)。
    2.输入命令,对文件内容进行编译。

    make
    

    注意:如果出现警告可以不用修改,出现错误请根据提示打开相应文件进行修改。
    3.输入命令,查询编译后生成的文件。

    ls
    

    4.输入命令,执行编译后的程序。

    ./main1         #程序编译后生成的文件名为main1 ,大家根据自己生成的文件名写命令
    

    根据以上程序输出的结果:
    在这里插入图片描述

    Windows系统下使用VC6.0编辑简单程序

    1.创建工程。
    在这里插入图片描述

    在这里插入图片描述
    2.创建头文件sub1.h并编辑。
    (1)创建头文件sub1.h。
    在这里插入图片描述
    (2)输入代码(代码同上“Ubantu系统下使用c语言编辑简单程序”的sub1.h)。
    在这里插入图片描述
    如果出现警告可以不用修改,错误一定要修改!!!
    3.创建main.c函数。
    (1)创建文件main1.c。
    在这里插入图片描述
    2.输入代码(代码同上“Ubantu系统下使用c语言编辑简单程序”的main1.c)。
    在这里插入图片描述
    (3)执行输入2 3,输出结果如下所示。
    在这里插入图片描述

    展开全文
  • 在64位linux下编译32位程序

    千次阅读 2017-04-12 15:03:16
    -m32来使得gcc编译32位程序(在x86_64系统上),使用-m elf_i386参数可以使得64的ld能够兼容32位的库 gcc -m32 ld -m elf_i386 ld用-V选项可以查看支持的平台
  • Linux下C语言编程

    万次阅读 多人点赞 2018-12-26 16:18:17
    本章将简要介绍一下什么是LinuxC语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等。通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了解。 1.1 Linux ...
  • Linux下编辑C语言程序并且编译运行

    千次阅读 2019-10-05 11:35:12
    2. 安装完成后新建文件名hello.c的源文件: 输入vim hello.c; 键入i 进入insert模式(即编辑输入模式),写入如下经典代码: #include<stdio.h> int main(void) { printf(“Hello, ...
  • Linux下编写C程序helloWorld

    千次阅读 2019-01-08 15:39:28
    本文简单记录一下在linux下编写c语言程序的步骤。 步骤 1、打开终端窗口,执行以下命令安装gcc编译环境,树莓派系统默认已经安装好gcc环境,可跳过该步骤; sudo apt-get install gcc 2、执行以下命令安装头文件库...
  • 实验四:LINUX C语言使用、编译与调试实验一、目的:练习并掌握Linux提供的vi编辑器来编译C程序学会利用gcc、gdb编译、调试C程序学会使用make工具、内容编写C语言程序,用gcc编译并观察编译后的结果,运行生成的...
  • linux下编写简单的c程序

    万次阅读 多人点赞 2018-03-19 11:51:29
    最近开始学习linux编程,对于linux的命令,却还不特别熟悉,在此记录一下,学习linux的一些命令首先ctrl+alt+t打开终端,然后使用vim进行编程 vim hello.c 在hello.c中 按 i 或者 insert 输入以下内容输入完成后...
  • 弄好了,不容易。...第步:编译并运行一个C程序方法 ①输入命令如下,vi+文件名(自己随便命名) ②进入vi编辑器之后,先敲击“i”进入编写状态,再敲入C代码: ③代码敲结束,敲击Esc键,输入:w
  • 目录可执行文件的组装学习使用gcc生成静态库和动态库静态库生成动态库生成使用实例静态库使用动态库使用gcc编译的各种工具用nasm汇编编译器编译生成执行程序库函数的运用从光标库(curses)的主要函数功能了解库函数...
  • 本文使用了两种方法在Ubuntu上运行C语言程序。方法1:如何在Linux终端中运行C程序为了在Linux中运行C程序,您的系统上需要有一个C编译器。最受欢迎的编译器是gcc。您可以使用发行版的软件包管理器来安装gcc。在基于...
  • Linux使用gcc来编译C语言程序,编译过程一般可以细分四个阶段: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 1.在预处理阶段 “gcc -E test.c -o test.i”,其中参数E...
  • Linux 环境利用消息队列消息机制,多线程通信,字符串处理,链表操作,信号简单处理等知识用C语言编写多人聊天室实现: 服务器实现各用户之间聊天的消息转发,在用户注册或者登录时对各用户进行消息提醒,客户端从...
  • 实验四:LINUX C语言使用、编译与调试实验一、目的:1、练习并掌握Linux提供的vi编辑器来编译C程序2、学会利用gcc、gdb编译、调试C程序3、学会使用make工具、内容1、编写C语言程序,用gcc编译并观察编译后的结果...
  • 要编译这个程序,执行以下命令 gcc -o hello hello.c gcc 编译器会我们生成一个可执行文件 hello。 gcc 参数选项 -o 表示我们要求编译器我们输出可执行文件。 -c 表示我们只要求编译起输出目标代码,而不必...
  •  以下内容只整理来自己使用的,大多来源于网络,感谢大家的分享:  http://www.cnblogs.com/no7dw/archive/2013/02/20/2918372.html  http://blog.chinaunix.net/uid-20780355-id-538814.ht
  • 以 Scientific Linux 6.2 例:  Scientific Linux 与 Centos 都是 Redhat Linux 的民间再发行版。因为它们既有Redhat的稳定,又可以及时免费更新Bugfix,所以比较流行。其中Scientific Linux由费米实验室维护,...
  • Linux下使用vim编辑C程序

    千次阅读 2020-03-12 11:50:17
    vi/vim是Linux、Unix字符界面常用的编辑工具,也是系统管理员常用的一种编辑工具。很多Linux发行版都默认安装了vi/vim。vim是vi的升级版,和vi的基本操作相同,其相对于vi的优点主要在于可以根据文件类型高亮显示...
  •  键进入编辑状态,以下程序 #include int main() { printf("Hello world!/n"); return 0; } 按Esc进入命令模式,按 ZZ 保存退出 ...
  • Linux下的gcc和g++简介 gcc 与 g++ 分别是 gnu 的 c &和c++ 语言的编译器 gcc/g++ 在执行编译工作的时候,总共需要4步: 1、预处理,生成 .i 的文件[预处理器cpp] 2、将预处理后的文件转换成汇编语言, 生成...
  • Linux下C语言串口通讯编程示例

    千次阅读 2020-10-20 14:03:42
    Linux下一切皆文件,读写串口,与读写普通文件本质上来讲是一致的。对于串口的数据读写,大致仍遵循着以下几个步骤: (1)打开文件,获取文件描述符 (2)设置串口的波特率,数据,校验,停止以及其它设置...
  • Linux vim 创建和运行C程序

    千次阅读 2019-10-17 12:28:02
    1.vim 创建C程序 使用cd 或者mkdir 选择一个目录存放程序,这里我自己创建的文件program; 使用cd 进入program后,使用vim 创建一个.test.c 文件 lhy@lhy-PC:~/programfile$ vim test.c lhy@lhy-PC:~/program...
  • 运行、在Linux上运行c程序1.新建main.c和sub1.c文件2.编写对应代码3.编译运行 一、在Windows上使用Qt运行c程序 1.新建项目 选择c语言应用程序后点击choose 给项目命名后全部点一步即可 最后如图 点击左下角...
  • Linux C程序修改进程名称

    千次阅读 多人点赞 2021-05-12 22:13:26
    Linux C程序修改进程名称(通过修改argv[0])1、前言2、命令行参数(argc, argv)以及环境变量(environ)介绍2.1、C程序典型的存储空间布局2.2、argc, argv介绍2.3、environ介绍2.4、编写程序验证修改进程名是否可以...
  • 1.首先进去Linux系统终端 2.输入gedit 源文件名.c ;最好在最后再加上一个参数&,这样可以让源文件编辑窗口在后台运行,这样就可以继续使用终端窗口。 3.编辑源程序,最后保存。
  • 以下内容源于C语言中文网的内容学习与整理。如有侵权,请告知删除。
  • 1)Linux -- 1)Linux -- 11)LLiinnuuxx程序设计入门基础知识 Linux下C语言编程基础知识 前言: 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将 会学到以下内容: 源程序编译 Makefile的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 418,471
精华内容 167,388
关键字:

以下为linux下的32位c程序

linux 订阅