当前位置:首页 » 操作系统 » linux调试命令

linux调试命令

发布时间: 2022-10-03 12:18:13

linux内核调试工具KGDB

内核工具KGDB调试环境需要为Linux 内核加上 kgdb补丁,补丁实现GDB远程调试所需要的功能,包括命令处理、陷阱处理及串口通信3个主要的部分。KGDB补丁的主要作用是在Linux 内核中添加了一个调试Stub。调试Stub是Linux 内核中的一小段代码,是运行GDB的开发机和所调试内核之间的一个媒介。GDB和调试stub之间通过GDB串行协议进行通信。GDB串行协议是-种基于消息的ASCII 码协议,包含了各种调试命令。当设置断点时,KGDB将断点的指令替换为一条 trap指令,当执行到断点时控制权就转移到调试 stub中去。此时,调试stub 的任务就是使用远程串行通信协议将当前环境传送给GDB,然后从GDB处接收命令。GDB命令告诉stub 下一步该做什么,当stub收到继续执行的命令时,将恢复程序的运行环境,把对 CPU的控制权重新交还给内核。KGDB补丁给内核添加以下3个部件:
(1 ) GDB stub
GDB stub被称为调试插桩(简称为stub),是KGDB调试器的核心。它是Linux内核中的一小段代码,用来处理主机上: GDB发来的各种请求;并且在内核处于被调试状态时,控制目标机板上的处理器。
(2)修改异常处理函数
当这个异常发生时,内核将控制权交给KGDB调试器,程序进入KGDB提供的异常处理函数中。在里面,可以分析程序的各种情况。
(3)串口通信
GDB和 stub之间通过GDB串行协议进行通信。它是一种基于消息的ASCII 码协议,包含了各种调试命令。除串口外,也可以使用网卡进行通信。以设置内核断点为例说明KGDB与GDB之间的工作过程。设置断点时,KGDB修改内核代码,将断点位置的指令替换成一条异常指令(在ARM中这是一条未定义的指令)。当执行到断点时发生异常,控制权转移到stub 的异常处理函数中。此时,stub的任务就是使用GDB串行通信协议将当前环境传送给GDB,然后从GDB处接收命令,GDB命令告诉stub下一步该做什么。当stub收到继续执行的命令时,将恢复原来替换的指令、恢复程序的运行环境,把对CPU的控制权重新交还给内核。

② 如何调试Linux shell脚本

最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。
linux/unix shell l脚本调试方法
Shell提供了一些用于调试脚本的选项,如下所示:
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
使用这些选项有三种方法,一是在命令行提供参数
$ sh -x ./script.sh二是在脚本开头提供参数
#! /bin/sh -x第三种方法是在脚本中用set命令启用或禁用参数
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fiset -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

③ linux里面如何单步调试!

一、GDB 概述

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

二、一个调试示例

源程序: tst.c

[cpp] view plain
#include <stdio.h>
int func(int n)
{
int sum=0,i;
for(i=0; i<n; i++)
{
sum+=i;
}
return sum;
}

