赞
踩
命令 | 作用 |
---|---|
a | 在光标后输入文本 |
A | 在当前行末尾输入文本 |
i | 在光标前输入文本 |
I | 在当前行开始位置输入文本 |
o | 在当前行后面输入新的一行 |
O | 在当前前面输入新的一行 |
命令 | 作用 |
---|---|
b | 移动到当前单词的开始 |
e | 移动到当前单词的结尾 |
w | 向后移动一个单词或移动一句话 |
h | 向前移动一个字符 |
j | 向下移动一行 |
k | 向上移动一行 |
l | 向后移动一个字符 |
命令 | 作用 |
---|---|
x | 删除光标所在的字符 |
dw | 删除光标所在的单词或一句话 |
d$或D | 删除光标至行尾的所有字符 |
dd | 删除当前行 |
命令 | 作用 |
---|---|
r | 替换光标所在的字符 |
R | 替换字符序列 |
cw或ce | 替换一个单词 |
cb | 替换光标所在的前一个字符 |
c$或C | 替换子光标位置至行尾的所有字符 |
cc | 替换当前行 |
命令 | 作用 |
---|---|
/abc | 向后查询“abc” |
?abc | 向前查询“abc” |
n | 向后继续查询 |
N | 向前继续查询 |
命令 | 作用 |
---|---|
/yw | 将光标所在 |
y$或Y | 将光标至行尾的字符拷贝入剪切板 |
yy | 将当前行拷贝入剪切板 |
p | 将剪切板的内容粘贴到光标后 |
P | 将剪切板的内容粘贴到光标前 |
命令 | 作用 |
---|---|
:q | 退出不保存 |
:q! | 强制退出而且不保存 |
:w | 保存编辑 |
:w filename | 将编辑内容保存到文件filename中 |
:w! filename | 将编辑内容强制保存到文件filename中 |
:wq或:x或ZZ | 保存并退出 |
make工具最主要地功能就是通过makefile文件来描述程序之间地关系并自动给维护编译工作。makefile文件是按照某种语法进行编写,说明如何编译各个源文件并生成可执行文件,并定义源文件之间地依赖关系,下面是一个makefile示意:
edit : main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o cc -o edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c display.o : display.c defs.h buffer.h cc -c display.c insert.o : insert.c defs.h buffer.h cc -c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h buffer.h command.h cc -c files.c utils.o : utils.c defs.h cc -c utils.c clean : rm edit main.o kbd.o command.o display.o \ insert.o search.o files.o utils.o
clean:
rm -f *.o
.c : .o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
%.c : %.o
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
#EXAMPLE#
扩展名 | 编程语言 | 处理方法 |
---|---|---|
.c | C原始程序 | 预处理、编译、汇编 |
.C或.cc或.cxx | C++原始程序 | 预处理、编译、汇编 |
.m | Objective-C原始程序 | 预处理、编译、汇编 |
.i | 经过预处理的C原始程序 | 编译、汇编 |
.ii | 经过预处理的C++原始程序 | 编译、汇编 |
.s | 组合语言原始程序 | 汇编 |
.S | 组合语言原始程序 | 预处理、汇编 |
.h | 预处理头文件 | 不常出现在指令行 |
选项 | 作用 |
---|---|
-x language | 对于源文件的编写语言,可通过文件名的扩展名来标示,也可以用这个选项。指定输入文件是用什么语言编写的,language具有以下内容:c、objective-c、c-header、c++、cpp-output、assembler-with-cpp |
-x none | 该选项把上面介绍的-x选项都关掉 |
-c | 将源文件编译成目标代码,而不进行连接操作 |
-S | 将源文件编译成汇编代码,而不进行连接操作 |
-E | 将源文件进行预处理后的结果输出,不做编译、汇编、连接的动作 |
-o file | 指明输出文件名为“flie” |
-v | 将整个编译过程的输出信息打印出来 |
-pipe | 由于gcc的工作过程分为四步,因此需要临时文件,使用-pipe就是用管道替换临时文件 |
2、语言相关选项(Language Options)
选项 | 作用 |
---|---|
-ansi | 表示支持ANSI标准的C程序 |
-fall-virtual | 所有可能的成员函数默认为虚函数 |
-fcond-mismatch | 允许条件表达式的第二、三个参数的类型不匹配 |
-fdollars-in-identifiers | 对于C++语言,允许在标识符(identifier)中使用’ ′ 字 符 ; 禁 止 使 用 ′ '字符;禁止使用' ′字符;禁止使用′'可以使用-fno-dollars-in-identifiers |
-fenum-int-equiv | 对于C++语言,允许int类型到枚举类型的隐式转换;正常情况下,GNU C++允许美剧类型到整形的转换,反之则不允许 |
-fexternal-templates | 该选项表示模板实例(template instantiation)全部是外部类型;相应的,如果编译时使用’-fno-external-templates’,则所有模板实例设置为内置 |
-fno-asm | 不把asm、inline、typeof作为关键字,而用__asm__, inline, __typeof__替代,‘-ansi’隐含声明了’-fno-asm’ |
-fno-builtin | 不接受不是两个下划线开头的内建函数(built-in function),‘-ansi’选项能够阻止alloca和_exit成为成为内建函数 |
-fno-strict-prototype | 对于没有参数的函数声明,按照C风格处理,即不说明参数的类型与个数 |
-fsigned-bitfields | 如果没有明确声明‘signed’或‘unsigned’修饰符,则该选项定义了有符号域;相应地,-funsinged-bitfields定义无符号域 |
-fsigned-char | 把char定义为有符号类型,如同unsigned char;相应地,-funsigned-char把char定义为无符号类型。 |
-fthis-is-variable | 对于C++语言,该选项允许对this赋值 |
-fwritable-strings | 为了兼容一些老程序,该选项可以把字符串常量存储到可写数据段 |
-traditional | 支持传统C编辑器地某些方面,可参考GNU C手册 |
-traditional-cpp | 支持传统C预处理器地某些方面内容 |
-trigraphs | 支持ANSI C trigraphs |
3、预处理相关选项(Preprocessor Options)
选项 | 作用 |
---|---|
-C | 通-E结合使用,将预处理的结果的注释保留 |
-dD | 设置处理器将所有的宏定义传输到输出端,按照出现的顺序显示 |
-dM | 设置处理器输出有效的宏定义列表,通常需要结合‘-E’使用 |
-dN | 与‘-dD’类似,但是忽略宏的参量和内容,只在终端输出‘#define name’ |
-Dmacro | 定义宏macro,宏的内容定义为字符串‘1’ |
-Dmacro=defn | 定义宏macro的内容为defn,命令行上所有的‘-D’选项在‘-U’之前处理 |
-H | 除了普通的操作外,gcc显示引用过的头文件名 |
-idirafter dir | 将目录dir添加至第二包含路径,如果某头文件主包含路径没有,则预处理器就会检索第二包含路径 |
-include file | 在处理常规输入文件之前,首先处理file文件,即先对文件file的内容进行编译;需要注意,命令行上所有‘-D’和‘-U’选项总是在‘-include file’之前处理 |
-imacros file | 在处理常规输入文件之前,首先处理文件file,但是忽略输出结果。由于忽略了文件的输出内容,因此该选项的唯一作用就是使得文件file中的宏定义生效,以便用于其他输入文件。在处理该选项之前,需要先处理‘-D’和‘-U’ |
-iwithprefix dir | 将目录添加到第二包含路径中,目录名有file和dir合并而成,这里的file由‘-iprefix’选项指定 |
-iprefix file | 将file作为‘-iwithprefix’选项的前缀 |
-M | 设置预处理器输出一个合适make的规则,用以描述各个目标文件的依赖关系。对于每个源文件,输出与一个make规则,目标文件(target)是源文件对应的目标文件名,依赖文件(dependency)是源文件中‘#include’引用的所有文件。该选项隐含了‘-E’选项 |
-MD | 与‘-M’选项相类似,但是把依赖信息输出到文件中,文件名为‘.d’。同时继续指定的编译工作,不像‘-M’选项阻止正常的编译任务。 |
-MM | 与‘-M’选项相类似,但是输出结果仅包括用户头文件,例如:“#include file” |
-MMD | 与 `-MD’ 选项类似 , 但是输出结果仅包括用户头文件 , 而不包括系统头文件 |
-nostdinc | 不在标准系统目录中检索头文件,只检索‘-I’选项指定的目录。该选项结合‘-I’可以把包含文件检索限制在显式指定的目录 |
-P | 将预处理器设置为不产生“#line”命令,需要配合‘-E’选项使用 |
-Umacro | 取消宏macro |
-undef | 不预定义任何非标准宏( 包括系统结构标志 ) |
4、汇编选项(Assembler Options)
选项 | 作用 |
---|---|
-Wa,option | 把选项option传递给汇编器,如果option含有逗号,都在逗号处分割成多个选项 |
5、连接选项(Linker Options)
选项 | 作用 |
---|---|
-llibrary | 连接名为library的库文件,连接器在标准检索目录中查询这个库文件,库文件的名字是‘liblibrary.a’。检索目录除了一些系统标准目录外,还包括用户以‘-L’选项指定的路径。 |
-I | 用来指定程序要连接的库,选项后面紧跟的是库名 |
-nostartfiles | 不连接系统标准启动文件,并且标准库文件仍然正常使用 |
-nostdlib | 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器 |
-static | 在支持动态连接(dynamic linking)的系统上,阻止连接共享库 |
-shared | 生成一个共享目标文件,并且生成的目标文件可以与其他目标文件连接生成可执行文件 |
-symbolic | 在建立共享目标文件时,把引用绑定到全局符号上,并对所有无法解析的引用作出警告 |
-Xlinker option | 把选项option传递给连接器,该选项用来传递系统特定的连接选项 |
-Wl,option | 将选项option传递给连接器,如果option具有多个逗号,则在逗号处分割成多个选项 |
-u symbol | 取消连接器symbol的符号定义,从而定义连接库模块 |
6、目录选项(Directory Options)
选项 | 作用 |
---|---|
-Idir | 在头文件的检索路径表中添加dir目录 |
-I- | 与-I选项相类似。具体应用表述为:(1)可以任何在-I-前面用-I选项指定的搜索路径只适用于 #include “file”,但他们不能用来检索#include 包含的头文件;(2)用-I选项指定的搜索路径位于-I-选项后面,则能够在这些路径中检索所有的#include指令;(3)-I-选项能够阻止当前目录(存放当前输入文件的地方)成为搜索#include "file"的第一选择。 |
-Ldir | 在‘-l’选项的检索路径中增加dir目录 |
-Bprefix | 该选项指定在哪里查询可执行文件、库文件以及编辑器的数据文件。 |
7、警告选项(Warning Options)
选项 | 作用 |
---|---|
-fsyntax-only | 诊断程序中的语法错误,而不生成输出信息 |
-pedantic | 打开完全遵循ANSI C标准所需的全部警告诊断 |
-pedantic-errors | 该选项与‘-pedantic’相似,不同之处在于显示错误而不是警告 |
-w | 禁止所有警告信息 |
-W | 针对以下事件显示额外的警告信息:(1)在优化编译时,非易变自动变量(nonvolatile automatic variable)可能在调用longjmp时发生改变而发出警告;(2)既可以返回值,也可以不返回值的函数;(3)表达式语句或逗号表达式的左侧没有产生作用(side effect),为了防止这种警告,应该将未使用的表达式前置转换未void类型;(4)无符号数用>或<=和0做比对 |
-Wall | 屏蔽‘-W’选项的警告后,在编译后显示所有其他警告信息 |
-Waggregate-return | 如果定义或调用了返回结构活联合的函数,编译器就会发出警告 |
-Wcast-align | 当某个指针类型强制转换时,导致目标所需的地址对齐增加,编辑器就会发出警告 |
-Wcast-qual | 当某个指针类型转换以便移除类型修饰符时,编辑器就会发出警告 |
-Wchar-subscript | 警告类型是char的数组下标 |
-Wcomment | 如果注释起始符号‘/*’出现在注释中,编译器就会发出警告 |
-Wconversion | 如果某函数原形导致的类型转换和无函数原形的类型转换不同,编译器发出警告 |
-Wenum-clash | 对于不同枚举类型之间的转换发出警告 ( 仅适用于 C++) |
-Werror | 视警告为错误 ; 出现任何警告即放弃编译 |
$ gcc foo.c -L /home/liang/lib/ -static -lfoo -o foo
$ ldd /usr/bin/du
linux-vdso.so.1 (0x00007ffd3f5df000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb27bbda000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb27be08000)
2、ldconfig
选项 | 作用 |
---|---|
-v或–verbose | ldconfig将显示正在扫描的目录、、检索到的动态链接库,以及它所创建的连接的名字 |
-f CONF | 指明动态链接库的配置文件为CONF,默认的为“/etc/ld.so.conf” |
-C CACHE | 指明生成的缓存文件为CACHE,默认的为“/etc/ld.so.cache”,该文件存放已经排好序的可共享动态链接库列表 |
-p或–print-cache | 设置ldconfig打印出当前缓存文件保存的所有共享库名称 |
-r ROOT | 改变应用程序的根目录为ROOT |
-n | ldconfig只扫描命令行指定的目录,不扫描默认目录(/lib、/usr/lib)与配置文件(/etc/ld.so.conf)所列的目录。 |
命令 | 作用 |
---|---|
md | 以一个地址/符号与行计数器为参数,显示从该地址开始的line-count行的内存 |
mdr | 以带有地址/符号与字节计数为参数,显示从指定的址开始的byte-count字节数的初始内存内容。本质上,它与md一样,但是它不显示起始地址,并且不在结尾显示字符转换 |
mm | 修改内存内容,它以地址/符号与新内容为参数,以new-contents替换地址处的内容 |
mmW | 更改从地址开始的W个字节 |
命令 | 作用 |
---|---|
rd | 显示处理器寄存器的内容 |
rm | 修改寄存器的内容,它以寄存器名称和new-contents作为参数,用new-contents修改寄存器,寄存器的名字因体系结构的不同而不同,目前不能修改控制寄存器 |
ef | 以一个地址作为参数,显示指定地址处的异常帧 |
命令 | 作用 |
---|---|
bp | 以一个地址/符号作为参数,在地址处设置断点,当程序遇到该断点时,则停止程序运行,并将控制权交给kdb |
bd | 以断点号作为参数,禁止特殊断点,它只是禁用断点列表中的某个断点,而不是删除该断点 |
be | 启用断点 |
bl | 列出当前的断点列表 |
bc | 从断点列表中删除断点 |
选项 | 作用 |
---|---|
D | 不可中断状态 |
R | 正在运行 |
S | 可中断休眠 |
T | 已跟踪或停止 |
Z | 僵死 |
U | 不可运行 |
5、其他命令
命令 | 作用 |
---|---|
id | 以一个地址/符号作为参数,对从该地址开始的指令进行反汇编 |
ss | 单步执行指令,并将控制返回给kdb |
ssb | 执行从当前指令指针地址开始的指令,直至遇到将引起分支转移的指令为止(典型的分支转移指令有call、return、jump等) |
set | 将环境变量env-var的值设置为value |
env | 显示所有环境变量的值 |
cpu | 切换到指定的CPU(尽在SMP结构下有用) |
ps | 显示当前活动的进程,包括pid、父进程pid、CPU号、当前状态以及对应的线程 |
section | 列出模块与内核的所有已知的段信息,其中信息段包括段名、段起始地址、段结束地址与段标识 |
lsmod | 显示所有模块的信息,包括模块名、模块大小、模块结构地址、引用计数以及被哪个模块所引用 |
rmmod | 卸载内核中的模块 |
go | 让系统继续运行,知道遇到断点为止 |
reboot | 立刻重新引导系统,该命令并没有彻底关闭系统 |
ll | 以地址、偏移量与另一个kdb命令作为参数,对链表中每个元素反复执行该kdb命令的操作 |
help或? | 显示kdb的命令和简单用法描述 |
1、gdb简介
gcc -g main.c
gcc -ggdb main.c
gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps]
[-tty=dev] [-s symfile] [-e prog] [-se prog] [-c core]
[-x cmds] [-d dir] [prog[core|procID]]
gdb命令的选项说明如下表所示:
gdb命令选项 | 作用 |
---|---|
-help | 列出所有选项,并附带简单的解释 |
-nx | 不执行来自任何“.gdbinit”类初始化文件的命令 |
-q | 及你只显示介绍和版权信息,批处理模式同样禁止 |
-batch | 在批处理模式下运行 |
-cd=dir | 用指定目录(dir)名作为运行gdb时的工作目录以替代当前目录 |
-f | 通过设置该选项来运行gdb子进程,它告诉gdb在每次显示堆栈帧时以一个可识别的标准形式输出完整的文件名、行号 |
-b bps | 在远程调试程序的状态下设置串口的比特率和波特率 |
-tty=dev | 采用指定的设备(dev)作为程序的标准输入和输出 |
-s symfile | 从文件(symfile)中读取符号表 |
-e prog | 用文件(prog)作为一个可执行文件运行,来检测与core转储文件连接的纯数据 |
-c core | 指定文件(core)来作为core转储文件来检测 |
-x cmds | 执行来自指定文件(cmds)的gdb命令 |
-d dir | 在检索源文件的路径中加入指定目录(dir) |
命令 | 作用 |
---|---|
f(ile) | 指定一个可执行文件进行调试,gdb读取这些文件的调试信息 |
l(ist) | 列出程序源文件 |
r(un) | 装载完要调试的可执行文件后,用rum命令运行可执行文件 |
b(reak) | 设置断点 |
c(ontinue) | c命令可以令中断的程序继续执行,知道下一个中断或者程序结束 |
p(rint) | 输入某个变量的值 |
n(ext) | 程序执行到断点时中断执行,可用n指令单步执行 |
s(tep) | 程序执行到断点时中断执行,可用s指令单步执行到某一函数 |
q(uit) | 退出gdb |
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。