当前位置:文档之家› linux系统调试工具GDB 命令详细解释..

linux系统调试工具GDB 命令详细解释..

linux系统调试工具GDB 命令详细解释..
linux系统调试工具GDB 命令详细解释..

Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具。

和所有常用的调试工具一样,gdb提供了以下功能:

# 监视程序中变量的值

# 在程序中设置断点

# 程序的单步执行

在使用gdb前,必须先载入可执行文件,因为要进行调试,文件中就必须包含调试信息,所以在用gcc或cc编译时就需要用-g参数来打开程序的调试选项。

调试开始时,必须先载入要进行调试的程序,可以用以下两种方式:

* 在启动gdb后执行以下命令:

file 可执行文件路径

* 在gdb启动时就载入程序:

gdb 可执行文件路径

载入程序后,接下来就是要进行断点的设置,要监视的变量的添加等工作,下面对在这个过程中常会用到的命令逐一进行介绍:

* list:显示程序中的代码,常用使用格式有:

list

输出从上次调用list命令开始往后的10行程序代码。

list -

输出从上次调用list命令开始往前的10行程序代码。

list n

输出第n行附近的10行程序代码。

list function

输出函数function前后的10行程序代码。

* forward/search:从当前行向后查找匹配某个字符串的程序行。使用格式:forward/search 字符串

查找到的行号将保存在$_变量中,可以用print $_命令来查看。

* reverse-search:和forward/search相反,向前查找字符串。使用格式同上。

* break:在程序中设置断点,当程序运行到指定行上时,会暂停执行。使用格式:break 要设置断点的行号

* tbreak:设置临时断点,在设置之后只起作用一次。使用格式:

tbreak 要设置临时断点的行号

* clear:和break相反,clear用于清除断点。使用格式:

clear 要清除的断点所在的行号

* run:启动程序,在run后面带上参数可以传递给正在调试的程序。

* awatch:用来增加一个观察点(add watch),使用格式:

awatch 变量或表达式

当表达式的值发生改变或表达式的值被读取时,程序就会停止运行。

* watch:与awatch类似用来设置观察点,但程序只有当表达式的值发生改变时才会停止运行。使用格式:

watch 变量或表达式

需要注意的是,awatch和watch都必须在程序运行的过程中设置观察点,即可运行run 之后才能设置。

* commands:设置在遇到断点后执行特定的指令。使用格式有:

commands

设置遇到最后一个遇到的断点时要执行的命令

commands n

设置遇到断点号n时要执行的命令

注意,commands后面跟的是断点号,而不是断点所在的行号。

在输入命令后,就可以输入遇到断点后要执行的命令,每行一条命令,在输入最后一条命令后输入end就可以结束输入。

* delete:清除断点或自动显示的表达式。使用格式:

delete 断点号

* disable:让指定断点失效。使用格式:

disable 断点号列表

断点号之间用空格间隔开。

* enable:和disable相反,恢复失效的断点。使用格式:

enable 断点编号列表

* ignore:忽略断点。使用格式:

ignore 断点号忽略次数

* condition:设置断点在一定条件下才能生效。使用格式:

condition 断点号条件表达式

* cont/continue:使程序在暂停在断点之后继续运行。使用格式:

cont

跳过当前断点继续运行。

cont n

跳过n次断点,继续运行。

当n为1时,cont 1即为cont。

* jump:让程序跳到指定行开始调试。使用格式:

jump 行号

* next:继续执行语句,但是跳过子程序的调用。使用格式:

next

执行一条语句

next n

执行n条语句

* nexti:单步执行语句,但和next不同的是,它会跟踪到子程序的内部,但不打印出子程序内部的语句。使用格式同上。

* step:与next类似,但是它会跟踪到子程序的内部,而且会显示子程序内部的执行情况。使用格式同上。

* stepi:与step类似,但是比step更详细,是nexti和step的结合。使用格式同上。* whatis:显示某个变量或表达式的数据类型。使用格式:

whatis 变量或表达式

* ptype:和whatis类似,用于显示数据类型,但是它还可以显示typedef定义的类型等。使用格式:

ptype 变量或表达式

* set:设置程序中变量的值。使用格式:

set 变量=表达式

set 变量:=表达式

* display:增加要显示值的表达式。使用格式:

display 表达式

* info display:显示当前所有的要显示值的表达式。

* delete display/undisplay:删除要显示值的表达式。使用格式:

delete display/undisplay 表达式编号

* disable display:暂时不显示一个要表达式的值。使用格式:

disable display 表达式编号

* enable display:与disable display相反,使用表达式恢复显示。使用格式:enable display 表达式编号

* print:打印变量或表达式的值。使用格式:

print 变量或表达式

表达式中有两个符号有特殊含义:$和$$。

$表示给定序号的前一个序号,$$表示给定序号的前两个序号。

如果$和$$后面不带数字,则给定序号为当前序号。

* backtrace:打印指定个数的栈帧(stack frame)。使用格式:

backtrace 栈帧个数

* frame:打印栈帧。使用格式:

frame 栈帧号

* info frame:显示当前栈帧的详细信息。

* select-frame:选择栈帧,选择后可以用info frame来显示栈帧信息。使用格式:select-frame 栈帧号

* kill:结束当前程序的调试。

* quit:退出gdb。

如要查看所有的gdb命令,可以在gdb下键入两次Tab(制表符),运行“help command”可以查看命令command的详细使用格式。

本文仅对使用gdb调试过程中的一些常用指令的用法进行简单地总结,如要获取关于gdb 的更详细的资料,请参阅gdb的官方文档:

https://www.doczj.com/doc/ae8090916.html,/software/gdb/documentation/

gdb 命令大全

1. 启动

gdb 应用程序名

gdb 应用程序名core文件名

gdb 应用程序名pid

gdb --args 应用程序名应用程序的运行参数

帮助:

help 显示帮助

info 显示程序状态

set 修改

show 显示gdb状态

运行及运行环境设置:

set args # 设置运行参数

