Linux代码开发工具

GNU汇编器

gnu binutils软件包的所有程序

描述
addr2line把地址转换为文件名和行号
ar创建、修改和展开文件存档
as把汇编语言代码汇编成目标文件
c++filt还原C++符号的过滤器
gprof显示程序简档信息的程序
ld把目标代码文件链接为可执行文件
nlmconv把目标代码转换成Netware Loadable Module格式
nm列出目标文件中的符号
objcopy复制和翻译目标文件
objdump显示来自目标文件的信息
ranlib生成存档文件内容的索引
readelf按照ELF格式显示来自目标文件的信息
size列出目标文件或者存档文件的段长度
strings显示目标文件中的可打印字符串
strip丢弃符号
windres编译Microsoft Windows资源文件

使用汇编器as

as [-a [cdhlns] [=file]] [-D] [–defsym sym=val] [-f] [–gstabs] [–gstabs+] [–gdwarf2] [–help] [-I dir] [-J] [-K] [-L]
[–listing-lhs-width=NUM] [–listing-lhs-width2= NUM] [–listing-rhs-width=NUM] [–listing-cont-lines=NUM]
[–keep-locals] [-o objfile] [-R] [–statistics] [-V] [-version] [–version] [-W] [–warn] [–fatal-warnings] [-w] [-x]
[-Z] [–target-help] [target-options]

参数描述
-a指定输出中包含哪些清单
-D包含它用于向下兼容
–defsym在汇编源代码之前定义符号和值
-f快速汇编,跳过注释和空白
–gstabs包含每行源代码的调试信息
–gstabs+包含专门的gdb调试信息
-I指定搜索包含文件的目录
-J不警告带符号溢出
-K包含它用于向下兼容
-L在符号表中保存本地符号
–listing-lhs-width设置输出数据列的最大宽度
–listing-lhs-width2设置连续行的输出数据列的最大宽度
–listing-rhs-width设置输入源代码行的最大宽度
–listing-cont-lines设置输入的单一行在清单中输出最大行数
-o指定输出目标文件的名称
-R把数据段合并进文本段
–statistics显示汇编使用的最大空间和总时间
-v显示as的版本号
-W不显示警告消息
对于源文件使用标准输入

例子:as -o test.o test.s

GNU链接器ld

ld [-o output] objfile…

参数描述
-b指定目标代码输入文件的格式
-Bstatic
-Bdynamic只使用动态库
-Bsymbolic把引用捆绑到共享库中的全局符号
-c从指定的命令文件读取命令
–cref创建跨引用表
-d设置空格给通用符号,即使指定了可重定位输出
-defsym在输出文件重创建指定的全局符号
–demangle在错误信息中还原符号名称
-e使用指定的符号作为程序的初始执行点
-E对于ELF格式文件,把所有符号添加到动态符号表
-f对于ELF格式共享文件,设置DT_AUXILIARY名称
-F对于ELF格式共享文件,设置DT_FILTER名称
-format指定目标代码输入文件的格式,和-b相同
-g忽略,用于提供和其他工具的兼容性
-h对于ELF格式共享文件对象,设置DT_SONAME名称
-i执行增量链接
-I把指定的存档文件添加到要链接的文件清单
-L把指定的路劲添加到搜索库的目录清单
-M显示链接映射,用于诊断目的
-Map创建指定的文件来包含链接映射
-m模拟指定的链接器
-N指定读取/写入文本和数据段
-n设置文本段为只读
-noinhibit-exec生成输出文件,即使出现非致命链接错误
-no-keep-memory为内存使用优化链接
-no-warn-mismatch允许链接不匹配的目标文件
-O生成优化了的输出文件
-o指定输出文件的名称
-oformat指定输出文件的二进制格式
-R从指定的文件读取符号名称和地址
-r生成可重定位的输出
-rpath把指定的目录添加到运行时库搜索路劲
-rpath-link指定搜索运行时共享库的目录
-S忽略来自输出文件的调试器符号信息
-s忽略来自输出文件的所有符号信息
-shared创建共享库
-sort-common在输出文件中不按照长度对符号进行排序
-split-by-reloc按照指定的长度在输出文件中创建额外的段
-spilt-by-file为每个目标文件在输出文件中创建额外的段
–section-start在输出文件中指定的地址定位指定的段
-T指定链接命令文件,和-c相同
-Ttest使用指定的地址作为文本段的起始点
-Tdata使用指定的地址作为数据段的起始点
-Tbss使用指定的地址作为bss段的起始点
-t在处理输入文件时显示它们的名称
-u强制指定符号在输出文件中作为未定义符号
-warn-common当一个通用符号和另一个通用符号结合时发出警告
-warn-constructors如果没有使用任何全局构造器,则发出警告
-warn-once对于每个未定义符号只发出一次警告
-warn-section-align如果为了对齐而改动输出段地址,则发出警告
-whole-archive对于指定的存档文件,在存档中包含所有文件
-X删除所有本地临时符号
-x删除所有本地符号

