首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让gcc吐出从流程图到源代码行号的映射

要让gcc吐出从流程图到源代码行号的映射,您需要使用一些工具和技术。以下是一些建议:

  1. 使用-g选项编译源代码,以在可执行文件中包含调试信息。
代码语言:txt
复制
gcc -g source.c -o executable
  1. 使用gdb(GNU调试器)来调试可执行文件。gdb可以帮助您检查源代码行号、设置断点、单步执行等。
代码语言:txt
复制
gdb executable
  1. 使用-S选项让gcc只生成汇编代码,并使用-g选项包含调试信息。
代码语言:txt
复制
gcc -S -g source.c -o assembly.s
  1. 使用-E选项让gcc只进行预处理,并使用-g选项包含调试信息。
代码语言:txt
复制
gcc -E -g source.c -o preprocessed.c
  1. 使用-fdump-tree-all选项让gcc在编译过程中生成各种树形图。
代码语言:txt
复制
gcc -fdump-tree-all source.c -o executable

这将生成各种树形图文件,例如source.c.002t.optimizedsource.c.004t.gimple

  1. 使用-fdump-rtl-all选项让gcc在编译过程中生成各种RTL图。
代码语言:txt
复制
gcc -fdump-rtl-all source.c -o executable

这将生成各种RTL图文件,例如source.c.030r.lcmsource.c.031r.expand

通过以上方法,您可以生成各种不同级别的代码表示,并使用这些表示来映射流程图和源代码行号。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发你不知道事-编译&链接

0; } 在linux下只需要一个简单命令(假设源代码文件名为hello.c): $ gcc hello.c $ ....删除所有的注释//和/**/ 添加行号和文件名标识,比如#2 “hello.c” 2。...其汇编过程相当于如下命令: as hello.s –o hello.o 或者 gcc –c hello.s –o hello.o 或者使用gcc命令C源代码文件开始,经过预编译、编译和汇编直接输出目标文件...: gcc –c hello.c –o hello.o 链接(linking)   链接通常是一个人比较费解过程,为什么汇编器不直接输出可执行文件而是输出一个目标文件呢?...下面让我们来看看怎么样调用ld才可以产生一个能够正常运行Hello World程序: 注意默认情况没有gcc / 记得 : $ brew install gcc 链接相应库 [1240] 下面在贴出我们写出源代码如何变成目标代码流程图

54900

linux基本命令学习02

(Unix/Linux系统把每个设备都映射成一个文件,这就是设备文件。) /home:          普通用户宿主目录,通常将其设置在独立分区。...mG         指定行,m为目标行数, :set nu      显示行号(这个命令很重要) :set nonu     显示行号(这个命令很重要) /内容            查找指定内容...:开始行号,截止行号 s /源字符串/目标字符串/g         在指定行号范围内替换字符串(例子如下所示) :1,$ s /start/end/g                第一行开始文件最后...world (注意:文件名叫a.c 如果是c语言源代码文件,扩展名必须是.c) 4、编译这个程序(编译c语言源代码文件)   gcc -o a a.c   -o a:意思是指定编译后程序名为...windows并不会自带gcc,在windows系统下如何使用gcc呢? 方法一,直接去gcc官网下载安装版本; 方法二,安装QT时候QT会带一个gcc版本,gcc一般在qt安装目录下。

1.2K10

Linux基础操作

命令:不退出vim执行相关操作 set nu/nonu:显示/取消行号 vs 文件名:分屏操作 下面讲述在命令模式下一些操作 yy:复制,nyy当前行n行复制。...dd:剪贴,ndd当前行n行剪贴。 p:粘贴,np粘贴多少次。 u:撤销。 Shift g:光标定位文件结尾。 gg:文件最开始地方。 n Shift g:文件第n行开始。...gcc/g++ 预处理:gcc -E 源代码 -o 目标文件.i 编译:gcc -S 源代码 -o 目标文件.s 汇编:gcc -c 源代码 -o 目标文件.o 链接:gcc 源文件 -o 目标文件,默认为动态链接...,可以手动他动态静态链接-static g++使用和gcc一样。...l 行号行号处开始列,每次列10行。 b 行号:设置断点。 info b:查看断点。 d 断点编号:取消断点 r:运行,遇到断点停止。 c:运行下一个断点处停下来。 n:逐过程 s:逐语句。

47020

【Linux】Linux 编译器与调试器 -- gccg++gdb 使用

