首页
学习
活动
专区
工具
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

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

相关搜索:如何从Eclipse中的java源代码创建流程图如何解组从DynamoDB到结构的映射?如何_reindex elasticsearch数据到新的映射(从平面字段到对象)?如何在xamarin表单的列表视图中显示从1到1的行号?如何编写从python到ruby的源代码转换器?Jackson将字符串到已声明类的映射解析为字符串到映射的映射。我如何让它创建声明类的对象呢?如何跟踪从google play控制台到实际源代码的崩溃如何让我的机器人从收集到的消息中嵌入如何使用更新的映射从elasticsearch版本5.3.1升级到6.0.0如何重构这个从派生类到基类的“命令处理程序映射”?如何让Micronaut使用一个自定义的TypeConverter从映射到字符串?如何将angular 2+中的映射从html模板传递到自定义指令?如何让我的排行榜命令在discord.js上从最高到最低排序?如何将映射从类构造函数传递到类中的另一个函数将站点从angular移动到另一个:如何让301将URL从旧的重定向到新的?如何让外部可观察对象从内部可观察到的错误或成功中觉察到嵌套可观察对象?如何在postgresql中创建映射表?我使用的是从0到5的整数值,映射需要在另一个表中如何从绑定到List <T>或匿名类型的绑定源获取正确的映射名称,以便在DataGridTableStyle上使用?如何将指向物理内存的指针从内核空间传递到用户空间,并将其映射到虚拟空间Chrome扩展:从Background.js注入到选项卡中的Javascript即使选项卡重新加载也会继续运行。如何让注入的javascript只运行一次?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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] 下面在贴出我们写出源代码如何变成目标代码流程图

56900

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.3K10
  • 【LInux】基础开发工具

    #dd」:光标所在行开始删除#行 复制: 「yw」:将光标所在之处到字尾字符复制缓冲区中。...「#yw」:复制#个字缓冲区 「yy」:复制光标所在行缓冲区。 「#yy」:例如,「6yy」表示拷贝光标所在该行“往下数”6行文字。 「p」:将缓冲区内字符贴到光标所在位置。...「ctrl + r」: 撤销恢复 更改: 「cw」:更改光标所在处字尾处 「c#w」:例如,「c3w」表示更改3个字 跳至指定行: 「ctrl」+「g」列出光标所在行行号。...动态链接优点和缺点: 如何形成静态链接: 用gcc编译时候默认是动态链接,只需要在后面加上一个选项就会变成静态链接,但是我们使用有些是远程服务器是默认没有静态库,所以需要下载,只需要用下面指令进行下载即可...通过使用 gcc,我们能够将源代码编译成高效可执行文件,并对程序进行调试和优化。了解 gcc 基本用法和编译选项,将帮助我们更好地管理和构建我们项目。

    11310

    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:逐语句。

    48320

    【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.7K00

    【Linux】深度解析与实战应用:GCCG++编译器入门指南

    首先对于一个C或C++程序源代码可执行文件编译过程通常包括四个步骤:预处理、编译、汇编和链接。...实例: gcc -S hello.i -o hello.s 这条命令会生成一个汇编文件hello.s; hello.i 是要编译文件; 选项“-S”,该选项作用是 gcc在预处理、编译后停止进行汇编...在Debug模式下,编译器会生成包含大量调试信息二进制文件,这些调试信息包括源代码行号、变量名、函数名等,这些信息对于使用调试器(如GDB)来跟踪程序执行、检查变量值、设置断点等非常有用。...删除断点 delete 断点编号:删除指定编号断点。 clear 文件名:行号:删除指定文件和行号断点。...执行当前函数 finish:执行当前函数返回,然后停下来等待命令 列出源码 list/l 行号:显示binFile源代码,接着上次位置往下列,每次列10行。

    12410

    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行。

    8810

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

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

    63150

    【linux】gdb

    01.gdb使用 程序发布方式有两种,debug模式和release模式 Linux gcc/g++出来二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序时候, 加上...\n"); return 0; } gdb binFile 退出: ctrl + d 或 quit 调试命令: list/l 行号:显示binFile源代码,接着上次位置往下列,每次列10行。...list/l: l文件名:行号/函数名,I行号/函数名 list/l 函数名:列出某个函数源代码。 r或run:运行程序。...s或step:进入函数调用 finish:执行当前函数返回,然后挺下来等待命令 print( p ):打印表达式值,通过表达式可以修改变量值或者调用函数 display 变量名...:跟踪查看一个变量,每次停下来都显示它值 undisplay(编号):取消对先前设置那些变量跟踪 continue(或c):当前位置开始连续而非单步执行程序(运行下一个断点)

    9910

    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.5K00

    【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: 执行当前函数返回,然后停下来等待命令。

    38620

    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.9K50

    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.6K20

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

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

    45010

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

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

    18810

    【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.9K51

    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.3K50
    领券