例子:ld -o test test.o

GNU编译器gcc

gcc [-c | -S | -E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn…] [-pedantic] [-Idir…]
[-Ldir…] [-Dmacro [=defn]…] [-Umacro] [-foption…] [-mmachine-option…] [-o outfile] infile…

参数描述
-c编译或者汇编代码,但是不进行链接
-S编译后停止,但是不进行汇编
-E预处理后停止,但是不进行编译
-o指定要使用的输出文件名
-v显示每个编译阶段使用的命令
-std指定使用的语言标准
-g生成调试信息
-pg生成gpro制作简档要使用的额外代码
-O优化可执行代码
-W设置编译器警告消息级别
-pedantic按照C标准发布强制性诊断清单
-I指定包含文件的目录
-L指定库文件的目录
-D预定义源代码中使用的宏
-U取消任何定义了的宏
-f指定用于控制编译器行为的选项 ,列如位置无关代码-fPIC或-fPIE
-m指定与硬件相关的选项

例子:gcc -o text text.c

GNU调试器gdb

gdb [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-x cmds] [-d dir]
[prog [core | procID]]

参数描述
-b设置远程调试时串行接口的线路速度
-batch以批处理模式运行
-c指定要分析的核心转储文件
-cd指定工作目录
-d指定搜索源文件的目录
-e指定要执行的文件
-f调试时以标准格式输出文件名和行号
-nx不执行来自.gdbinit文件的命令
-q安静模式,不输出介绍
-s指定符号的文件名
-se指定符号和要执行的文件名
-tty设置标准输入和输出设备
-x从指定的文件执行gdb命令

例子:gcc -gstabs -o test test.c

KDE调试器(kdbg)

是使用图形界面的调试器

kgdb调试器

使用Visual Studio和KGDB调试内核代码教程:https://sysprogs.com/VisualKernel/tutorials/kgdb

GNU objdump程序

objdump [-d | --disassemble]

参数描述
-a如果任何文件时存档文件,则显示存档头文件
-b指定目标代码文件的目标代码格式
-C将低级符号还原为用户级别的名称
-d把目标代码反汇编为指令码
-D把所有段反汇编为指令码,包括数据
-EB指定大尾端目标文件
-EL指定小尾端目标文件
-f显示每个文件头的摘要信息
-G显示调试段的内容
-h显示每个文件段头的摘要信息
-i显示所有架构和目标格式的清单
-j只显示指定段的信息
-l使用源代码行号标记输出
-m指定进行反汇编时使用的架构
-p显示目标文件格式持有的信息
-r显示文件中的重定位条目
-R显示文件中的动态重定位条目
-s显示指定段的完整内容
-S交错显示源代码和反汇编后的代码
-t显示文件的符号表数目
-T显示文件的动态符号表条目
-x显示文件所有可用的头信息
–start-address开始显示在指定地址上的数据
–stop-address停止显示在指定地址上的数据

例子:objdump -d test.o

GNU简档器程序gprof

gprof [-I dirs]
输出格式参数

参数描述
-A显示所有函数的源代码,或者只显示指定函数的源代码
-b不显示解释分析字段的详细输出
-C显示所有函数的总计数,或者只显示指定函数的次数
-i显示简档数据文件的摘要信息
-I指定查找源文件的搜索目录清单
-J不显示注释的源代码
-L显示源文件名的完整路径名称
-p显示所有函数的一般简档,或者只显示指定函数的简档
-P不输出所有函数的一般简档,或者不显示指定函数的简档
-q显示调用图表分析
-Q不显示调用图表分析
-y在单独的输出文件中生成注释的源代码
-Z不显示函数的总技术和被调用的次数
–function-recordering按照分析显示建议的函数的重排序
–file-ordering按照分析显示建议的目标文件中重排序
-T按照传统的BSD样式显示输出
-w设置输出行的宽度
-x在函数之内显示被注释的源代码行中的每一行
–demangle在显示输出时,C++符号被还原

分析参数

参数描述
-a不分析静态声明或私有的函数的信息
-c分析程序中永远不会被调用的子函数的信息
-D忽略已知不是函数的符号(只在Solaris和HP操作系统上)
-k不分析匹配开头和结尾的symspec的函数
-l按行分析程序,而不是按照函数
-m只分析被调用超过指定次数的函数
-n只分析指定的函数的时间
-N不分析指定的函数的时间
-z分析所有函数,即使是从不被调用的哪些函数

杂项参数

参数描述
-d使gprof处于调试模式中,指定数字化的调试级别
-O指定简档数据文件的格式
-s使gprof只在简档数据文件中汇总数据
-v输出gprof的版本

例子:
gcc -o demo demo.c -pg
gprof demo > gprof.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值