linux里面如何单步调试!

linux里面如何单步调试!,第1张

一、GDB 概述

GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。

一般来说, GDB 主要帮忙你完成下面四个方面的功能:

1 、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

2 、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)

3 、当程序被停住时,可以检查此时你的程序中所发生的事。

4 、动态的改变你程序的执行环境。

从上面看来, GDB 和一般的调贺携李试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现 GDB 这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。

二、一个调试示例

源程序: tst.c

[cpp] view plain copy

#include <stdio.h>

int func(int n)

{

int sum=0,i

for(i=0i<ni++)

{

sum+=i

}

return sum

}

int main()

{

int i

long result = 0

for(i=1i<=100i++)

{

result += i

}

printf("result[1-100] = %d /n", result )

printf("result[1-250] = %d /n", func(250) )

}

编译生成执行文件:( Linux 下)

hchen/test>cc -g tst.c -o tst

启动Gdb:

以上是对于gdb的感性认识,接下来系统地认识一下 gdb 吧。

三、使用 GDB

1.基础

一般来说 GDB 主要调试的是 C/C++ 的程序。要调试 C/C++ 的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器( cc/gcc/g++ )的 -g 参数禅迟可以做到这一点。如:

>cc -g hello.c -o hello

>g++ -g hello.cpp -o hello

如果没有 -g ,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用 -g 把调试信息加入之后,并成功编译目标代码以后,让我们来看看如何用 gdb 来调试他。

启动 gdb 后,就你被带入 gdb 的调试环境中,就可以使用 gdb 的命令开始调试程序了, gdb 的命令可以使用 help 命令来查看,

gdb 的命令很多, gdb 把之分成许多个种类。 help 命令只是例出 gdb 的命令种类,如果要看种类中的命令,可以使用 help <class>命令,如: help breakpoints ,查看设置断点的所有命令。也可以直接 help <command>来查看命令的帮助。如下图所示:

要退出 gdb 时,只用发 quit 或命令简称 q 就行了。

2 GDB 中运行 UNIX 的 shell 程序

在 gdb 环境中,你可以执行 UNIX 的 shell 的命令,使用 gdb 的 shell 命令来完成:

shell <command string>

调用 UNIX 的 shell 来执行 <command string>,环境变隐乱量 SHELL 中定义的 UNIX 的 shell 将会被用来执行 <command string>,如果 SHELL 没有定义,那就使用 UNIX 的标准 shell : /bin/sh 。(在 Windows 中使用 Command.com 或 cmd.exe )

还有一个 gdb 命令是 make :

make <make-args>

可以在 gdb 中执行 make 命令来重新 build 自己的程序。这个命令等价于 “ shell make <make-args>”

3 在 GDB 中运行程序

在 gdb 中,运行程序使用 r 或是 run 命令。程序的运行,你有可能需要设置下面四方面的事。

1 、程序运行参数。

set args 可指定运行时参数。(如: set args 10 20 30 40 50 )

show args 命令可以查看设置好的运行参数。

2 、运行环境。

path <dir>可设定程序的运行路径。

show paths 查看程序的运行路径。

set environment varname [=value] 设置环境变量。如: set env USER=hchen

show environment [varname] 查看环境变量。

3 、工作目录。

cd <dir>相当于 shell 的 cd 命令。

pwd 显示当前的所在目录。

4 、程序的输入输出。

info terminal 显示你程序用到的终端的模式。

使用重定向控制程序输出。如: run >outfile

tty 命令可以指写输入输出的终端设备。如: tty /dev/ttyb

linux查看进程方法:

1. top 命令

top命令查看系统的资源状况

load average表示在过去的一段时间内有多少个进程企图独占CPU

zombie 进程

:不是异常情况。一个进程从创建到结束在最后那一段时间遍是僵尸。留在内存中等待父进程取的东西便是僵尸。任何程序都有僵尸状态,它占用一点内存资源,仅

仅是表象而已不必害怕。如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的stop模式:与sleep进程应区

