C++(3)--编译、gdb调试

3--编译和执行过程

  • 1.编译
  • 2.gdb调试
  • gdb 查core

GCC是一个编译套件,是一个以"gcc"命令为首的源码施工队。施工队的成员有gcc、cpp、as、ld四个成员

  1. 预处理–宏定义展开,头文件引入-- cpp 等价于 gcc -E
  2. 编译–C语言->汇编语言–gcc -S
  3. 汇编–汇编语言->机器语言–gcc -c
  4. 链接–链接相关的.o文件–ld

-o 指定输出文件的名字

1.编译

(win操纵系统,老九课堂笔记)
1.预处理–将头文件(.h)的具体内容展开至源文件中;删除注释;添加行号和文件标识等;预处理完产生一个.ii文件(c语言编译将产生一个.i文件)

cpp demo.cpp > demo.ii

cpp 为 C Preprocessor的缩写, >表示输出到文件
还有另外两种命令也可以用于产生.ii 文件,其中-o参数用于指定输出文件命

g++ -o demo.ii -E demo.cpp
g++ -o demo.ii demo.cpp

2.编译–对.ii文件进行词法/语法/语义分析,生成相应的汇编文件,.s文件

g++ -o demo.s -S demo.ii

3.汇编–将汇编文件转换成二进制目标文件.o .obj结尾

as -o demo.o demo.s

g++同样可以实现

g++ -o demo.o demo.s

4.连接–将目标文件和C++库函数连接,将涉及到的库代码合并到目标代码中;

g++ -o demo.exe demo.o

生成demo.exe可执行文件

(mac+vscode)
在vscode 终端上输入

g++ main.cpp -o main
"/Users/chenyingying/CppProject/Helloworld/"main

即可运行,(猜测)第一条语句是不是包括了预处理,编译,汇编,连接于一体,生成mac/linux下可执行文件main.out文件。输入目录运行对应的可执行文件。

2.gdb调试

GNU debugger–Richard Stallman设计的
要想通过gdb调试,必须在编译时加上调试接口,即-g

gcc -g ./rubbish.c input.c readfile.c -o rubbish19_debug
gdb ./rubbish19_debug

GDB 的一些常用指令:

  1. run/r–进入调试状态后,运行代码
  2. break/b–设置断点break 12 # 在源码12行设置断点
  3. list/l–显示源代码
  4. continue/c–继续执行直至下一个端点或者结束
  5. print/p–打印变量的值
  6. examine/x–查看指定内存地址中的数据,(只能查看当前被调试程序能够非法访问的地址)
  7. next/n–单步执行命令。

MAC上使用gdb(完美解决)

(证书没有添加成功,sudo应该可以跑)

gdb 查core

sudo service apport stop    # 关掉某些服务ulimit -c unlimited         # 启动某些东西xxxbuild_run app1_test     # 编译运行某个文件,产生core文件 vcat /proc/sys/kernel/core_pattern   # 查看core文件生成的路径cd xxx/test                # cd core 文件目录gdb app1_test core   	  # gdb 调试出core文件bt                        # 跳转到出core的地方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode94 二叉树的中序遍历