show args # 显示运行参数

set env 变量名= 值# 设置环境变量

unset env [变量名] # 取消环境变量

show env [变量名] # 显示环境变量

path 目录名# 把目录添加到查找路径中

show paths # 显示当前查找路径

cd 目录# 切换工作目录

pwd # 显示当前工作目录

tty /dev/pts/1 # 修改程序的输入输出到指定的tty

set inferior-tty /dev/pts/1 # 修改程序的输出到指定的tty

show inferior-tty

show tty

run 参数# 运行

start 参数# 开始运行,但是会在main函数停止

attach pid

detach

kill # 退出

Ctrl-C # 中断(SIGINT)

Ctrl-]

线程操作:

info threads # 查看所有线程信息

thread 线程id # 切换到指定线程

thread apply [threadno | all ] 参数# 对所有线程都应用某个命令

子进程调试:

set follow-fork-mode child|parent # fork后,需要跟踪谁

show follow-fork-mode

set detach-on-flow on|off # fork后,需要两个都跟踪吗

info forks # 显示所有进程信息

fork 进程id # 切换到某个进程

detach-fork 进程id # 不再跟踪某个进程

delete fork 进程id # kill某个进程并停止对它的跟踪

检查点: checkpoint/restart

查看停止原因:

info program

断点(breakpoint): 程序运行到某处就会中断

break(b) 行号|函数名|程序地址| +/-offset | filenam:func [if 条件] # 在指定位置设置断点

tbreak ... # 与break相似,只是设置一次断点

hbreak ... # 与break相似,只是设置硬件断点,需要硬件支持

thbreak ... # 与break相似,只是设置一次性硬件断点,需要硬件支持

rbreak 正则表达式# 给一批满足条件的函数打上断点

info break [断点号] # 查看某个断点或所有断点信息

set breadpoint pending auto|on|off # 查看如果断点位置没有找到时行为

show breakpoint pending

观察点(watchpoint): 表达式的值修改时会被中断

watch 表达式# 当表达式被写入,并且值被改变时中断

rwatch 表达式# 当表达式被读时中断

awatch 表达式# 当表达式被读或写时中断

info watchpoints

set can-use-hw-watchpoints 值# 设置使用的硬件观察点的数

show can-use-hw-watchpoints

rwatch与awatch需要有硬件支持,另外如果是对局部变量使用watchpoint,那退出作用域时观察点会自动被删除

另外在多线程情况下,gdb的watchpoint只对一个线程有效

捕获点(catchpoint): 程序发生某个事件时停止,如产生异常时

catch 事件名

事件包括:

throw # 产生c++异常

catch # 捕获到c++异常

exec/fork/vfork # 一个exec/fork/vfork函数调用,只对HP-UX

load/unload [库名] # 加载/卸载共享库事件,对只HP-UX

tcatch 事件名# 一次性catch

info break

断点操作:

clear [函数名|行号] # 删除断点,无参数表示删卫当前位置

delete [断点号] # 删除断点,无参数表示删所有断点

disable [断点号]

enable [断点号]

condition 断点号条件# 增加断点条件

condition 断点号# 删除断点条件

ignore 断点号数目# 忽略断点n次

commands 断点号# 当某个断点中断时打印条件

条件

end

下面是一个例子,可以一直打印当前的X值:

commands 3

printf "X:%d/n",x

cont

end

断点后操作:

continue(c) [忽略次数] # 继续执行,[忽略前面n次中断]

fg [忽略次数] # 继续执行,[忽略前面n次中断]

step(s) [n步] # 步进,重复n次

next(n) [n步] # 前进,重复n次

finish # 完成当前函数调用,一直执行到返回处,并打印返回值

until(u) [位置] # 一直执行到当前行或指定位置,或是当前函数返回advance 位置# 前面到指定位置,如果当前函数返回则停止,与until类似

stepi(si) [n步] # 精确的只执行一个汇编指令,重复n次

nexti(ni) [n步] # 精确的只执行一个汇编指令,碰到函数跳过,重复n次

set step-mode on|off # on时,如果函数没有调试信息也跟进

show step-mode

信号:

info signals # 列出所有信号的处理方式

info handle # 同上

handle 信号方式# 改变当前处理某个信号的方式

方式包括:

nostop # 当信号发生时不停止,只打印信号曾经发生过

stop # 停止并打印信号

print # 信号发生时打印

noprint # 信号发生时不打印

pass/noignore # gdb充许应用程序看到这个信号

nopass/ignore # gdb不充许应用程序看到这个信号

线程断点:

break 行号信息thread 线程号[if 条件] # 只在某个线程内加断点

线程调度锁:

set scheduler-locking on|off # off时所有线程都可以得到调度,on时只有当前show scheduler-locking

frame(f) [帧号] # 不带参数时显示所有帧信息,带参数时切换到指定帧

frame 地址# 切换到指定地址的帧

up [n] # 向上n帧

down [n] # 向下n帧

select-frame 帧号# 切换到指定帧并且不打印被转换到的帧的信息

up-silently [n] # 向上n帧,不显示帧信息

down-silently [n] # 向下n帧,不显示帧信息

调用链:

backtrace(bt) [n|-n|full] # 显示当前调用链,n限制显示的数目,-n表示显示后n个,n表示显示前n个,full的话还会显示变量信息

使用thread apply all bt 就可以显示所有线程的调用信息

set backtrace past-main on|off

show backtrace past-main

set backtrace past-entry on|off

show backtrace past-entry

set backtrace limit n # 限制调用信息的显示层数

show backtrace limit

显示帧信息:

info frame # 显示当前帧信息

info frame addr # 显示指定地址的帧信息

info args # 显示帧的参数

info locals # 显示局部变量信息

info catch # 显示本帧异常信息

显示行号:

list(l) [行号|函数|文件:行号] # 显示指定位置的信息,无参数为当前位置

list - # 显示当前行之前的信息

list first,last # 从frist显示到last行

list ,last # 从当前行显示到last行