在Linux下我们可以通过如下命令来得到预处理之后代码: gcc -E test.c -o test.i # gcc:表示用 gcc 编译器来编译此代码 # -E:表示代码在完成预处理后停下来,不再继续往后编译...同时,我们此处将 gcc 编译代码分为预处理、编译、汇编、链接四个阶段是为了大家更深层次理解一个程序运行过程;日常编译代码时候直接使用 “gcc test.c -o test.out” 或 “gcc...(符号表重定位);所以,链接本质是我们在调用库函数时如何与标准库相关联问题。...yum install -y gdb gdb 调试常见选项如下: l 行号指定行号开始往下显示源代码,每次显示10行 (l – list);(注:gdb 有自动记忆命令功能,即当我们第一次使用...l 行号显示源代码: l 函数显示该函数源代码: r 运行程序: b 行号打断点,info b 查看断点,d 断点编号 删除断点: r 调试运行: n 逐过程调试,s 逐语句调试: c

1.6K00

Linux学习-开发工具使用

Linux上如何安装软件: 1.源代码安装(麻烦) 2.rpm包安装(类似windows上安装程序) 3.yum命令行(可以帮助搜索,下载,安装,解决软件依赖关系) 什么是软件包:...安装软件通常办法是下载到程序源代码, 并进行编译, 得到可执行程序,而软件包是把一些软件提前编译好,服务器上获取后可以直接进行安装 注:软件包和软件包管理器, 就好比 “App” 和 “应用商店...n行 //注意:dd与“p”配能完成剪切粘贴功能 复制: 「yw」:将光标所在之处到字尾字符复制缓冲区中 「n+yw」:复制n个字缓冲区 「yy」:复制光标所在行缓冲区 「n+yy」:表示拷贝光标所在该行...示图: 注: 选项“-E”作用是 gcc 在预处理结束后停止编译过程 选项“-o”是指目标文件,“.i”文件为已经过预处理C原始程序(临时文件) 2)编译 功能主要包括:...单条执行 continue/c:当前位置开始连续而非单步执行程序(执行下一个断点处) step/s:进入函数调用 finish:执行当前函数返回,然后挺下来等待命令 until X行号:执行跳至

3.4K20

【Linux】Linux开发工具-vim 编译器-gccg++ 调试器-gdb git操作 项目自动化构建工具-makeMakefile

20个字符 「dd」:删除光标所在行 「#dd」:光标所在行开始删除#行 2.5.5 复制 「yw」:将光标所在之处到字尾字符复制缓冲区中 「#yw」:复制#个字缓冲区 「yy」:复制光标所在行缓冲区...生成可执行文件或库文件) 3.2 gcc如何完成 格式 gcc [选项] 要编译文件 [选项] [目标文件] 3.2.1 预处理(进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等...预处理指令是以#号开头代码行 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项作用是 gcc 在预处理结束后停止编译过程 选项“-o”是指目标文件,“.i”文件为已经过预处理...其实这么多代码都是stdio.h这个头文件展开来 在预处理阶段,编译器会将我们源代码中所需要头文件拷贝源文件中来,我们头文件中可能也会包含头文件,所以可能会进行递归拷贝,这个过程叫做头文件展开...ctrl + d 或 quit 调试命令: list/l 行号:显示binFile源代码,接着上次位置往下列,每次列10行。

7110

《程序员自我修养》第二章学习笔记

第二章 编译和链接 2.1被隐藏了过程 我们知道,一个程序由源代码可执行文件往往由这几步构成: 预处理(Prepressing)-> 编译(Compilation)-> 汇编(Assembly)->...添加行号和文件名标识,比如#2"hello.c"2,以便于编译时编译器产生调试用符号信息及用于编译时产生编译错误或警告时能够显示行号   6. ...经过预编译后.i文件不包含任何宏定义(所有的宏都展开了),被包含文件也被插入.i文件中。   ...2,  链接主要内容就是:把各个模块之间相互引用部分都处理好,使得各个模块之间能够正确衔接。   3,  原理上说,链接器工作无非就是把一些指令对其他符号地址引用加以修正。   ...(2)链接器会根据所引用符号foo,自动去相应fun.c模块查找foo地址。     (3)然后将main.c中所有用到foo指令重新修正,它们目标地址为真正foo函数地址。

60250

gcov c++代码覆盖率测试工具(原理篇)