别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。

cpu states:

nice:让出百分比irq:中断处理占用

idle:空间占用百分比 iowait:输入输出等待(如果它很大说明外存有瓶颈,需要升级硬盘(SCSI))

Mem:内存情况

设计思想:把资源省下来不用便是浪费,如添加内存后free值会不变,buff值会增大拍闷。 判断物理内存够不够,看交换分区的使用状态。

交互命令:

[Space]立即刷新显示

[h]显示帮助屏幕

[k] 杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。 一般的终止进程可以使用15信号如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

[n] 改变显示的进程数量。你会纤贺数被提示输入数量。

[u] 按用户排序。

[M] 按内存用量排序。

[o][O] 改变显示项目的顺序。

[P] 根据CPU使用百分比大小进行排序。

[T] 根据时间/累计时间进行排序。

[Ctrl+L] 擦除并且重写屏幕。

[q] 退出程序。

[r] 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

[S] 切换到累计模式。

[s] 改变两次刷新之毁首间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m

s。输入0值则系统将不断刷新,默认值是5

s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

缩写含义:

PID每个进程的ID

USER进程所有者的用户名

PRI每个进程的优先级别

NI每个优先级的值

SIZE 进程的代码大小加上数据大小再加上堆栈空间大小的总数,单位是KB RSS 进程占用的物理内存的总数量,单位是KB

SHARE进程使用共享内存的数量

STAT 进程的状态。其中S代表休眠状态D代表不可中断的休眠状态R代表运行状态Z代表僵死状态T代表停止或跟踪状态

%CPU进程自最近一次刷新以来所占用的CPU时间和总时间的百分比

%MEM进程占用的物理内存占总内存的百分比

TIME进程自启动以来所占用的总CPU时间

CPU CPU标识

COMMAND进程的命令名称

2. ps命令

ps查看当前用户的活动进程,如果加上参数可以显示更多的信息,如-a,显示所有用户的进程

ps ax :tty值为“?”是守护进程,叫deamon 无终端,大多系统服务是此进程,内核态进程是看不到的

ps axf :看进程树,以树形方式现实进程列表敲 ,init是1号进程,系统所有进程都是它派生的,杀不掉

ps axm :会把线程列出来。在linux下进程和线程是统一的,是轻量级进程的两种方式。

ps axu :显示进程的详细状态。

vsz:说此进程一共占用了多大物理内存。

rss:请求常驻内存多少

Linux系统中Tracert命令用来显示数据包到达目标主机是所经过的路径。下面由我为大家整理了linux系统中tracert命令使用详解,希望对大家有帮助!

Linux系统中tracert命令使用详解

Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包洞迹所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。

命令格式:

tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout]

参数含义:

-d 不解析目标主机的名字

-h maximum_hops 指定搜索到目标地址的最大跳跃数

-j host_list 按照主机列表中的地址释放源路由

-w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。

linux系统中tracert命令用法

tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name

如果不使用参数,将显示连接情况,如图2-23所示。

提示:

图2-23显示的是从本地计算机到163这台服务器所经过的计算机。

● -d

指定不将地址解析为计算机名,如图2-24所示。

● -h maximum_hops

指定搜索目标的最大跃点数,如图2-25所示。

● -j computer-list

指定沿computer-list的稀疏源路由。

● -w timeout

每次应答等待timeout指定的微秒数,如图2-26所示。

补充:linux系统中tracert命令原理

tracert命令也称作路由跟踪命令,用于确定IP数据库包访问目标所采取的路径,通过IP生成时间(TTL)字段和ICMP错误信息来确定,从个网络到主机之间的网络状况。

tracert命令原理与ping命令为相似,都是通过向纳茄并目标发送数据包,并通过数据包响应及丢失情况,从而判断本地与目标主机之间的网络状况,所不同的是tracert命令能够反映出网络中各个路由节点信息,以及网络状况,并且可以用以跟踪路由节点,以及监控服务器状况等作用。纳耐


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8180876.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存