list frist, # 从指定行显示

list + # 显示上次list后显示的内容

list - # 显示上次list前面的内容

在上面,first和last可以是下面类型:

行号

+偏移

-偏移

文件名:行号

函数名

函数名:行号

set listsize n # 修改每次显示的行数

show listsize

编辑:

edit [行号|函数|函数名:行号|文件名:函数名] # 编辑指定位置

查找:

search 表示式# 向前查找表达式

reverse-search 表示式# 向后查找表达式

指定源码目录:

directory(dir) [目录名] # 指定源文件查找目录

show directories

源码与机器码:

info line [函数名|行号] # 显示指定位置对应的机器码地址范围disassemble [函数名| 起始地址结束地址] # 对指定范围进行反汇编set disassembly-flavor att|intel # 指定汇编代码形式

show disassembly-flavor

查看数据:

ptype 表达式# 查看某个表达式的类型

print [/f] [表达式] # 按格式查看表达式内容,/f是格式化

set print address on|off # 打印时是不是显示地址信息

show print address

set print symbol-filename on|off # 是不是显示符号所在文件等信息

show print symbol-filename

set print array on | off # 是不是打印数组

show print array

set print array index on | off # 是不是打印下标

show print array index

...

表达式可以用下面的修饰符:

var@n# 表示把var当成长度为n的数组

filename::var # 表示打印某个函数内的变量,filename可以换成其它范围符如文件名{type} var # 表示把var当成type类型

输出格式:

x # 16进制

d # 10进制

u # 无符号

o # 8进制

t # 2进制

a # 地址

c # 字符

f # 浮点

查看内存:

x /nfu 地址# 查看内存

n 重复n次

f 显示格式,为print使用的格式

u 每个单元的大小,为

b byte

h 2 byte

w 4 byte

g 8 byte

自动显示:

display [/fmt] 表达式# 每次停止时都会显示表达式,fmt与print的格式一样,如果是内存地址,那fmt可像x的参数一样

undisplay 显示编号

delete display 显示编号# 这两个都是删附某个显示

disable display 显示编号# 禁止某个显示

enable display 显示编号# 重显示

display # 显示当前显示内容

info display # 查看所有display项

查看变量历史:

show values 变量名[n] # 显示变量的上次显示历史,显示n条

show values 变量名+ # 继续上次显示内容

便利变量: (声明变量的别名以方便使用)

set $foo = *object_ptr # 声明foo为object_ptr的便利变量

init-if-undefined $var = expression # 如果var还未定义则赋值

show convenience

内部便利变量:

$_ 上次x查看的地址

$__

$_exitcode 程序垢退出码

寄存器:

into registers # 除了浮点寄存器外所有寄存器

info all-registers # 所有寄存器

into registers 寄存器名# 指定寄存器内容

info float # 查看浮点寄存器状态

info vector # 查看向量寄存器状态

gdb为一些内部寄存器定义了名字,如$pc(指令),$sp(栈指针),$fp(栈帧),$ps(程序状态)

p /x $pc # 查看pc寄存器当前值

x /i $pc # 查看要执行的下一条指令

set $sp += 4 # 移动栈指针

内核中信息:

info udot # 查看内核中user struct信息

info auxv # 显示auxv内容(auxv是协助程序启动的环境变量的)

内存区域限制:

mem 起始地址结构地址属性# 对[地始地址,结构地址)区域内存进行保护,如果结构地址为0表示地址最大值0xffffffff

delete mem 编号# 删除一个内存保护

disable mem 编号# 禁止一个内存保护

enable mem 编号# 打开一个内存保护

info mem # 显示所有内存保护信息

保护的属性包括:

1. 内存访问模式: ro | wo |rw

2. 内存访问大小: 8 | 16 | 32 | 64 如果不限制,表示可按任意大小访问

3. 数据缓存: cache | nocache cache表示充许gdb缓存目标内存

内存复制到/从文件:

dump [格式] memory 文件名起始地址结构地址# 把指定内存段写到文件

dump [格式] value 文件名表达式# 把指定值写到文件

格式包括:

binary 原始二进制格式

ihex intel 16进制格式

srec S-recored格式

tekhex tektronix 16进制格式

append [binary] memory 文件名起始地址结构地址# 按2进制追加到文件

append [binary] value 文件名表达式# 按2进制追加到文件

restore 文件名[binary] bias 起始地址结构地址# 恢复文件中内容到内存.如果文件内容是原始二进制,需要指定binary参数,不然会gdb自动识别文件格式

产生core dump文件

gcore [文件名] # 产生core dump文件

字符集:

set target-charset 字符集# 声明目标机器的locale,如gdbserver所在机器

set host-charset 字符集# 声明本机的locale

set charset 字符集# 声明目标机和本机的locale

show charset

show host-charset

show target-charset

缓存远程目标的数据:为提高性能可以使用数据缓存,不过gdb不知道volatile变量,缓存可能会显示不正确的结构

set remotecache on | off

show remotecache

info dcache # 显示数据缓存的性能

C预处理宏:

macro expand(exp) 表达式# 显示宏展开结果

macro expand-once(expl) 表达式# 显示宏一次展开结果

macro info 宏名# 查看宏定义

追踪(tracepoint): 就是在某个点设置采样信息,每次经过这个点时只执行已经定义的采样动作但并不停止,最后再根据采样结果进行分析。

采样点定义:

trace 位置# 定义采样点

info tracepoints # 查看采样点列表

delete trace 采样点编号# 删除采杰点

disable trace 采样点编号# 禁止采杰点

enable trace 采样点编号# 使用采杰点

passcount 采样点编号[n] # 当通过采样点n次后停止,不指定n则在下一个断点停止

预定义动作:预定义动作以actions开始,后面是一系列的动作

actions [num] # 对采样点num定义动作

行为:

collect 表达式# 采样表达式信息

一些表达式有特殊意义,如$regs(所有寄存器),$args(所有函数参数),$locals(所有局部变量) while-steping n # 当执行第n次时的动作,下面跟自己的collect操作