一、gcov简单介绍Gcov是一个测试C/C++代码覆盖率工具,伴随GCC发布,配合GCC共同实现对C/C++文件语句覆盖、功能函数覆盖和分支覆盖测试。...二、gcov统计生成覆盖率流程图1 gcov覆盖率生成过程Gcc在编译阶段指定 –ftest-coverage 等覆盖率测试选项后,GCC会:1、 在输出目标文件中留出一段存储区保存统计数据;2、...在源代码中每行可执行语句生成代码之后附加一段更新覆盖率统计结果代码,也就是插桩(后面详细介绍);3、 Gcc编译,会生成*.gcno文件,它包含重建基本块图和相应块源码行号信息;4、 在最终可执行文件中...跳转ARC:从一个BB另外一个BB跳转叫做一个arc,要想知道程序中每个语句和分支执行次数,就必须知道每个BB和ARC执行次数。...记录BB块和ARB数据结构为:struct bb{ long zero_word; //是否被插入链表中 const char *file_name; //当前被测试文件名 long

1.4K00

【Linux】--- Linux编译器-gccg++、调试器-gdb、项目自动化构建工具-makeMakefile 使用

实例: gcc -E test.c -o test.i。选项"-E",该选项作用是gcc从现在开始进行程序翻译,预处理完成就停下!...实例: gcc -S test.i -o test.s。用户可以使用"-S"选项来进行查看,该选项作用是gcc从现在开始进行程序翻译,编译完成就停下!...读者在此可使用选项"-c",该选项作用是gcc从现在开始进行程序翻译,汇编完成就停下!。就可看到汇编代码已转化为".o"二进制目标代码了。...调试信息大致如下: 2.2 使用方法 gdb binFile退出: ctrl + d或 quit调试命令: list/l 行号: 显示binFile源代码,接着上次位置往下列,每次列10行。...break(b) 行号: 在某一行设置断点。 break 函数名: 在某个函数开头设置断点。 info break : 查看断点信息。 finish: 执行当前函数返回,然后停下来等待命令。

27220

Linux环境基础开发工具

rz 可以很方便客户端传文件服务器,sz 也可以很方便服务器传文件客户端,就算中间隔着跳板机也不影响。...—> 一套完整配置文件(直接安装即可) 参考资料 vim入门牛逼 Linux编译器-gcc/g++使用 ---- gcc 与 g++ 安装 对于 gcc sudo yum install...,条件编译,去注释等) 编译(生成汇编) 汇编(生成机器可识别代码) 连接(生成可执行文件或库文件) 2、gcc如何完成 格式: gcc [选项] 要编译文件 [选项] [目标文件...实例: gcc –E hello.c –o hello.i (-o hello.i 也可以放到前面去,只要 -o后面接着是.i文件即可) 选项 “-E” ,该选项作用是 gcc 在预处理结束后停止编译过程...gdb binFile 退出: ctrl + d 或 quit 调试命令: (list 或者 l)+ 行号:显示binFile源代码,接着上次位置往下列,每次列10行 (list 或者

1.8K50

iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

本文分为两部分,先从介绍通用覆盖率检测原理出发,读者对覆盖率收集、解析有直观认识。之后介绍我们增量代码测试覆盖率工具实现。...写入函数中BB对应行号信息(标注基本块与源码行数关系)。...w=705&h=197&f=png&s=31171) 图5 B0,B1 对应跳转信息 B0,B1 行信息在 .gcno 中表示如下图所示,B0 块因为是入口块,只有一行,对应行号可以 B1 结构中获取...,不存在出边情况下计算所有入边执行次数**(具体实现可以参考 [gcov 工具源码](http://www.opensource.apple.com/source/gcc/gcc-5484/gcc/...,为餐饮商户提供多种营销工具,提升餐饮商户营销效率,最终达到用户“Eat Better、Live Better”美好愿景!

1.5K20

【Linux系统编程】Linux调试器——gdb 基本使用

“for”循环初始声明仅在C99模式中允许,即循环变量不能在for循环里面定义 这是因为我们得gcc版本可能比较低,不支持C99 那怎么它支持呢?...在 Debug 模式下,编译器会生成带有调试符号信息可执行文件,这些符号信息包含了变量名、函数名和源代码行号等,以便在调试过程中能够准确地追踪错误。...那在Linux上gcc/g++编译生成可执行程序其实默认是release版本,不包含调式信息,所以我们无法调式! 如何解决 那如何它以debug版本生成呢?...是可以 until 行号:跳至指定行 此时,程序就直接执行第10行了。...c(continue):当前位置执行下一个断点停下来,后面没有断点则直接到程序结束 我现在设了两个断点 现在重新开始调式程序 现在它停在了第一个断点处,我想它直接跳到下一个断点

27910

编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)

一个C语言项目中可能有多个 .c 文件一起构建,那多个 .c 文件如何生成可执行程序呢?​ 多个.c文件单独经过编译出编译处理生产对应目标文件。​  ...• 处理#include 预编译指令,将包含头文件内容插入该预编译指令位置。这个过程是递归进行,也就是说被包含头文件也可能包含其他文件。...• 删除所有的注释 • 添加行号和文件名标识,方便后续编译器生成调试信息等。 • 或保留所有的#pragma编译器指令,编译器后续会使用。​...等待最后链接时候由链接器根据引用符号 Add 在其他模块中查找 Add 函数地址,然后将 test.c 中所有引用到Add 指令重新修正,他们目标地址为真正 Add 函数地址,对于全局变量...这个地址修正过程也被叫做:重定位。 前面我们非常简洁讲解了一个C程序是如何编译和链接,最终生成可执行程序过程,其实很多内部细节无法展开讲解。

15210

【C语言系列】C语言编译流程分析

\n”); return 0; } 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)命令:gcc hello.c 可分解为如下4...#endif等 处理#include 预编译指令,将被包含文件插入该预编译指令位置。...添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号。...helloworld大体编译和链接过程就是这样了,那么编译器和链接器到底做了什么呢? 编译过程可分为6步:扫描(词法分析)、语法分析、语义分析、源代码优化、代码生成、目标代码优化。...源代码优化:源代码优化器(Source Code Optimizer),将整个语法书转化为中间代码(Intermediate Code)(中间代码是与目标机器和运行环境无关)。