int main()
{
int i;
long result = 0;
for(i=1; i<=100; i++)
{
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 shell脚本

1、shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误, 可以这样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。

2、shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。

3、linux/unix shell l脚本调试方法
Shell提供了一些用于调试脚本的选项,如下所示:
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
使用这些选项有三种方法,一是在命令行提供参数

⑤ Linux中的set命令的详细解释

linxu下的set命令是用来设置各种shell选项或者列出shell变量。下面由我为大家整理了linux的set命令的详细解释的相关知识,希望对大家有帮助!

一、Linux中的set命令的详细解释

功能说明:设置shell。

语法:set [+-abCdefhHklmnpPtuvx]

补充说明:用set 命令可以设置各种shell选项或者列 出shell变量.单个选项设置常用的特性.在某些选项之后-o参数将特殊特性打开.在某些选项之后使用+o参数将关闭某些特性,不带任何参数的set命 令将显示shell的全部变量.除非遇到非法的选项,否则set总是返回ture.

参数:

allexport -a 从设置开始标记所有新的和修改过的用于输出的变量

braceexpand -B 允许符号扩展,默认选项

emacs 在进行命令编辑的时候,使用内建的emacs编辑器, 默认选项

errexit -e 如果一个命令返回一个非0退出状态值(失败),就退出.

histexpand -H 在做临时替换的时候允许使用!和!! 默认选项

history 允许命令行历史,默认选项

ignoreeof 禁止coontrol-D的方式退出shell,必须输入exit。

interactive-comments 在交互式模式下, #用来表示注解

keyword -k 为命令把关键字参数放在环境中

monitor -m 允许作业控制

noclobber -C 保护文件在使用重新动向的时候不被覆盖

noexec -n 在脚本状态下读取命令但是不执行,主要为了检查语法结构。

noglob -d 禁止路径名扩展,即关闭通配符

notify -b 在后台作业以后通知客户

nounset -u 在扩展一个没有的设置的变量的时候, 显示错误的信息

onecmd -t 在读取并执行一个新的命令后退出

physical -P 如果被设置,则在使用pwd和cd命令时不使用符号连接的路径 而是物理路径

posix 改变shell行为以便符合POSIX要求

privileged 一旦被设置,shell不再读取.profile文件和env文件 shell函数也不继承任何环境

verbose -v 为调试打开verbose模式

vi 在命令行编辑的时候使用内置的vi编辑器

xtrace -x 打开调试回响模式

二、Linux中的set命令详解实例

显示环境变量

# set

BASH=/bin/bash

BASH_ARGC=()

BASH_ARGV=()

BASH_LINENO=()

BASH_SOURCE=()

BASH_VERSINFO=([0]="3" [1]="00" [2]="15" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")

BASH_VERSION='3.00.15(1)-release'

COLORS=/etc/DIR_COLORS.xterm

COLUMNS=99

DIRSTACK=()

EUID=0

GROUPS=()

G_BROKEN_FILENAMES=1

HISTFILE=/root/.bash_history

HISTFILESIZE=1000

HISTSIZE=1000

HOME=/root

HOSTNAME=hnlinux

HOSTTYPE=i386

IFS=$' '

INPUTRC=/etc/inputrc

KDEDIR=/usr

LANG=zh_CN.GB2312

LESSOPEN='|/usr/bin/lesspipe.sh %s'

LINES=34

L

MAIL=/var/spool/mail/root

MAILCHECK=60

OLDPWD=/home/uptech

OPTERR=1

OPTIND=1

OSTYPE=linux-gnu

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin

PIPESTATUS=([0]="2")

PPID=26005

PROMPT_COMMAND='echo -ne "

三、Linux的set命令的相关扩展

set、env、export——Linux中的环境变量命令

Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个专用的运行环境。通常每个用户默认的环境都是相同的,这个默认环境实际上就是一组环境 变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

什么是环境变量

环境变量是一个具有 特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。许多用户(特别是那些刚接触Linux的新手)发现这些变量有些怪异或者难以控制。其 实,这是个误会:通过使用环境变量,你可以很容易的修改一个牵涉到一个或多个应用程序的配置信息。

常见的环境变量

对于 PATH和HOME等环境变量大家都不陌生。

PATH能够指定命令的搜索路径,那么动态链接库的路径用什么变量指定呢?或者就是在 PATH里面?

比如有一个程序需要/usr/local/lib下面的一个库文件,应该怎么指定其路径呢?

经常看到有些变量如 LD_LIBRARY_PATH,LIBPATH,CLASSPATH等,他们之间有什么不同和关系?

除此之外,还有下面一些常见环境变 量。

◆ HISTSIZE是指保存历史命令记录的条数。

◆ LOGNAME是指当前用户的登录名。

◆ HOSTNAME是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

◆ SHELL是指当前用户用的是哪种Shell。

◆ LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

◆ MAIL是指当前用户的邮件存放目录。

◆ PS1是基本提示符,对于root用户是#,对于普通用户是$。PS2是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比 如下列命令会将提示符修改成字符串“Hello,My NewPrompt ”。

⑥ 如何调试Linux shell脚本

  1. 通过echo(也可以使用类似于c语言语法的printf)输出变量或者中间结果来判断是否执行符合预期,类似于我们写java程序时用system.out.printlen

  2. 使用“sh -x 脚本名称”。"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出
    来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。

⑦ linux shell死了如何调试

方法:
_hell提供了一些用于调试脚本的选项,如:
?1.-n :读一遍脚本中的命令但不执行,用于检查脚本中的语法错误。
?2.-v :一边执行脚本,一边将执行过的脚本命令打印到标准错误输出。
?3.-x :提供跟踪执行信息,将执行的每一条命令和结果依次打印出来。该选项有三种常见的使用方法:
?1.在命令行提供参数。如:itcast@itcast$ sh -x ./script.sh
?2.在脚本开头提供参数。如:#! /bin/sh -x
_诮疟局杏_et命令启用或禁用参数。如:set -x 和 set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

⑧ 如何调试Linux shell脚本

调试方法:

sh -x strangescript

这将执行该脚本并显示所有变量的值。

shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:

sh -n your_script

这将返回所有语法错误。

linux/unix shell l脚本调试方法

Shell提供了一些用于调试脚本的选项,如下所示:

-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误

-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出

-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

使用这些选项有三种方法,一是在命令行提供参数

$ sh -x ./script.sh二是在脚本开头提供参数

#! /bin/sh -x第三种方法是在脚本中用set命令启用或禁用参数

⑨ 如何调试Linux shell脚本

最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:
sh -x strangescript
这将执行该脚本并显示所有变量的值。
shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
sh -n your_script
这将返回所有语法错误。
linux/unix shell l脚本调试方法
Shell提供了一些用于调试脚本的选项,如下所示:
-n
读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
-v
一边执行脚本,一边将执行过的脚本命令打印到标准错误输出
-x
提供跟踪执行信息,将执行的每一条命令和结果依次打印出来
使用这些选项有三种方法,一是在命令行提供参数
$ sh -x ./script.sh二是在脚本开头提供参数
#! /bin/sh -x第三种方法是在脚本中用set命令启用或禁用参数
#! /bin/sh
if [ -z "$1" ]; then
set -x
echo "ERROR: Insufficient Args."
exit 1
set +x
fiset -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

热点内容
android版本号修改 发布:2025-05-16 14:53:48 浏览:172
android相机闪光灯 发布:2025-05-16 14:35:49 浏览:259
服务器无法通过ip访问 发布:2025-05-16 14:26:13 浏览:540
网吧u盘拒绝访问 发布:2025-05-16 14:13:50 浏览:260
无线网检查网络配置是怎么回事 发布:2025-05-16 14:04:03 浏览:220
网络爬虫python代码 发布:2025-05-16 14:03:26 浏览:516
汽车小组件怎么弄到安卓桌面 发布:2025-05-16 13:51:12 浏览:220
linuxg编译器下载 发布:2025-05-16 13:50:58 浏览:776
centosc编译器 发布:2025-05-16 13:50:17 浏览:948
安卓手机如何变换桌面 发布:2025-05-16 13:39:33 浏览:515