采样控制:

tstart # 开始采样

tstop # 停止采样

tstatus # 显示当前采样的数据

使用收集到的数据:

tfind start # 查找第一个记录

tfind end | none # 停止查找

tfind # 查找下一个记录

tfind - # 查找上一个记录

tfind tracepoint N # 查找追踪编号为N 的下一个记录

tfind pc 地址# 查找代码在指定地址的下一个记录

tfind range 起始,结束

tfind outside 起始,结构

tfind line [文件名:]行号

tdump # 显示当前记录中追踪信息

save-tracepoints 文件名# 保存追踪信息到指定文件,后面使用source命令读

追踪中的便利变量:

$trace_frame # 当前帧编号, -1表示没有, INT

$tracepoint # 当前追踪,INT

$trace_line # 位置INT

$trace_file # 追踪文件string, 需要使用output输出,不应用printf

$trace_func # 函数名string

覆盖技术(overray): 用于调试过大的文件

gdb文件:

file 文件名# 加载文件,此文件为可执行文件,并且从这里读取符号

core 文件名# 加载core dump文件

exec-file 文件名# 加载可执行文件

symbol-file 文件名# 加载符号文件

add-symbol-file 文件名地址# 加载其它符号文件到指定地址

add-symbol-file-from-memory 地址# 从指定地址中加载符号

add-share-symbol-files 库文件# 只适用于cygwin

session 段地址# 修改段信息

info files | target # 打开当前目标信息

maint info sections # 查看程序段信息

set truct-readonly-sections on | off # 加快速度

show truct-readonly-sections

set auto-solib-add on | off # 修改自动加载动态库的模式

show auto-solib-add

info share # 打印当前加载的共享库的地址信息

share [正则表达式] # 从符合的文件中加载共享库的正则表达式

set stop-on-solib-events on | off # 设置当加载共享库时是不是要停止

show stop-on-solib-events

set solib-absolute-prefix 路径# 设置共享库的绝对路矩,当加载共享库时会以此路径下查找(类似chroot)

show solib-absolute-prefix

set solib-search-path 路径# 如果solib-absolute-prefix查找失败,那将使用这个目录查找共享库

show solib-search-path

修改远程目标的网络字节序格式: set endian big | little | auto show endian

利用gdb调试core文件

利用gdb调试core文件 什么是core dump core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。(linux中如果内存越界会收到SIGSEGV信号,然后就会core dump) 在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。往往可以通过这样的方式进行定位。 造成segment fault,产生core dump的可能原因 1、内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, strncmp, strncasecmp等函数防止读写越界。 2、多线程程序使用了线程不安全的函数。 3、多线程读写的数据未加锁保护。 对于会被多个线程同时访问的全局数据,应该注意加锁保护,否则很容易造成core dump 4、非法指针 a) 使用空指针 b) 随意使用指针转换。一个指向一段内存的指针,除非确定这段内存原先就分配为某种结构或类型,或者这种结构或类型的数组,否则不要将它转换为这种结构或类型的指针,而应该将这段内存拷贝到一个这种结构或类型中,再访问这个结构或类型。这是因为如果这段内

实例—使用gdb调试器

2.4 实例—使用gdb调试器 1.编写实例程序gcctest.c,见2.2小节的开头部分 2.编译 3.启动GDB,执行程序 启动gdb,进入gdb调试环境,可以使用gdb的命令对程序进行调试。 [root@localhost gdbtest txt]# gdb //启动gdb GNU gdb Fedora (6.8-27.el5) Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu". (gdb) run gcctest //在gdb中,运行程序使用r或是run命令,注意,gcctest没有调试信息Starting program: gcctest No executable file specified. Use the "file" or "exec-file" command. //要使用file或exec-file命令指出要运行的程序 (gdb) file gcctest //使用file命令指出要运行的程序gcctest,注意,对gdb命令也可以使用Tab gcctest gcctest.c gcctestg (gdb) file gcctest //使用file命令指出要运行的程序gcctest Reading symbols from /root/Desktop/gdbtest txt/gcctest...(no debugging symbols found)...done. (gdb) r //在gdb中,运行程序使用r或是run命令 Starting program: /root/Desktop/gdbtest txt/gcctest gcctest (no debugging symbols found) (no debugging symbols found) (no debugging symbols found) hello in main hello 1 hello 2 sum=54125560035401396161080590579269632.000000 Program exited with code 057. (gdb) file gcctestg //使用file命令指出要运行的程序gcctestg Reading symbols from /root/Desktop/gdbtest txt/gcctestg...done. (gdb) r //在gdb中,运行程序使用r或是run命令 Starting program: /root/Desktop/gdbtest txt/gcctestg gcctest hello in main hello 1 hello 2 sum=54125560035401396161080590579269632.000000 Program exited with code 057. (gdb) q //使用q或是quit命令退出gdb [root@localhost gdbtest txt]# 4.GDB命令简介

Linux命令大全完整版

Linux命令大全完整版 目录 目录........................................................................................................................................... I 1. linux系统管理命令 (1) adduser (1) chfn(change finger information) (1) chsh(change shell) (1) date (2) exit (3) finger (4) free (5) fwhois (5) gitps(gnu interactive tools process status) (5) groupdel(group delete) (6) groupmod(group modify) (6) halt (7) id (7) kill (8) last (8) lastb (8) login (9) logname (9) logout (9) logrotate (9) newgrp (10) nice (10) procinfo(process information) (11) ps(process status) (11) pstree(process status tree) (14) reboot (15)

rlogin(remote login) (16) rsh(remote shell) (16) rwho (16) screen (17) shutdown (17) sliplogin (18) su(super user) (18) sudo (19) suspend (19) swatch(simple watcher) (20) tload (20) top (21) uname (21) useradd (22) userconf (22) userdel (23) usermod (23) vlock(virtual console lock) (24) w (24) who (25) whoami (25) whois (25) 2. linux系统设置命令 (27) alias (27) apmd(advanced power management BIOS daemon) (27) aumix(audio mixer) (27) bind (29) chkconfig(check config) (29) chroot(change root) (30)

