Linux下多文件链接执行及调试技术
链接及调试
- 一、多文件链接的方法
- 1.多文件链接的一般方法
- 2.多文件链接的makefile方法
- 二、调试
- 1.安装gdb的命令:
- 2.单进程、单线程基础调试命令
- 3.基础调试
一、多文件链接的方法
1.多文件链接的一般方法
- 给出所要调用的函数声明及实现方法
cat max.h
int max(int x,int y); //max函数的声明cat max.c
#include"max.h"
int max(int x,int y)
{return x>y?x:y;
} //max函数的实现方法cat add.h
int add(int x,int y); //add函数的声明cat add.c
#include"add.h"
int add(int x,int y)
{return x+y;
} //add函数的实现方法
- 将写好的.c文件编译成.o文件
gcc -c max.c
gcc -c add.c //用这两个命令将两个.c文件编译成.o文件
此时的两个程序不能单独链接成可执行文件,因为可执行文件需要主函数。
- 写出需要调用上面两函数的程序
cat main.c
#include<stdio.h>
#include"add.h"
#include"max.h"
int main()
{int a=2,b=3;printf("add=%d\n",add(a,b));printf("max=%d\n",max(a,b));return 0;
} //主程序
gcc -c main.c //将main.c文件编译成main.o文件;
- 将所有就绪的.o文件连接成可执行的main程序
gcc -o main.o max.o add.o //此命令将所有就绪的.o文件连接成可执行的main程序
- 执行main程序
./main //此命令执行main程序
2.多文件链接的makefile方法
Makefile是用来管理工程,实现自动化编译的工具,和VS中的程序的编译执行是对应的。
makefile文件的写法:
注意: gcc 前面必须是 table 建缩进
make 命令根据 makefile 文件的规则生成可执行程序
二、调试
程序运行时有两个版本:
- Debug 版本为可调式版本,生成的可执行文件中包含调试需要的信息。我们作为开发人
员,最常用的就是 debug 版本的可执行文件。 - Release 版本为发行版本,是提供给用户使用的版本。用 gcc 默认生成的就是 Release 版
本。
我们调试的是一个可以执行的程序。调试的命令为gdb。
1.安装gdb的命令:
sudo apt install gdb
2.单进程、单线程基础调试命令
- l //显示 main 函数所在的文件的源代码- list 文件名:num //显示 filename 文件 num 行上下的源代码- b 行号 //给指定行添加断点- b 函数名 //给指点函数的第一有效行添加一个断点- info break //显示断点信息- delete 断点号 //删除指定断点- disable 断点号 //将断点设定为无效的,不加断点号,将所有断点设置为无效- enable 断点号 //将断点设定为有效的,不加断点号,将所有断点设置为有效- r(run) //运行程序- n(next) //单步执行- c (continue) //继续执行,直接执行到下一个断点处- s //进入将要被调用的函数中执行- finish //跳出函数- q //退出调试- p val //打印变量 val 的值- p &val //打印变量 val 的地址- p a+b //打印表达式的值- p arr(数组名)//打印数组所有元素的值- p *parr@len //用指向数组的指针打印数组所有元素的值- display //自动显示,参数和 p 命令一样- info display //显示自动显示信息- undisplay + 编号 //删除指定的自动显示- ptype val //显示变量类型- bt //显示函数调用栈
3.基础调试
在Linux系统下,我们编译程序时,默认是Release 版本,切换到Debug 版本是需要加入参数的。
以下给出常用命令的示例:
gdb +文件名,开始调试程序
L是显示命令,一般默认显示10行,程序太长时,接着使用L命令会接着上一次的显示。
b加断点:b+数字表示在第几行加断点。info break是显示断点信息。
r是执行程序。如图程序执行时停在11行断点处。
c是从上一个断点处开始执行,执行到下一个断点处停下。
n是单步执行程序,p是打印。
finish结束调试
Linux下多文件链接执行及调试技术相关推荐
- 从四个问题透析Linux下C++编译链接
摘要:编译&链接对C&C++程序员既熟悉又陌生,熟悉在于每份代码都要经历编译&链接过程,陌生在于大部分人并不会刻意关注编译&链接的原理.本文通过开发过程中碰到的四个典型 ...
- Linux环境无文件渗透执行ELF:memfd_create、ptrace
<GDB调试之ptrace实现原理> <C语言程序调用栈:backtrace+backtrace_symbols+backtrace_symbols_fd> <strac ...
- Linux下的lds链接脚本详解
一. 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section放入输出文件内, 并控制输出文件内各部分 ...
- Linux下各文件夹的结构说明及用途介绍(转载)
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- Linux下的静态链接库和动态链接库编程
Linux下的静态链接库和动态链接库编程 参考: Linux下的静态链接库和动态链接库编程 - Histring - 博客园 Mac下静态库和动态库的创建和使用_C/C++_vincent2610的专 ...
- linux 下删除文件的 操纵
linux 下删除 文件的 方法::: 1- remove remove(删除文件) 相关函数 link,rename,unlink 表头文件 #include<stdio.h> 定 ...
- Linux下查看文件占用空间大小的du 和df 命令
Linux下查看文件占磁盘大小一般使用du或df命令 df命令:用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. du命令 ...
- Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决
Linux下编译.链接.加载运行C++ OpenCV的两种方式及常见问题的解决 在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++) ...
- Linux下的文件类型、文件后缀名 知识点解析
文章目录 1.Linux文件的扩展名: 2.Linux 文件类型: 参考博客: https://blog.csdn.net/AQRSXIAO/article/details/82774729 人需要不 ...
最新文章
- javascript python 通信_Python通过websocket与js客户端通信示例分析
- 想爱容易,相处难:当ASP.NET MVC爱上IoC
- mysql 加索引不起作用_mysql加索引及索引失效的情况
- 【Qt】窗口组件和窗口类型
- 浅析 Sunday 算法
- cheatengine找不到数值_“不会找问题”,只配在底层,最高效的思维方式导图,人生开挂!...
- html响应式五栏布局,HTML – 响应式2列CSS布局,包括固定宽度的侧边栏?
- 【比赛】CCL“中国法研杯”相似案例匹配评测竞赛 - TOP队伍攻略分享
- iOS 中的正则匹配(工具类方法)
- springmvc自定义类型转换
- 安装完office没有图标_很多人不会设置路由器?只因没有弄懂安装顺序,看完你就会了...
- 工业软件下载大全202108
- IOS pushVIewController失败
- 使用信锐无线控制器对接营运商portal服务器的原理分析与排错
- IE11不兼容css3渐变属性
- 机器学习训练模型的大体流程
- 如何修改MySQL监听IP地址
- 一键检测Linux VPS/服务器配置、IO、国内节点下载测速
- 微信公众号数据2019_2019年2月全国Top100购物中心微信公众号榜单
- EXCEL里如何知道某种颜色的ColorIndex的值
热门文章
- jQuery取值的一些奇奇怪怪的操作
- 学习笔记TF064:TensorFlow Kubernetes
- Linux下sh/bash/source/.命令的区别(转)
- js中常用的对象—String的属性和方法
- 实施项目--为什么开发人员一直在抱怨需求变动
- 一起谈.NET技术,.Net Discovery系列之-深入理解平台机制与性能影响 (中)
- 基于Linux(LAMP)平台搭建MYsql数据库(二)
- 不能上传图片和编辑内容很慢,望改进
- 从刚入职阿里的学弟那里薅来的面试题,速速领取~~~
- 程序员别只顾着敲代码了,看看吧