10.9K50

gcc命令使用_c调用cmd并执行命令

处理#include 预编译指令,将被包含文件插入该预编译指令位置。 删除所有注释“//”和“/* */”。 添加行号和文件标识,以便编译时产生调试用行号及编译错误警告行号。...将编译生成 hello.s 文件汇编生成目标文件 hello.o GCC 选项-c 使 GCC 在执行完汇编后停止,生成目标文件 链接 静态链接: 静态链接是指在编译阶段直接把静态库加入可执行文件中去...反汇编ELF 由于 ELF 文件无法被当做普通文本文件打开,如果希望直接查看一个 ELF 文件包 含指令和数据,需要使用反汇编方法 使用 objdump -S 将其反汇编并且将其 C 语言源代码混合显示出来...: gcc命令基本操作 简单编译 预处理: gcc -E test.c -o test.i 或 gcc -E test.c gcc -E 选项,可以编译器在预处理后停止,并输出预处理结果...GCC 产生尽可能多警告信息 总结 静态库链接时搜索路径顺序: ld 会去找 GCC 命令中参数-L 再找 gcc 环境变量 LIBRARY_PATH 再找内定目录 /lib /usr/lib

1.8K40

Hello World背后故事:如何在Linux上编译C语言程序

源代码可执行文件 我们将这个文件命名为hello.c: #include int main() { printf("Hello World\n"); return...复杂软件构建过程会包括一系列活动: 版本控制系统(比如git)上获取最新源代码 编译当前源代码、检查所依赖其他库或模块 执行各类测试,比如单元测试 链接(Link)所依赖库或模块 生成可执行文件...虽然编译器并非只有GCC一种,macOS上有Clang,Windows上有MSVC,但GCC这些特点它从众多编译器间脱颖而出,很多开源软件会选择GCC完成编译工作。...综上,GCC在Linux操作系统占有举足轻重地位。 好,我们开始了解一下如何使用GCC编译hello.c文件。...预编译主要处理源代码中以#开始预编译指令,主要处理规则如下: 处理#include预编译指令,将被包含文件插入该预编译指令位置。

1.8K11

猿创征文 | 【Linux】调试器-gdb使用

debug版本下 Linux gcc/g++出来二进制程序,默认是release模式,这也就意味着无法调试 在linux下要使用gdb调试,必须在源代码生成二进制程序时候, 加上 -g 选项 这里...,变成debug版本: 此时,我们在用gdb 同时,可以对比下大小: 相关指令 list/l 行号:显示binFile源代码,接着上次位置往下列,每次列10行。...list/l 函数名:列出某个函数源代码。 r或run:运行程序。 n 或 next:单条执行。...set var:修改变量值 continue(或c):当前位置开始连续而非单步执行程序 run(或r):开始连续而非单步执行程序 delete breakpoints:删除所有断点 delete...另外,对于gdb使用我们应该在后期进行熟练掌握与使用。 ---- 三、总结 至此,关于Linux环境基本工具这里结束。

81920

9个基本GNU binutils 工具【Linux-Command-line】

汇编101 在深入研究binutils软件包本身之前,最好先了解编译基础知识。 编译是将程序某种编程语言(C / C ++)源代码或文本形式转换为机器代码过程。...该存储位置内容中还有什么?是的,你猜对了:它只不过是文本“Hello,World”。你如何确定? 使用readelf命令可以将二进制文件(a.out)任何部分转储屏幕上。...屏幕快照 2019-11-20 下午1.22.42.png addr2line:将地址转换为文件名和行号 addr2line工具只是在二进制文件中查找地址,并将其与C源代码程序中行进行匹配。...为此编写另一个测试程序; 只有这一次才能确保使用gcc“-g”标志进行编译,这将为二进制文件添加其他调试信息,并且包含行号(在此处源代码中提供)也将有所帮助: 屏幕快照 2019-11-20 下午...功能地址在下面突出显示: 屏幕快照 2019-11-20 下午1.38.10.png 现在,使用addr2line工具二进制文件映射这些地址,以匹配C源代码地址: 屏幕快照 2019-11-20

4.1K50
领券