gdb单步调试(中)

一、设置断点(BreakPoint ) 我们用break 命令来设置断点。正面有几点设置断点的方法: break 在进入指定函数时停住。C++ 中可以使用class::function 或function(type,type) 格式来指定函数名。 break 在指定行号停住。 break +offset break -offset 在当前行号的前面或后面的offset 行停住。offiset 为自然数。 break filename:linenum 在源文件filename 的linenum 行处停住。 break filename:function 在源文件filename 的function 函数的入口处停住。 break *address 在程序运行的内存地址处停住。 break break 命令没有参数时,表示在下一条指令处停住。 break ... if ... 可以是上述的参数,condition 表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100 ,表示当i 为100 时停住程序。 查看断点时,可使用info 命令,如下所示:(注:n 表示断点号) info breakpoints [n] info break [n] 二、设置观察点(WatchPoint ) 观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,如果有变化,马上停住程序。我们有下面的几种方法来设置观察点: watch 为表达式(变量)expr 设置一个观察点。一量表达式值有变化时,马上停住程序。 rwatch

gbd调试

用GDB调试程序 GDB概述 ———— GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UN IX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。 一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3、当程序被停住时,可以检查此时你的程序中所发生的事。 4、动态的改变你程序的执行环境。 从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。 一个调试示例 —————— 源程序:tst.c

1 #include 2 3 int func(int n) 4 { 5 int sum=0,i; 6 for(i=0; i cc -g tst.c -o tst 使用GDB调试:

Linux基本命令大全

下面我们来介绍常用基本命令 一、注销,关机,重启 注销系统的logout命令 1,Logout 注销是登陆的相对操作,登陆系统后,若要离开系统,用户只要直接下达logout命令即可: [root@localhost root]#logout Red Hat Linuxrelease 9(Shike) Kernel 2.4.20.8 on an i686 Login: ←回到登陆的画面 2,关机或重新启动的shutdown命令 Shutdown命令可以关闭所有程序,依照用户的需要,重新启动或关机。 参数说明如下: λ立即关机:-h 参数让系统立即关机。范例如下: [root@localhost root]#shutdown –h now ←要求系统立即关机 λ指定关机时间:time参数可指定关机的时间;或设置多久时间后运行shutdown命令,范例如下: [root@localhost root]#shutdown now ←立刻关机 [root@localhost root]#shutdown +5 ←5分钟后关机 [root@localhost root]#shutdown 10:30 ←在10:30时关机 关机后自动重启:-rλ参数设置关机后重新启动。范例如下: [root@localhost root]#shutdown -r now ←立刻关闭系统并重启 [root@localhost root]#shutdown -r 23:59 ←指定在23:59时重启动 3,重新启动计算机的reboot命令 顾名思义,reboot命令是用来重新启动系统的。常用的参数如下: λ-f 参数:不依正常的程序运行关机,直接关闭系统并重新启动计算机。 -Iλ参数:在在重新启动之前关闭所有网络接口。 虽然reboot命令有个参数可以使用,但是一般只需要单独运行reboot命令就可以了 二、文件与目录的操作 列出文件列表的ls命令 1,ls(list)命令是非常有用的命令,用来显示当前目录中的文件和子目录列表。配合参数的使用,能以不同的方式显示目录内容。范例如下: ? 显示当前目录的内容: [tony@free tony]$ ls Desktop mail myinstall.log test.txt ←有两个目录及两个文件夹 ? 当运行ls命令时,并不会显示名称以―.‖开头的文件。因此可加上―-a‖参数指定要列出这些文件。范例如下: [tony@free tony]$ ls –a ? 以―-s‖参数显示每个文件所有的空间,并以―-S‖参数指定按所有占用空间的大小排序。范例如下: [tony@free tony]$ ls –s –S 总计36 4 Desktop 4 mail 24 myinstall.log 4 test.txt ? 在ls命令后直接加上欲显示的目录路径,就会列出该目录的内容。范例如下: [tony@free tony]$ ls –l/usr/games 2,切换目录的cd命令

如何在Linux中使用gdb调试C程序

如何在Linux中使用gdb调试C程序 无论多么有经验的程序员,开发的任何软件都不可能完全没有bug。因此,排查及修复bug 成为软件开发周期中最重要的任务之一。有许多办法可以排查bug(测试、代码自审等等),但是还有一些专用软件(称为调试器)可以帮助准确定位问题的所在,以便进行修复。 如果你是C/C++ 程序员,或者使用Fortran 和Modula-2 编程语言开发软件,那么你将会很乐意知道有这么一款优秀的调试器- GDB - 可以帮你更轻松地调试代码bug 以及其它问题。在这篇文章中,我们将讨论一下GDB 调试器的基础知识,包括它提供的一些有用的功能/选项。 在我们开始之前,值得一提的是,文章中的所有说明和示例都已经在Ubuntu 14.04 LTS 中测试过。教程中的示例代码都是 C 语言写的;使用的shell 为bash(4.3.11);GDB 版本为7.7.1。 GDB 调试器基础 通俗的讲,GDB 可以让你看到程序在执行过程时的内部流程,并帮你明确问题的所在。我们将在下一节通过一个有效的示例来讨论GDB 调试器的用法,但在此之前,我们先来探讨一些之后对你有帮助的基本要点。 首先,为了能够顺利使用类似GDB 这样的调试器,你必须以指定的方式编译程序,让编译器产生调试器所需的调试信息。例如,在使用gcc 编译器(我们将在本教程之后的章节用它来编译C 程序示例)编译代码的时候,你需要使用 -g 命令行选项。 IT网,http://it 想要了解gcc 编译器手册页中关于 -g 命令行选项相关的内容,请看这里。 下一步,确保在你的系统中已经安装GDB 调试器。如果没有安装,而且你使用的是基于Debian 的系统(如Ubuntu),那么你就可以使用以下命令轻松安装该工具: sudo apt-get install gdb 在其他发行版上的安装方法,请看这里。 现在,当你按照上述的方式编译完程序(gcc -g 命令行选项),同时也已经安装好GDB 调

