首页 / 知识
关于gcc:调试选项-g如何更改二进制可执行文件?
2023-04-16 23:19:00

How Does The Debugging Option -g Change the Binary Executable?在编写C / C ++代码时,为了调试二进制可执行文件,必须在编译器/链接器上启用debug选项。 对于GCC,该选项为-g。 启用调试选项后,对二进制可执行文件有何影响? 文件中还存储哪些其他数据,以允许调试器功能正常运行? -g告诉编译器将符号表信息存储在可执行文件中。除其他外,这包括:
调试器使用此信息为符号输出有意义的名称,并将指令与源代码中的特定行相关联。 对于某些编译器,提供-g将禁用某些优化。例如,除非明确指出-O [123],否则icc会使用-g将默认优化级别设置为-O0。此外,即使您确实提供了-O [123],仍会禁用阻止堆栈跟踪的优化(例如,从堆栈帧中删除帧指针。这对性能的影响很小)。 对于某些编译器,-g将禁用可能混淆符号来源的优化(指令重新排序,循环展开,内联等)。如果要通过优化进行调试,则可以在gcc中使用-g3来解决一些问题。有关宏,扩展和可能内联的功能的其他调试信息将包括在内。这可以使调试器和性能工具将优化的代码映射到原始源,但这是最大的努力。一些优化确实使代码混乱。 有关更多信息,请查看DWARF,它最初是与ELF一起使用的调试格式(Linux和其他OS的二进制格式)。 将符号表添加到可执行文件中,该表将函数/变量名称映射到数据位置,以便调试器可以报告回有意义的信息,而不仅仅是指针。这不会影响程序的速度,您可以使用" strip"命令删除符号表。
除了调试和符号信息
默认情况下,启用调试后,大多数编译器优化功能均处于关闭状态。
但是最重??要的区别(在我看来)
检查您的编译器文档以获取更多信息:
-g在可执行文件中添加调试信息,例如变量名,函数名和行号。这使调试器(例如gdb)可以逐行逐步执行代码,设置断点并检查变量的值。由于存在这些附加信息,因此-g会增加可执行文件的大小。 同样,gcc允许将-g与-O标志一起使用,这会打开优化。调试优化的可执行文件可能非常棘手,因为可能会优化掉变量或以不同的顺序执行指令。通常,使用-g时关闭优化是一个好主意,即使这样做会使代码慢得多。 某些操作系统(如z / OS)会生成一个包含调试符号的"辅助文件"。这有助于避免使用额外信息使可执行文件膨胀。
只是出于兴趣,您可以打开一个hexeditor并查看使用 这个问题有些重叠,从另一个方面涵盖了这个问题。 |
最新内容
相关内容
linux下进程调试命令?
linux下进程调试命令?,系统,工作,软件,信息,命令,基础,地址,状态,进程,实时,Linuxquid安装调试中几个常用命令介绍1、使用mkdir 命令创建一个linux网口调试命令?
linux网口调试命令?,系统,工作,地址,信息,网络,技术指标,状态,电脑,命令,网卡,ZYNQ+linux网口调试笔记(3)PL-ETH1、在ZYNQ上使用gigE Vision协linux命令多个选项?
linux命令多个选项?,系统,工作,基础,信息,命令,工具,数据,不了,名称,环境,Linux系统基础操作指令1、linux常用命令有pwd命令、cd命令、ls命令linux常用命令选项?
linux常用命令选项?,工作,系统,信息,地址,管理,命令,标准,网络,目录,常用命令,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列linux命令行调试代码?
linux命令行调试代码?,环境,代码,信息,平台,程序,编辑,版本,步骤,体系结构,处理器,linux怎么调试pythonLinux中如何安装Python?安装pycharmPychlinux下单步调试命令?
linux下单步调试命令?,信息,系统,代码,工程,地址,工具,工作,数据,管理,环境,linux系统中怎样单步调试c++工程1、一般工作在命令行模式;c程序的linux串口调试命令?
linux串口调试命令?,设备,数据,信息,数字,系统,标准,通讯,软件,通用,状态,linux中注册了串口设备ttyE0,但是对其cat和echo指令都卡住,无任何反linux没有命令行选项?
linux没有命令行选项?,系统,首页,命令,工具,分析,第一,软件,异常,终端,空格,不知道为什么在linux命令行下输入一些命令怎么都显示没有找到?1、linux启用命令模式?
linux启用命令模式?,系统,密码,数字,首页,电脑,情况,终端,界面,模式,命令,安装了linux,但进入时候直接进入了桌面,请问怎么进入命令模式,学习llinux启用6g命令?
linux启用6g命令?,系统,工作,情况,信息,设备,指标,管理,地址,命令,状态,在linux系统中,32位机,要打开超大文件(大于4G)并读取其内容用什么函数linux二进制执行命令?
linux二进制执行命令?,系统,工作,情况,代码,信息,位置,地址,命令,文件,目录,Linux系统常用操作命令有哪些1、linux常用命令: pwd命令 该命令linux调试终端命令?
linux调试终端命令?,系统,工作,地址,首页,电脑,终端,命令,标准,信息,基础,求Linux操作系统的一些终端命令,多谢。linux系统常用操作命令linux