给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归 /*** Definition for a binary tree node.* public class TreeNode …

使用动态链接库

1. 动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载…

算法(29)--两棵树匹配

树匹配1.剑指 Offer 26. 树的子结构2.剑指 Offer 27. 二叉树的镜像3.剑指 Offer 28. 对称的二叉树1.剑指 Offer 26. 树的子结构 判断:小树B是否是大树A的一部分,需要以大树A的每个为根节点进行匹配判断。 算法:判断两个节点是否相等&#xf…

leetcode647 回文子串

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。 示例 1: 输入: "abc" 输出: 3 解释: 三个回文子串: "a", "…

windows下关于Objective-C开发环境的配置

最近IOS一直很火,也想学习以以下OC开发,一般装个虚拟机,然后装个mac,我相信大多数人的机子跑不起来或者很卡,所以之前借鉴了一个文章,就是关于在windows下配置OC开发环境,这里我把自己的安装说一…

如何选择商铺投资

如何选择商铺? 选择商铺时,需要考虑哪些因素呢? 聂先生表示,要看地段,包括周围的商业环境、停车方便程度、汽车流量、未来发展前景、视觉效果等因素。此外,地域经济也很重要,必须要有一个好的投…

PaperNotes(6)-GAN/DCGAN/WGAN/WGAN-GP/WGAN-SN-网络结构/实验效果

GAN模型网络结构实验效果演化1.GAN1.1网络结构1.2实验结果2.DCGAN2.1网络结构2.2实验结果3.WGAN3.1网络结构3.2实验结果4.WGAN-GP4.1网络结构4.2实验结果5.WGAN-SN5.1网络结构5.2实验结果小结1.GAN 文章: https://arxiv.org/pdf/1406.2661.pdf 代码: Py…

Spring Security使用

Spring Security 在web应用开发中,安全无疑是十分重要的,选择Spring Security来保护web应用是一个非常好的选择。 Spring Security 是spring项目之中的一个安全模块,可以非常方便与spring项目无缝集成。特别是在spring boot项目中加入sprin…

nginx python webpy 配置安装

安装webpy$ wget http://webpy.org/static/web.py-0.34.tar.gz$ tar xvzf web.py-0.34.tar.gz$ cd web.py-0.34$ sudo python setup.py install安装 Fluphttp://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz$ wget http://www.saddi.com/software/flup/dist/flup-1.0.2…

PaperNotes(7)-GANs模式坍塌/训练不稳定

GANs-模式坍塌-训练不稳定1.训练不稳定问题相关文章1.1 DCGAN1.2Big-GAN1.3WGAN 、WGAN-GP、SN-WGAN1.4其他工作2.模式坍塌问题相关文章2.1 MAD-GAN2.2 Unrolled GAN2.3 DRAGAN2.4 D2GAN2.5 InfoGAN2.6 Deligan2.7 EBGAN2.8 Maximum Entropy Generators for Energy-Based Model…

thinkphp框架起步认识

先看看thinkphp的文档吧:这是我在网上找的一个不错的链接地址,对自己有用,同时相信对读者也有用吧。 http://doc.thinkphp.cn/manual/class.html ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说…

leetcode403 青蛙过河

一只青蛙想要过河。 假定河流被等分为 x 个单元格,并且在每一个单元格内都有可能放有一石子(也有可能没有)。 青蛙可以跳上石头,但是不可以跳入水中。 给定石子的位置列表(用单元格序号升序表示)&#xff…

PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm

通用贝叶斯推理算法-Stein Variational Gradient DescentAbstract1 Introduction2 Background3 Variational Inference Using Smooth Transforms3.1 Stein Operator as the Derivative of KL Divergence定理3.1引理3.23.2 Stein Variational Gradient Descent4 Related Works5 …

thinkphp的增删改查

ThinkPHP 添加数据 add 方法 ThinkPHP 内置的 add 方法用于向数据表添加数据,相当于 SQL 中的 INSERT INTO 行为。ThinkPHP Insert 添加数据添加数据 add 方法是 CURD(Create,Update,Read,Delete / 创建,修改,读取,删除)中的 Create 的实现&a…

leetcode115 不同的子序列

给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是…

ThinkPHP 模板循环输出 Volist 标签

volist 标签用于在模板中循环输出数据集或者多维数组。volist 标签在模块操作中&#xff0c;select() 方法返回的是一个二维数组&#xff0c;可以用 volist 直接输出&#xff1a;<volist name"list" id"vo"> 用 户 名&#xff1a;{$vo[username]}&l…

MachineLearning(9)-最大似然、最小KL散度、交叉熵损失函数三者的关系

最大似然-最小KL散度-最小化交叉熵损失-三者的关系问题缘起&#xff1a;给定一组数据(x1,x2,...,xm)(x^1,x^2,...,x^m)(x1,x2,...,xm),希望找到这组数据服从的分布。此种情况下&#xff0c;分布规律用概率密度p(x)表征。 问题归处&#xff1a;如果能够建模/近似建模p(x)&#…

ThinkPHP redirect 页面重定向使用详解与实例

ThinkPHP redirect 方法ThinkPHP redirect 方法可以实现页面的重定向&#xff08;跳转&#xff09;功能。redirect 方法语法如下&#xff1a;$this->redirect(string url, array params, int delay, string msg) 参数说明&#xff1a;url 必须&#xff0c;重定向的 URL 表达…

PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLEabstract1 Introduction2 Background2.1 stein variational gradient descent2.2 learning energy model**contrastive Divergence**abstract 受SVGD算法的启发,本文提出两个算法用于从数据中学习深度能…

windows下的gvim配置

首要任务是下载安装Gvim7.3 。 安装完后&#xff0c;gvim菜单中文出现乱码&#xff0c;在_vimrcset文件中增加&#xff1a; " 配置多语言环境,解决中文乱码问题 if has("multi_byte") " UTF-8 编码 set encodingutf-8 set termencodingutf…