Linux操作系统及常用命令

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。 下面我将比较常用的命令,按照系统中的作用分成以下6个部分 安装和登录命令:shutdown、reboot、install、mount、umount、exit、last; 文件处理命令:file、mkdir、grep、find、mv、ls、diff、cat; 系统管理相关命令:df、top、free、adduser、groupadd、kill、crontab; 网络操作命令:ifconfig、ping、netstat、telnet、ftp、route、scp、finger; 系统安全相关命令:passwd、su、chmod、chown、sudo、ps、who; 其它命令:tar、unzip、unarj、man 安装与登陆命令 shutdown 1.作用 shutdown命令的作用是关闭计算机,它的使用权限是超级用户root。 2.格式 shutdown [-h][-i][-k][-m][-t] 3.重要参数 -t:在改变到其它运行级别之前,告诉init程序多久以后关机。 -k:并不真正关机,只是送警告信号给每位登录者。 -h:关机后关闭电源。 -c:cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数,但是可以输入一个用来解释的讯息,而这信息将会送到每位使用者。 -F:在重启计算机时强迫fsck。 -time:设定关机前的时间。 -m: 将系统改为单用户模式。 -i:关机时显示系统信息。 -r:重启。 4.实用例子 远程重启满天星服务器192.168.0.25 shutdown -m \\192.168.0.25 -r -f -t 0 远程重启兴通博服务器192.168.0.41 shutdown -m \\192.168.0.41 -r -f -t 0 reboot 1.作用 reboot命令的作用是重新启动计算机,它的使用权限是系统管理者root。 2.格式

GDB调试及实例

GDB调试及实例 一:列文件清单 1.List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。 (gdb)set args –b –x (gdb) show args backtrace命令为堆栈提供向后跟踪功能。 Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。 三:显示数据 利用print 命令可以检查各个变量的值。 (gdb) print p (p为变量名) whatis 命令可以显示某个变量的类型 (gdb) whatis p type = int * print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容: l 对程序中函数的调用 (gdb) print find_entry(1,0) l 数据结构和其他复杂对象 (gdb) print *table_start $8={e=reference=’\000’,location=0x0,next=0x0} l 值的历史成分 (gdb)print $1 ($1为历史记录变量,在以后可以直接引用$1 的值) l 人为数组 人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h后面的10个整数,一个动态数组的语法如下所示: base@length 因此,要想显示在h后面的10个元素,可以使用h@10: (gdb)print h@10 $13=(-1,345,23,-234,0,0,0,98,345,10)

linux系统中的常见基本命令大全

linux系统中的常见基本命令大全 系统信息 arch显示机器的处理器架构(1) uname-m显示机器的处理器架构(2) uname-r显示正在使用的内核版本 dmidecode-q显示硬件系统部件-(SMBIOS/DMI) hdparm-i/dev/hda罗列一个磁盘的架构特性 hdparm-tT/dev/sda在磁盘上执行测试性读取操作 cat/proc/cpuinfo显示CPUinfo的信息 cat/proc/interrupts显示中断 cat/proc/meminfo校验内存使用 cat/proc/swaps显示哪些swap被使用 cat/proc/version显示内核的版本 cat/proc/net/dev显示网络适配器及统计 cat/proc/mounts显示已加载的文件系统 lspci-tv罗列PCI设备 lsusb-tv显示USB设备 date显示系统日期 cal2007显示2007年的日历表 date0412********.00设置日期和时间-月日时分年.秒 clock-w将时间修改保存到BIOS 关机(系统的关机、重启以及登出) shutdown-hnow关闭系统(1) init0关闭系统(2) telinit0关闭系统(3) shutdown-hhours:minutes&按预定时间关闭系统 shutdown-c取消按预定时间关闭系统 shutdown-rnow重启(1) reboot重启(2)

logout注销 文件和目录 cd/home进入'/home'目录' cd..返回上一级目录 cd../..返回上两级目录 cd进入个人的主目录 cd~user1进入个人的主目录 cd-返回上次所在的目录 pwd显示工作路径 ls查看目录中的文件 ls-F查看目录中的文件 ls-l显示文件和目录的详细资料 ls-a显示隐藏文件 ls*[0-9]*显示包含数字的文件名和目录名 tree显示文件和目录由根目录开始的树形结构(1) lstree显示文件和目录由根目录开始的树形结构(2) mkdirdir1创建一个叫做'dir1'的目录' mkdirdir1dir2同时创建两个目录 mkdir-p/tmp/dir1/dir2创建一个目录树 rm-ffile1删除一个叫做'file1'的文件' rmdirdir1删除一个叫做'dir1'的目录' rm-rfdir1删除一个叫做'dir1'的目录并同时删除其内容 rm-rfdir1dir2同时删除两个目录及它们的内容 mvdir1new_dir重命名/移动一个目录 cpfile1file2复制一个文件 cpdir/*.复制一个目录下的所有文件到当前工作目录 cp-a/tmp/dir1.复制一个目录到当前工作目录 cp-adir1dir2复制一个目录 ln-sfile1lnk1创建一个指向文件或目录的软链接 lnfile1lnk1创建一个指向文件或目录的物理链接

GDB基本命令

1. 本文介绍使用gdb调试程序的常用命令。 主要内容: [简介] [举例] [其他] [简介] ============= GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。同时GDB也具有例如ddd这样的图形化的调试端。 一般来说,GDB主要完成下面四个方面的功能: (1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 (2)可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) (3)当程序被停住时,可以检查此时你的程序中所发生的事。 (4)动态的改变你程序的执行环境。 [举例] ============= *启动gdb $gdb 这样可以和gdb进行交互了。 *启动gdb,并且分屏显示源代码: $gdb -tui 这样,使用了'-tui'选项,启动可以直接将屏幕分成两个部分,上面显示源代码,比用list方便多了。这时候使用上下方向键可以查看源代码,想要命令行使用上下键就用[Ctrl]n和[Ctrl]p. *启动gdb调试指定程序app: $gdb app 这样就在启动gdb之后直接载入了app可执行程序,需要注意的是,载入的app程序必须在编译的

时候有gdb调试选项,例如'gcc -g app app.c',注意,如果修改了程序的源代码,但是没有编译,那么在gdb中显示的会是改动后的源代码,但是运行的是改动前的程序,这样会导致跟踪错乱的。 *启动程序之后,再用gdb调试: $gdb 这里,是程序的可执行文件名,是要调试程序的PID.如果你的程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID。gdb会自动attach上去,并调试他。program应该在PATH环境变量中搜索得到。 *启动程序之后,再启动gdb调试: $gdb 这里,程序是一个服务程序,那么你可以指定这个服务程序运行时的进程ID,是要调试程序的PID.这样gdb就附加到程序上了,但是现在还没法查看源代码,用file命令指明可执行文件就可以显示源代码了。 **启动gdb之后的交互命令: 交互命令支持[Tab]补全。 *显示帮助信息: (gdb) help *载入指定的程序: (gdb) file app 这样在gdb中载入想要调试的可执行程序app。如果刚开始运行gdb而不是用gdb app启动的话可以这样载入app程序,当然编译app的时候要加入-g调试选项。 *重新运行调试的程序: (gdb) run 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和> )和shell通配符(*、?、[、])在内。

入门学习Linux常用必会60个命令实例详解

入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。 不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。 ◆安装和登录命令:login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last; ◆文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln; ◆系统管理相关命令:df、top、free、quota、at、lp、adduser、groupadd、kill、crontab; ◆网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup; ◆系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆其它命令:tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode。本文以Mandrake Linux 9.1(Kenrel 2.4.21)为例,介绍Linux下的安装和登录命令。immortality按:请用ctrl+f在本页中查找某一部分的内容或某一命令的用法。 -------------------------------------------------------------------------------- Linux必学的60个命令(1)-安装与登陆命令 login 1.作用 login的作用是登录系统,它的使用权限是所有用户。 2.格式 login [name][-p ][-h 主机名称] 3.主要参数

LINUX gdb调试命令手册

常用的gdb命令 backtrace 显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where)breakpoint 在程序中设置一个断点 cd 改变当前工作目录 clear 删除刚才停止处的断点 commands 命中断点时,列出将要执行的命令 continue 从断点开始继续执行 delete 删除一个断点或监测点;也可与其他命令一起使用 display 程序停止时显示变量和表达时 down 下移栈帧,使得另一个函数成为当前函数 frame 选择下一条continue命令的帧 info 显示与该程序有关的各种信息 jump 在源程序中的另一点开始运行 kill 异常终止在gdb 控制下运行的程序 list 列出相应于正在执行的程序的原文件内容 next 执行下一个源程序行,从而执行其整体中的一个函数 print 显示变量或表达式的值 pwd 显示当前工作目录 pype 显示一个数据结构(如一个结构或C++类)的内容 quit 退出gdb reverse-search 在源文件中反向搜索正规表达式 run 执行该程序 search 在源文件中搜索正规表达式 set variable 给变量赋值 signal 将一个信号发送到正在运行的进程 step 执行下一个源程序行,必要时进入下一个函数 undisplay display命令的反命令,不要显示表达式 until 结束当前循环 up 上移栈帧,使另一函数成为当前函数 watch 在程序中设置一个监测点(即数据断点) whatis 显示变量或函数类型

GDB命令分类详解 一:列文件清单 (2) 二:执行程序 (2) 三:显示数据 (2) 四:断点(breakpoint) (3) 五.断点的管理 (3) 六.变量的检查和赋值 (4) 七.单步执行 (4) 八.函数的调用 (4) 九.机器语言工具 (4) 十.信号 (4) 十一.原文件的搜索 (5) 十二. UNIX接口 (5) 十三. 命令的历史 (5) 十四. GDB帮助 (5) 十五. GDB多线程 (6) 十六. GDB使用范例 (7) 一:列文件清单 1.List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条run命令的参数,这是很有用的。 利用set args 命令就可以修改发送给程序的参数,而使用show args 命令就可以查看其缺省参数的列表。 (gdb)set args –b –x (gdb) show args backtrace命令为堆栈提供向后跟踪功能。 Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。 三:显示数据 利用print 命令可以检查各个变量的值。 (gdb) print p (p为变量名) whatis命令可以显示某个变量的类型 (gdb) whatis p type = int * print 是gdb的一个功能很强的命令,利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外,还可以包含以下内容:

Linux常用命令大全

Linux常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件- (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /proc/meminfo 校验内存使用 cat /proc/swaps 显示哪些swap被使用 cat /proc/version 显示内核的版本 cat /proc/net/dev 显示网络适配器及统计 cat /proc/mounts 显示已加载的文件系统 lspci -tv 罗列PCI 设备 lsusb -tv 显示USB 设备 date 显示系统日期 cal 2007 显示2007年的日历表 date 0412********.00 设置日期和时间- 月日时分年.秒clock -w 将时间修改保存到BIOS 关机(系统的关机、重启以及登出) shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定时间关闭系统shutdown -c 取消按预定时间关闭系统 shutdown -r now 重启(1) reboot 重启(2) logout 注销 文件和目录 cd /home 进入'/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件

用GDB调试程序--调试器GDB常用功能

一,GDB调试器简介 GDB是Linux下的常用调试器,主要用于调试源代码、调试运行中的进程和查看core dump文件。Linux下的调试器主要有gdb、cgdb、ddd、eclipse。GDB调试器的运行速度快、能够进行源代码同步显示。 使用-tui 选项开启gdb命令输入和源代码的分屏显示,tui即Terminal User Interface。 二,GDB常用调试命令 a)调试可执行文件 以源代码为/home/zebra/目录下的test.c文件产生的可执行文件test为例(可执行文件使用gcc进行编译,并使用-g选项以产生调试信息),进行命令的说明(详细源代码参见第三部分:三,调试实例分析 )。 gdb调试源代码流程: 1,开启gdb程序,即运行如下命令:gdb -q (-q用以使得gdb不输出gdb程序的版本等信息)2,指定调试的二进制文件:file test 3,list查看源代码 4,设定断点breakpoint main breakpoint sub 上述分别在main函数和sub函数处设定了断点。 断点可以设置在任意已知源代码文件的某一行,某一个函数,同时可以指定是设置在哪个/哪些线程上(见下边描述)。 5,运行可执行文件: run 6,这样程序会运行到断点处停止下来,gdb会打印当前断点的信息。 7,使用s 或者n进行单步调试。 s即step,n即next都是执行一条语句,然后停下来。 如果想执行一条汇编语句,则可以使用si ,ni,即step instruction,next instruction。 8,bt命令查看当前的调用栈,bt即backtrace。 9,info frame查看函数帧信息。 10,frame n 进入某个函数帧(编号为n) 11,info 命令可以对当前的函数帧的寄存器、局部变量、函数的参数进行查看。 info register;info local;info args。 12,disassemble对当前函数对应的二进制进行反汇编。 13,x/nfu address 查看内存其中address是内存开始的地址,从该地址向高地址增加, x是examinate的缩写,n表示重复次数,f表示输出格式,u表示内存大小的单位(默认是字,即4个字节)。 一般我都用x/nx address,即打印n个从address开始的内存,每个是4字节,以十六进制打印。14,continue,执行至该函数退出 15,info threads,显示当前可调试的所有线程 16,thread ,切换当前调试的线程为指定ID的线程break File:LineNumber thread if x==y。 17,thread apply command让一个/多个/所有线程执行GDB的命令command。

Ubuntu Linux操作系统常用命令详细介绍.

https://www.doczj.com/doc/ae8090916.html,/docs/article/10972 Ubuntu Linux操作系统常用命令详细介绍 Udo apt-get install 软件名安装软件命令 sudo nautilus 打开文件(有root权限) su root 切换到“root” ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回上一次所在的目录 cd ~ 或 cd 回当前用户的宿主目录 mkdir 目录名创建一个目录 rmdir 空目录名删除一个空目录 rm 文件名文件名删除一个文件或多个文件 rm -rf 非空目录名删除一个非空目录下的一切 shixinyu mv 路经/文件/经/文件移动相对路经下的文件到绝对路经下 mv 文件名新名称在当前目录下改名 find 路经 -name “字符串” 查找路经所在范围内满足字符串匹配的文件和目录fdisk fdisk -l 查看系统分区信息 fdisk fdisk /dev/sdb 为一块新的SCSI硬盘进行分区chown chown root /home 把/home的属主改成root用户 chgrp chgrp root /home 把 /home的属组改成root组 Useradd 创建一个新的用户 Groupadd 组名创建一个新的组 Passwd 用户名为用户创建密码 Passwd -d用户名删除用户密码也能登陆 Passwd -S用户名查询账号密码 Usermod -l 新用户名老用户名为用户改名 Userdel–r 用户名删除用户一切 tar -c 创建包–x 释放包 -v 显示命令过程–z 代表压缩包 tar –cvf benet.tar /home/benet 把/home/benet目录打包 tar –zcvf benet.tar.gz /mnt 把目录打包并压缩 tar –zxvf benet.tar.gz 压缩包的文件解压恢复 tar –jxvf benet.tar.bz2 解压缩make 编译 make install 安装编译好的源码包 reboot Init 6 重启LINUX系统 Halt Init 0 Shutdown –h now 关闭LINUX系统 uname -a 查看内核版本 cat /etc/issue 查看ubuntu版本 lsusb 查看usb设备 sudo ethtool eth0 查看网卡状态 cat /proc/cpuinfo 查看cpu信息 lshw 查看当前硬件信息 sudo fdisk -l 查看磁盘信息 df -h 查看硬盘剩余空间 free -m 查看当前的内存使用情况 ps -A 查看当前有哪些进程 kill 进程号(就是ps -A中的第一列的数字或者 killall 进程名( 杀死一个进程 kill -9 进程号强制杀死一个进程常用apt命令: apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明、大小、版本等 sudo apt-get install package 安装包 sudo apt-get install package - - reinstall 重新安装包 sudo apt-get -f install 修复安装”-f = –fix-missing” sudo apt-get remove package 删除包 sudo apt-get remove package - - purge 删除包,包括删除配置文件等 sudo apt-get update 更新源 sudo apt-get upgrade 更新已

用 GDB 调试程序

用 GDB 调试程序 用 gdb 调试 GCC 程序 Linux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: ?它使你能监视你程序中变量的值. ?它使你能设置断点以使程序在指定的代码行上停止执行. ?它使你能一行行的执行你的代码. 在命令行上键入 gdb 并按回车键就可以运行 gdb 了, 如果一切正常的话, gdb 将被启动并且你将在屏幕上看到类似的内容: GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Software Foundation, Inc. (gdb) 当你启动 gdb 后, 你能在命令行上指定很多的选项. 你也可以以下面的方式来运行 gdb : gdb 当你用这种方式运行 gdb , 你能直接指定想要调试的程序. 这将告诉gdb 装入名为 fname 的可执行文件. 你也可以用 gdb 去检查一个因程序异常终止而产生的 core 文件, 或者与一个正在运行的程序相连. 你可以参考 gdb 指南页或在命令行上键入 gdb -h 得到一个有关这些选项的说明的简单列表. 为调试编译代码(Compiling Code for Debugging) 为了使 gdb 正常工作, 你必须使你的程序在编译时包含调试信息. 调试信息包含你程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号. gdb 利用这些信息使源代码和机器码相关联. 在编译时用 -g 选项打开调试选项.

相关主题
文本预览
相关文档 最新文档