WinDBG教程

WinDBG教程
WinDBG教程

WinDBG教程

什么是WINDBG?

WinDbg是微软开发的免费源码级调试工具。下载地址

为:https://www.360docs.net/doc/e012834567.html,/whdc/DevTools/Debugging/default.mspx. Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。由

于大部分程序员不需要做Kernel模式调试,我在这篇文章中不会介绍Kernel

模式调试。Kernel模式调试对学习Windows核心极有帮助。如果你对此感兴趣,可以阅读Inside Windows 2000和Windbg所带的帮助文件。

这篇文章得主要目的是介绍WINDBG的主要功能以及相关的命令。关于这些命令的详细语法,请参阅帮助文件。对文章中提到的许多命令,WINDBG有相应的菜

单选项。

如何得到帮助

在命令(Command)窗口中输入.hh命会调出帮助文件令。

.hh keyword

会显示关于keyword的详细命令。

启动DEBUGGER

Windbg可以用于如下三种调试:

1.远程调试:你可以从机器A上调试在机器B

上执行的程序。具体步骤如下:

?在机器B上启动一个调试窗口(Debug

Session)。你可以直接在Windbg下运行一

个程序或者将Windbg附加(Attach)到一

个进程。

?在机器B的Windbg命令窗口上启动一个

远程调试接口(remote):

.server npipe:pipe=PIPE_NAME

PIPE_NAME是该接口的名字。

?在机器A上运行:

windbg –remote npipe:server=SERVER_NAME,pipe=PIPE_NAME

SERVER_NAME是机器B的名字。

2.Dump文件调试:如果在你的客户的机器上

出现问题,你可能不能使用远程调试来解决

问题。你可以要求你的用户将Windbg附加

到出现问题的进程上,然后在命令窗口中输

入:

.dump /ma File Name

创建一个Dump文件。在得到Dump文件后,使用如下的命令来打开它:windbg –z DUMP_FILE_NAME

3.本地进程调试:你可以在Windbg下直接运

行一个程序:

Windbg “path to executable” arguments

也可以将Windbg附加到一个正在运行的程序:

Windbg –p “process id”

Windbg –pn “process name”

注意有一种非侵入(Noninvasive)模式可以用来检查一个进程的状态并不进程的执行。当然在这种模式下无法控制被调试程序的执行。这种模式也可以用于查看一个已经在Debugger控制下运行的进程。具体命令如下:

Windbg –pv –p “process id”

Windbg –pv –pn “process name”

调试多个进程和线程

如果你想控制一个进程以及它的子进程的执行,在Windbg的命令行上加上-o 选项。Windbg中还有一个新的命令.childdbg可以用来控制子进程的调试。如果你同时调试几个进程,可以使用| 命令来显示并切换到不同的进程。

在同一个进程中可能有多个线程。~命令可以用来显示和切换线程。

调试前的必备工作

在开始调试前首先要做的工作是设置好符号(Symbols)路径。没有符号,你看到的调用堆栈基本上毫无意义。Microsoft的操作系统符号文件(PDB)是对外公开的。另外请注意在编译你自己的程序选择生成PDB文件的选项。如果设置好符号路径后,调用堆栈看起来还是不对。可以使用lm, !sym

noisy, !reload 等命令来验证符号路径是否正确。

Windbg也支持源码级的调试。在开始源码调试前,你需要用.srcpath设置源代码路径。如果你是在生成所执行代码的机器上进行调试,符号文件中的源码路径会指向正确的位置,所以不需要设置源代码路径。如果所执行代码是在另一台机器上生成的,你可以将所用的源码拷贝(保持原有的目录结构)的一个可以访问的文件夹(可以是网络路径)并将源代码路径设为该文件夹的路径。注意如果是远程调试,你需要使用.lsrcpath来设置源码路径。

静态命令:

显示调用堆栈:在连接到一个调试窗口后,首先要知道的就是程序当前的执行情况k*命令显示当前线程的堆栈。~*kb会显示所有线程的调用堆栈。如果堆栈太长,Windbg只会显示堆栈的一部分。.kframes可以用来设置缺省显示框架数。

显示局部变量:接下来要做通常是用dv显示局部变量的信息。CTRL+ALT+V 可以切换到更详细的显示模式。关于dv要注意的是在优化过的代码中dv的输出极有可能是不准确的。这时后你能做的就是阅读汇编代码来发现你感兴趣的值是否存储在寄存器中或堆栈上。有时后当前的框架(Frame)上可能找不到你想知道的数据。如果该数据是作为参数传到当前的方法中的,可以读一读上一

个或几个框架的汇编代码,有可能该数据还在堆栈的某个地址上。静态变量是

储存在固定地址中的,所以找出静态变量的值较为容易。.Frame(或者在调用

堆栈窗口中双击)可以用来切换当前的框架。注意dv命令显示的是当前框架的

内容。你也可在watch窗口中观察局部变量的值。

显示类和链表:dt可以显示数据结构。比如dt PEB 会显示操作系统进程结构。在后面跟上一个进程结构的地址会显示该结构的详细信息:dt PEB 7ffdf000。Dl命令可以显示一些特定的链表结构。

显示当前线程的错误值:!gle会显示当前线程的上一个错误值和状态

值。!error命令可以解码HRESULT。

搜索或修改内存:使用s命令来搜索字节,字或双字,QWORD或字符串。使用

e命令来修改内存。

计算表达式:?命令可以用来进行计算。关于表达式的格式请参照帮助文档。

使用n命令来切换输入数字的进制。

显示当前线程,进程和模块信息:!teb显示当前线程的环境信息。最常见的用

途是查看当前线程堆栈的起始地址,然后在堆栈中搜索值。!peb显示当前进程

的环境信息,比如执行文件的路径等等。lm显示进程中加载的模块信息。

显示寄存器的值:r命令可以显示和修改寄存器的值。如果要在表达式中使用寄存器的值,在寄存器名前加@符号(比如@eax)。

显示最相近的符号:ln Address。如果你有一个C++对象的指针,可以用来ln来查看该对象类型。

查找符号:x命令可以用来查找全局变量的地址或过程的地址。x命令支持匹配符号。x kernel32!*显示Kernel32.dll中的所有可见变量,数据结构和过程。

查看lock:!locks显示各线程的锁资源使用情况。对调试死锁很有用。

查看handle:!handle显示句柄信息。如果一段代码导致句柄泄漏,你只需要在代码执行前后使用!handle命令并比较两次输出的区别。有一个命令!htrace 对调试与句柄有关的Bug非常有用。在开始调试前输入:

!htrace –enable

然后在调试过程中使用!htrace handle_value 来显示所有与该句柄有关的调用堆栈。

显示汇编代码:u。

程序执行控制命令:

设置代码断点:bp/bu/bm 可以用来设置代码断点。你可以指定断点被跳过的次数。假设一段代码KERNEL32!SetLastError在运行很多次后会出错,你可以设置如下断点:

bp KERNEL32!SetLastError 0x100.

在出错后使用bl 来显示断点信息(注意粗体显示的值):

0 e 77e7a3b0 004f (0100) 0:*** KERNEL32!SetLastError

重新启动调试(.restart命令)并设置如下的断点:

bp Kernel32!SetLastError 0x100-0x4f

Debugger会停在出错前最后一次调用该过程的地方。

你可以指定断点被激活时Debugger应当执行的命令串。在该命令串中使用J命令可以用来设置条件断点:

bp `mysource.cpp:143` "j (poi(MyVar)”0n20) ''; 'g' "

上面的断点只在MyVar的值大于32时被激活(g命令

条件断点的用途极为广泛。你可以指定一个断点只在特殊的情况下被激活,比如传入的参数满足一定的条件,调用者是某个特殊的过程,某个全局变量被设为特殊的值等等。

设置内存断点:ba可以用来设置内存断点。调试过程中一个常见的问题是跟踪某些数据的变化。如下的断点:

ba w4 0x40000000 "kb; g"

可以打印出所有修改0x40000000的调用堆栈。

控制程序执行:p, pa,t, ta等命令可以用来控制程序的执行。

控制异常和事件处理:Debugger的缺省设置是跳过首次异常(first chance expcetion),在二次异常(second chance exception)时中断程序的执行。sx 命令显示Debugger的设置。sxe和sxd可以改变Debugger的设置。

sxe clr

可以控制Debugger在托管异常发生时中断程序的执行。常用的Debugger事件有:

av 访问异常

eh C++异常

clr 托管异常

ld 模块加载

-c 选项可以用来指定在事件发生时执行的调试命令。

dump文件查看器使用方法

Windbg-分析Windows蓝屏原因利 软件启动点File——Open Crash Dump,如图: 然后找到你的minidump文件夹,dump文件一般是"时间.dmp"如图: 打开后就会自动分析了。分析完后,看最下面,找到3.probably caused by这一行,如图:看,出来了吧那个myfault.sys文件就是罪魁祸首。 再补充点东西,

导入dump文件分析完毕后,不要关闭,在后面输入!analyze -v ,这个命令可以查看dump 文件的详细情况,如图: 对普通用户有用的还有下面一些信息: 第一行DEFAULT_BUCKET_ID: 错误类型,这个懂点编程和操作系统知识的朋友用得上点第三行PROCESS_NAME: XXX.exe 这个是导致错误的进程,查出是什么文件导致的蓝屏后,再看这里就知道是谁调用了错误文件,比如你查出123.sys导致蓝屏,但你查不到123.sys是哪个程序调用的,就可以用这个方法来看看,比如查出了是456.exe,你就可以在机子上或者网上搜索相关信息了。 好了,到这里相信大家已经学会怎么找到导致系统蓝屏的文件了,接下来怎么办呢?上网查资料,把导致蓝屏的那个文件名在网上搜索,基本就知道是什么文件了,一般网上也有相关的解决办法,看看要删除些什么插件、打什么补丁或者重装软件等等。导致问题的不一定是.sys文件也有可能是.dll,这篇文章只能帮你找出导致蓝屏的元凶,具体的解决办法得上网查。如果是查不到什么信息的.sys或者.dll就要当心了,有可能是病毒或者rootkit 附: windbg基本调试命令: r 可以显示系统崩溃时的寄存器,和最后的命令状态。 dd 显示当前内存地址,dd 参数:显示参数处的内存。 u 可以显示反汇编的指令 !analyze -v 显示分析的详细信息。 kb 显示call stack 内容 .bugcheck 可以显示出错的代码 windbg诊断蓝屏的一点补充

SQL常用命令使用方法:

SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表where 字段名=字段值order by 字段名" sql="select * from 数据表where 字段名like ‘%字段值%‘order by 字段名" sql="select top 10 * from 数据表where 字段名order by 字段名" sql="select * from 数据表where 字段名in (‘值1‘,‘值2‘,‘值3‘)" sql="select * from 数据表where 字段名between 值1 and 值2" (2) 更新数据记录: sql="update 数据表set 字段名=字段值where 条件表达式" sql="update 数据表set 字段1=值1,字段2=值2 ……字段n=值n where 条件表达式" (3) 删除数据记录: sql="delete from 数据表where 条件表达式" sql="delete from 数据表" (将数据表所有记录删除) (4) 添加数据记录: sql="insert into 数据表(字段1,字段2,字段3 …)valuess (值1,值2,值3 …)" sql="insert into 目标数据表select * from 源数据表" (把源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名) 取得一个表格栏最大的值 MIN(字段名) 取得一个表格栏最小的值 SUM(字段名) 把数据栏的值相加 引用以上函数的方法: sql="select sum(字段名) as 别名from 数据表where 条件表达式" set rs=conn.excute(sql) 用rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) ……) 例:CREATE TABLE tab01(name varchar(50),datetime default now()) DROP TABLE 数据表名称(永久性删除一个数据表) 4. 记录集对象的方法: rs.movenext 将记录指针从当前的位置向下移一行 rs.moveprevious 将记录指针从当前的位置向上移一行 rs.movefirst 将记录指针移到数据表第一行 rs.movelast 将记录指针移到数据表最后一行 rs.absoluteposition=N 将记录指针移到数据表第N行 rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否 rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否 rs.delete 删除当前记录,但记录指针不会向下移动 rs.addnew 添加记录到数据表末端 rs.update 更新数据表记录 判断所填数据是数字型 if not isNumeric(request("字段名称")) then response.write "不是数字" else response.write "数字" end if -------------------------------------------------------------------------------- simpleli 于2002-03-23 15:08:45 加贴在ASP论坛上

常用命令

文件和目录 cd /home 进入'/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls *[0-9]* 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构(1) lstree 显示文件和目录由根目录开始的树形结构(2) mkdir dir1 创建一个叫做'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 rm -f file1 删除一个叫做'file1' 的文件' rmdir dir1 删除一个叫做'dir1' 的目录' rm -rf dir1 删除一个叫做'dir1' 的目录并同时删除其内容rm -rf dir1 dir2 同时删除两个目录及它们的内容

mv dir1 new_dir 重命名/移动一个目录 cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录 cp -a dir1 dir2 复制一个目录 ln -s file1 lnk1 创建一个指向文件或目录的软链接 ln file1 lnk1 创建一个指向文件或目录的物理链接 touch -t 0712250000 file1 修改一个文件或目录的时间戳- (YYMMDDhhmm) file file1 outputs the mime type of the file as text iconv -l 列出已知的编码 iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 文件搜索

Linux上Core Dump的机制、内容和分析

Linux上Core Dump的机制、内容和分析 Psqa 左玉龙 Core,又称之为Core Dump,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量。 凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,OS 仿佛是一架被按下快门的相机,而照片就是产出的Core文件。里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。 关于Core产生的原因很多,比如过去一些Unix的版本不支持现代Linux上这种GDB直接附着到进程上进行调试的机制,需要先向进程发送终止信号,然后用工具阅读core文件。在Linux上,我们就可以使用kill向一个指定的进程发送信号或者使用gcore命令来使其主动出Core并退出。如果从浅层次的原因上来讲,出Core意味着当前进程存在BUG,需要程序员修复。从深层次的原因上讲,是当前进程触犯了某些OS层级的保护机制,逼迫OS向当前进程发送诸如SIGSEGV(即signal 11)之类的信号, 例如访问空指针或数组越界出Core,实际上是触犯了OS的内存管理,访问了非当前进程的内存空间,OS需要通过出Core来进行警示,这就好像一个人身体内存在病毒,免疫系统就会通过发热来警示,并导致人体发烧是一个道理(有意思的是,并不是每次数组越界都会出Core,这和OS的内存管理中虚拟页面分配大小和边界有关,即使不出Core,也很有可能读到脏数据,引起后续程序行为紊乱,这是一种很难追查的BUG)。 说了这些,似乎感觉Core很强势,让人感觉缺乏控制力,其实不然。控制Core产生的行为和方式,有两个途径: 1.修改/proc/sys/kernel/core_pattern文件,此文件用于控制Core文件产生的文件名,默认情况下, 此文件内容只有一行内容:“core”,此文件支持定制,一般使用%配合不同的字符,这里罗列几种:?%p 出Core进程的PID ?%u 出Core进程的UID ?%s 造成Core的signal号 ?%t 出Core的时间,从1970-01-0100:00:00开始的秒数 ?%e 出Core进程对应的可执行文件名 更强大的是,我们可以在此文件中配置管道,来将产生的Core文件作为输入,送给某个特定的处理程序,例如网络传输程序,可以将产出的Core直接送到另一台服务器上,这对于小硬盘服务器来说,是一个不错的选择。 2.Ulimit –C命令,此命令可以显示当前OS对于Core文件大小的限制,如果为0,则表示不允许产生 Core文件。如果想进行修改,可以使用: Ulimit –cn 其中n为数字,表示允许Core文件体积的最大值,单位为Kb,如果想设为无限大,可以执行:Ulimit -cunlimited 产生了Core文件之后,就是如何查看Core文件,并确定问题所在,进行修复。为此,我们不妨先来看看Core文件的格式,多了解一些Core文件。

(完整版)CAD最常用命令大全(实用版)

cad命令大全 L, *LINE 直线 ML, *MLINE 多线(创建多条平行线) PL, *PLINE 多段线 PE, *PEDIT 编辑多段线 SPL, *SPLINE 样条曲线 SPE, *SPLINEDIT 编辑样条曲线 XL, *XLINE 构造线(创建无限长的线) A, *ARC 圆弧 C, *CIRCLE 圆 DO, *DONUT 圆环 EL, *ELLIPSE 椭圆 PO, *POINT 点 DCE, *DIMCENTER 中心标记 POL, *POLYGON 正多边形 REC, *RECTANG 矩形 REG, *REGION 面域 H, *BHATCH 图案填充 BH, *BHATCH 图案填充 -H, *HATCH HE, *HATCHEDIT 图案填充...(修改一个图案或渐变填充)SO, *SOLID 二维填充(创建实体填充的三角形和四边形)*revcloud 修订云线 *ellipse 椭圆弧 DI, *DIST 距离 ME, *MEASURE 定距等分 DIV, *DIVIDE 定数等分

DT, *TEXT 单行文字 T, *MTEXT 多行文字 -T, *-MTEXT 多行文字(命令行输入) MT, *MTEXT 多行文字 ED, *DDEDIT 编辑文字、标注文字、属性定义和特征控制框ST, *STYLE 文字样式 B, *BLOCK 创建块... -B, *-BLOCK 创建块...(命令行输入) I, *INSERT 插入块 -I, *-INSERT 插入块(命令行输入) W, *WBLOCK “写块”对话框(将对象或块写入新图形文件)-W, *-WBLOCK 写块(命令行输入) -------------------------------------------------------------------------------- AR, *ARRAY 阵列 -AR, *-ARRAY 阵列(命令行输入) BR, *BREAK 打断 CHA, *CHAMFER 倒角 CO, *COPY 复制对象 CP, *COPY 复制对象 E, *ERASE 删除 EX, *EXTEND 延伸 F, *FILLET 圆角 M, *MOVE 移动 MI, *MIRROR 镜像 LEN, *LENGTHEN 拉长(修改对象的长度和圆弧的包含角)

AIX的Dump文件学习笔记(原创)

AIX的Dump文件学习笔记(原创) DUMP文件概述 为了增强故障分析能力,IBM的服务器增加了对设备故障当前环境的保存功能,就是保存一份设备故障时的内存、CPU寄存器、IO等设备的数据和状态信息,如果系统并没有停住,只是某个程序死掉,会产生CORE DUMP,在当前目录下产生一个CORE文件。而如果操作系统死掉,则产生System DUMP或者System Crash,通常会引起系统停机。DUMP的记录如下图所示。 作为一般客户通常只需要收集DUMP信息,并反馈给IBM工程师即可。当发生系统DUMP时,机器将会被宕下来。可能的原因包括:系统在进行内核操作时发生了未知的意外或者不能对其进行正常处理,都会引起DUMP。也可以由系统管理员发出命令,强制系统DUMP。 当系统进行DUMP时,DUMP管理设施自动将内核相关的数据(kernel segment0及其他由内核或者内核扩展程序记录在主DUMP表中的内存块)复制到主DUMP设备。可以把DUMP理解为系统当时的一个快照,供以后分析,分析DUMP可以在其他机器上进行,但需要复制一份此机器的内核程序,即unix_mp或unix_mp64.没有对应于DUMP的内核程序是午饭进行DUMP分析的。 DUMP的生成过程 CORE DUMP的生成过程 在进程运行出现异常行为时,例如无效地址访问、浮点异常、指令异常等,将导致系统转入内核态进行异常处理(即中断处理),向相应的进程发出特定信号例如SIGSEGV、SIGFPE、SIGILL 等。如果应用进程注册了相应信号的处理函数(例如可通过sigaction 注册信号处理函数),则调用相应处理函数进行处理(应用程序可以选择记录信息后生成core dump 并退出);否则将采取默认动作,例如SIGSEGV 的默认动作是生成core dump 并退出程序。 进程coredump 的时候,操作系统会将进程终止并释放其占用的资源,正常情况下,应用进程coredump 不会对系统本身的运行造成危害。当然如果系统中存在与此进程相关的其他进程,则这些进程会受到影响,至于后果则视其对此异常的具体处理而定。 由于相关指令已经包含在可执行文件中,core 文件一般只包含进程异常时相关的内存信息。其格式可参考/usr/include/sys/core.h 或者AIX 帮助文档的“Files Reference”章节。我们一般需要结合core 文件以及可执行程序,来分析问题所在 注:由于进程信号处理本质上是异步的,应用进程注册的信号处理函数中使用的例程需要保证是异步信号安全的,例如不能使用诸如pthread_ 开头的例程。 系统dump 生成过程 系统异常dump 的具体过程与应用进程类似,但由于更接近底层,为了避免问题所在的资源(例如文件系统)正好包含在生成dump 需要使用的资源中,造成dump 无法生成,操作系统一般会用最简单的方式来生成dump。例如系统内存小于4G 的情况下,一般直接将dump 生成在pagingspace 中;大于4G 时,会建专门的lg_dumplv 逻辑卷(裸设备),默认的dump设备/dev/hd6,次设备是/dev/sysdumpnull 保存dump 信息。在系统重启的时候,如果设置的DUMP 转存目录(文件系统中的目录)有足够空间,它将会转存成一个文件系统文件,缺省情况下,是/var/adm/ras/ 下的vmcore* 这样的文件。 下面是常见的转储设备大小规则 当服务器的内存大于4GB时,在安装AIX时,就会为系统dump 创建一专用区域,该逻辑卷名就是lg_dumplv. 其缺省大小是按以下规则分配的: 4GB < = 服务器的内存〈12GB lg_dump 的大小为1GB 12GB < = 服务器的内存〈24GB lg_dump 的大小为2GB 24GB < = 服务器的内存〈48GB lg_dump 的大小为3GB 48GB < = 服务器的内存lg_dump 的大小为4GB 系统dump 一般可以通过升级微码、提高系统补丁级别、升级驱动等方式解决。

华为常用命令

华为交换机常用命令: 1、display current-configuration //显示当前配置 2、display interface GigabitEthernet 1/1/4 //显示接口信息 3、display packet-filter interface GigabitEthernet 1/1/4 //显示接口acl应用信息 4、display acl all //显示所有acl设置3900系列交换机 5、display acl config all //显示所有acl设置6500系列交换机 6、display arp 10.78.4.1 //显示该ip地址的mac地址,所接交换机的端口位置 7、display cpu //显示cpu信息 8、system-view //进入系统图(配置交换机),等于config t 命令 9、acl number 5000 //在system-view命令后使用,进入acl配置状态 10、rule 0 deny 0806 ffff 24 0a4e0401 ffffffff 40 //在上面的命令后使用,,acl 配置例子 11、rule 1 permit 0806 ffff 24 000fe218ded7 fffffffff 34 //在上面的命令后使用,acl配置例子 12、interface GigabitEthernet 1/0/9 //在system-view命令后使用,进入接口配置状态 13、[86ZX-S6503-GigabitEthernet1/0/9]qos //在上面的命令后使用,进入接口qos配置 14、[86ZX-S6503-qosb-GigabitEthernet1/0/9]packet-filter inbound user-group 5000 //在上面的命令后使用,在接口上应用进站的acl 15、[Build4-2_S3928TP-GigabitEthernet1/1/4]packet-filter outbound user-group 5001 //在接口上应用出站的acl 16、undo acl number 5000 //取消acl number 5000 的设置 17、ip route-static 0.0.0.0 0.0.0.0 10.78.1.1 preference 60 //设置路由 18、reset counters interface Ethernet 1/0/14 //重置接口信息 华为路由器常用命令 [Quidway]dis cur ;显示当前配置[Quidway]display current-configuration ;显示当前配置[Quidway]display interfaces ;显示接口信息[Quidway]display vlan all ;显示路由信息[Quidway]display version ;显示版本信息 [Quidway]super password ;修改特权用户密码[Quidway]sysname ;交换机命名[Quidway]interface ethernet 0/1 ;进入接口视图[Quidway]interface vlan x ;进入接口视图 [Quidway-Vlan-interfacex]ip address 10.65.1.1 255.255.0.0 ;配置VLAN的IP地址 [Quidway]ip route-static 0.0.0.0 0.0.0.0 10.65.1.2 ;静态路由=网关[Quidway]rip ;三层交换支持[Quidway]local-user ftp [Quidway]user-interface vty 0 4 ;进入虚拟终端 [S3026-ui-vty0-4]authentication-mode password ;设置口令模式 [S3026-ui-vty0-4]set authentication-mode password simple 222 ;设置口令 [S3026-ui-vty0-4]user privilege level 3 ;用户级别

linu 主机利用crash分析 var crash 下的vmcore 的dump分析

当主机crash后,会在这个目录下生成vmcore,也就是dump,如何分析这个dump来定位宕机的原因呢? 可以执行crash vmlinux /var/crash/127.0.0.1-2014-06-22-16:08:36 来进入分析模式(vnlinux这里要指定的) 他会报错,原因应该是缺乏kernel-debuginfo包,我们安装下后再尝试: 要想crash可以分析core-dump,必须要安装这三个包: 安装完后,我们可以利用find / -name vmlinux 上面的crash爆出了: 报错,这是由于kernel-debuginfo-common-x86_64包的版本和本机内核版本不一致照成的。 (说下:要想使用crash,只要保证debuginfo的版本和你要分析的core的内核版本本机的kernel版本三者的版本必须一样,任意一个不一致都会导致不能分析dump)

# # 选择包和版本 # 再选择show debug package

找到debug包 下载就可以了 ---------------------------------------- 然后安装一下: #安装包开始 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++至于我们怎么知道coredump的内核版本,可以cd /var/crash/127.0.0.1---------/ 然后执行 strings vmcore |grep 'OSRELEASE' 可以显示出vmcore的内核版本 顺便附一下内核版本和系统版本的对应关系 CentOS 6.0/RHEL6 Update 0 -------------------> 2.6.32-71 CentOS 6.1/RHEL6 Update 1 -------------------> 2.6.32-131 CentOS 6.2/RHEL6 Update 2 -------------------> 2.6.32-220 CentOS 6.3/RHEL6 Update 3 -------------------> 2.6.32-279 CentOS 6.4/RHEL6 Update 4 -------------------> 2.6.32-358 CentOS 6.5/RHEL6 Update 5 -------------------> 2.6.32-431 CentOS 6.6/RHEL6 Update 6 -------------------> 2.6.32-504 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #后再分析下dump

Cad常用命令及使用方法

Cad常用命令及使用方法 一、绘图命令 直线:L 用法:输入命令L/回车/鼠标指定第一点/输入数值(也就是指定第二点)/回车(这时直线就画出来了)/回车(结束命令) 射线:RAY 用法:输入命令RAY/回车/鼠标指定射线起点/指定通过点/回车(结束命令) 构造线:XL 用法:输入命令XL/回车/鼠标指定构造线起点/指定通过点/回车(结束命令) 多段线:PL 用法1:同直线命令 用法2:输入命令PL/回车/指定起点/输入W(绘制带有宽度的线)/回车/指定线起点宽度/回车/指定线结束点宽度/回车/输入数值(线的长度值)/回车(结束命令) 正多边形:POL 用法:输入命令POL/回车/指定边数/回车/鼠标指定正多边形的中心点/输入选项(C外切于圆;I内接于圆)/回车/输入半径/回车(结束命令) 矩形:REC 用法1:输入命令REC/回车/鼠标指定第一角点/指定第二角点 用法2:输入命令REC/回车/输入C(绘制带有倒角的矩形)/回车/输入第一倒角值/回车/输入第二倒角值/回车/鼠标指定第一角点/指定第二角点 用法3:输入命令REC/回车/输入F(绘制带有圆角的矩形)/回车/输入圆角半径/回车/指定第一角点/指定第二角点 圆弧:A 用法:输入命令A/回车/指定圆弧起点/指定圆弧中点/指定圆弧结束点 (绘制圆弧的方法有11种,可参考绘图菜单---圆弧选项) 圆:C 用法:输入命令C/回车/鼠标指定圆心/输入半径值/回车(命令结束) (绘制圆的方法有6种,可参考绘图菜单---圆选项) 样条曲线:SPL 用法:输入命令SPL/回车/鼠标指定要绘制的范围即可/需要三下回车结束命令 椭圆:EL

数通常用命令

交换机常用命令 命令解释 ystem-view 进入系统视图 interface interface-type interface-number进入接口视图 ip address ip-address { mask | mask-length }[ sub ] 配置接口的IP地址 display cur 显示网络配置 interface{ interface_type interface_num | interface_name } 进入以太网端口视图 duplex { auto | full | half }设置以太网端口的双工状态 undo duplex恢复以太网端口的双工状态为缺省值speed { 10 | 100 | 1000 | 10000 | auto }设置以太网端口的速率 undo speed恢复以太网端口的速率为缺省值 vlan vlan-id将表空间online interface Vlan-interface vlan-interface-id创建VLAN接口并进入VLAN接口视图ip address ip-address { mask | mask-length } [ sub ] 配置VLAN接口的IP地址: 方法1 在VLAN视图下输入port interface_list ,方法2 在接口视图下输入port access vlan vlan_id 在交换机中将端口加入指定VLAN命令: 防火墙、路由器常用命令 命令解释 display version显示系统版本信息 sysname设置防火墙的名称 Super使用户从当前级别切换到level级别system-view使用户从用户视图进入系统视图acl通过引用ACL控制列表authentication-mode设置登录用户界面的验证方式display firewall mode显示防火墙的当前工作模式

Linux网络协议分析工具tcpdump和tshark用法

Linux网络协议分析工具tcpdump和tshark用法Tcpdump是网络协议分析的基本工具。tshark是大名鼎鼎的开源网络协议分析工具wireshark(原名叫ethereal)的命令行版本,wireshark 可对多达千余种网络协议进行解码分析。Wireshark和tcpdump均使用libpcap库(参见libpcap编程教程)进行网络截包。TCPDUMP 详细manpage参见tcpdump网站。基本用法Tcpdump的参数基本分为两块:选项(options)和过滤器表达式(filter_expression)Tcpdump是网络协议分析的基本工具。tshark是大名鼎鼎的开源网络协议分析wireshark(原名叫ethereal)的命令行版本,wireshark可对多达千余种网络协议进行解码分析。Wireshark和tcpdump均使用libpcap库(参见libpcap编程教程)进行网络截包。 TCPDUMP 详细manpage参见tcpdump网站。 基本用法 Tcpdump的参数基本分为两块:选项(options)和过滤器表达式(filter_expression)。

# tcpdump [options] [filter_expression] 例如 # tcpdump -c 100 -i eth0 -w log tcpdst port 50000 其中options部分参数: -c 100 指定截取的包的数量 -i eth0 指定监听哪个网络端口 -w log 输出到名为log的文件中(libpcap格式) filter_expression参数为tcpdst port 50000,即只监听目标端口为50000的tcp包。 更多的例子: /* 监视目标地址为除内网地址(192.168.3.1-192.168.3.254)之外的流量*/ # tcpdumpdst net not 192.168.3.0/24 /*

使用dump文件分析系统蓝屏原因

使用dump文件分析系统蓝屏原因 出处:https://www.360docs.net/doc/e012834567.html,/746253/709702 目录 1 什么是dump文件 2 如何让系统在崩溃时记录dump文件 3 使用Debugging Tools for Windows (windebug)来分析dump文件 3.1 什么是windebug 3.2 windebug最新版安装方法(此方法为在线安装) 3.3 windebug的symbol符号文件的路径配置 3.4 dump文件的分析

1 什么是dump文件 当系统崩溃在蓝屏瞬间,系统会形成一个扩展名为dmp的存储器转储文件,默认存储位置为C:\WINDOWS\Minidmp。 2 如何让系统在崩溃时记录dump文件 A.右击“我的电脑”选择“属性”,在“系统属性”对话框中选择“高级” B.在“启动和故障恢复”中选择“设置”,具体设置如下图所示

3 使用Debugging Tools for Windows (windebug)来分析dump文件 3.1什么是windebug windebug是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 3.2 windebug最新版安装方法(此方法为在线安装) A.从https://www.360docs.net/doc/e012834567.html,/download/en/details.aspx?displaylang=en&id=8279下载 B.安装netFramework2.0 C.运行1中下载的winsdk_web.exe

Moshell常用命令

MOSHELL 常用命令1.登录基站 OSS升级后moshell工具登录命令略有改动 基本命令:amos(空格)爱立信基站编号 lt all 例如:amos WC1OA0111 lt all 2.查看用户数 基本命令:amos(空格)爱立信基站编号 lt all get radio 例如:amos WC1OA0111

lt all get radio 3.查看FE 基本命令:amos(空格)爱立信基站编号 lt all al 查看告警,是否有NTP告警 get . r0 查看默认路由IP acc ipacc ping y 输入IP 例如:amos WC1OA0646 lt all al 查看有NTP告警,有NTP告警FE一定不同get . r0 查看默认路由IP为172.20.242.33 acc ipacc ping 进行PING通测试 y 172.20.242.33 结果为alive表示通,no answer为不通.

有NTP告警 进行PING通测试 4.查看传输2M状态 用MOSHELL命令比较麻烦,最好用EM工具 基本命令:amos(空格)基站归属RNC lt all get Equipment=1,Subrack=框号,Slot=槽号,PlugInUnit=1,ExchangeTerminal=1,Os155SpiTtp=光口号,Vc4Ttp=1,Vc12Ttp=时隙查看传输侧是否配置数据 get Equipment=1,Subrack=框号,Slot=槽号,PlugInUnit=1,ExchangeTerminal=1,Os155SpiTtp=光口号,Vc4Ttp=1,Vc12Ttp=时

javadump分析教学内容

j a v a d u m p分析

Java 的线程 线程是指能独立于程序的其它部分运行的执行单元。 JAVA语言能够很好的实现多线程的程序。我们在调试程序,或者在开发后期需要做性能调优的时候,往往也需要了解当前程序正在运行的线程的状态,正在执行的操作,从而分析系统可能存在的问题。 在阅读本文之间,应对 Java线程的编程原理,同步机制有一定了解 . 产生 JAVA线程 dump JAVA 的线程 DUMP,就象当前 JAVA进程的一个快照,打印出所有线程的状态和调用堆栈,以及 Monitor的状态。在不同的操作系统下,产生线程 DUMP 的方式是不同的。 在启动程序的控制台里敲: Ctrl - Break,线程的 dump会产生在标准输出中(缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。在 unix, linux和 MacOS 环境中,在控制台中敲: Ctrl-\,或者, 用“kill -3 ” ,或者“kill –QUIT ”。 Pid是用所关注的 JAVA 进程号,您可以用“ps -ef | grep java” 找到,或者使用 JDK 5.0中的“jps -v” 命令获得。 在各个操作系统平台,都可以用 JDK 5.0工具包中的 jstack 这里要注意的是:

1. 不同的 JAVA虚机的线程 DUMP的创建方法和文件格式是不一样的,不同的 JVM版本, dump信息也有差别。本文中,只以 SUN的 hotspot JVM 5.0_06 为例。 2. 在实际运行中,往往一次 dump的信息,还不足以确认问题。建议产生三次 dump信息,如果每次 dump都指向同一个问题,我们才确定问题的典型性。线程分析: 1. JVM 线程 在线程中,有一些 JVM内部的后台线程,来执行譬如垃圾回收,或者低内存的检测等等任务,这些线程往往在 JVM初始化的时候就存在,如下所示: "Low Memory Detector" daemon prio=10 tid=0x081465f8 nid=0x7 runnable [0x00000000..0x00000000] "CompilerThread0" daemon prio=10 tid=0x08143c58 nid=0x6 waiting on condition [0x00000000..0xfb5fd798] "Signal Dispatcher" daemon prio=10 tid=0x08142f08 nid=0x5 waiting on condition [0x00000000..0x00000000] "Finalizer" daemon prio=10 tid=0x08137ca0 nid=0x4 in Object.wait() [0xfbeed000..0xfbeeddb8] at https://www.360docs.net/doc/e012834567.html,ng.Object.wait(Native Method) - waiting on <0xef600848> (a https://www.360docs.net/doc/e012834567.html,ng.ref.ReferenceQueue$Lock) at https://www.360docs.net/doc/e012834567.html,ng.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0xef600848> (a https://www.360docs.net/doc/e012834567.html,ng.ref.ReferenceQueue$Lock) at https://www.360docs.net/doc/e012834567.html,ng.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at https://www.360docs.net/doc/e012834567.html,ng.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

实验一 常用网络命令使用

信息科学与技术学院实验报告 课程名称: 计算机网络实验项目: 常用命令的使用技巧 实验地点: 博西109 指导教师: 马占飞日期: 2012-11-07 实验类型: 验证性试验(验证性实验综合性实验设计性实验) 专业: 计算机科学与技术班级: 10级学号: 1012410020 一、实验目的及要求 目的:掌握以下常用命令的使用技巧 1.IPConfig命令的使用技巧 2.Ping命令的使用技巧 3.Tracert的使用技巧 https://www.360docs.net/doc/e012834567.html,stat 命令的使用技巧 5.Route 命令的使用技巧 6.pathping的使用技巧 具体要求: 1、在实验报告中具体的操作步骤 2、截取各命令常用的参数主要界面; 二、实验仪器、设备或软件 计算机 window XP上的cmd运行指令 三、实验容及原理 1.Ipconfig显示所有当前的 TCP/IP 网络配置值、刷新动态主机配置协议 (DHCP) 和域名系统 (DNS) 设置。使用不带参数的 ipconfig 可以显示所有适配器的 IP 地址、子网掩码、默认网关。

语法 ipconfig [/all] [/renew [Adapter]] [/release [Adapter]] [/flushdns] [/displaydns] [/registerdns] [/showclassid Adapter] [/setclassid Adapter [ClassID]] 要显示所有适配器的基本 TCP/IP 配置,请键入: ipconfig 要显示所有适配器的完整 TCP/IP 配置,请键入: ipconfig /all 仅更新“本地连接”适配器的由 DHCP 分配 IP 地址的配置,请键入: ipconfig /renew "Local Area Connection" 要在排除 DNS 的名称解析故障期间清理 DNS 解析器缓存,请键入: ipconfig /flushdns 要显示名称以 Local 开头的所有适配器的 DHCP 类别 ID,请键入: ipconfig /showclassid Local* 要将“本地连接”适配器的 DHCP 类别 ID 设置为 TEST,请键入: ipconfig /setclassid "Local Area Connection" TEST 2.ping 是测试目的主机是否能够到达一种常用方法,它是通过回应请求和应答报文来检查和测试目的主机或路由器是否能够到达。图示如下; Ping命令的语法格式:

Java线程dump分析

Java线程dump分析 金蝶中间件有限公司 2013年3月14日

版本历史 (2) 目录 (3) 第1章JAVA线程DUMP (4) 1.1什么是J AVA线程D UMP (4) 1.2如何生成 (4) 第2章线程DUMP分析 (5) 2.1JVM线程 (5) 2.2线程状态分析 (5) 2.2.1Runnable (5) 2.2.2Waiting on condition (5) 2.2.3Waiting for monitor entry 和in Object.wait() (6) 2.3JDK5.0的LOCK (8) 第3章案例分析 (9) 3.1死锁 (9) 3.2热锁 (9)

1.1 什么是Java线程Dump 线程Dump是非常有用的诊断Java应用问题的工具,每一个Java虚拟机都有及时生成显示所有线程在某一点状态的线程Dump的能力。虽然各个Java虚拟机线程dump打印输出格式上略微有一些不同,但是线程dump出来的信息包含线程基本信息;线程的运行状态、标识和调用的堆栈;调用的堆栈包含完整的类名,所执行的方法,如果可能的话还有源代码的行数。 JVM(java虚拟机)中的许多问题都可以使用线程Dump文件来进行诊断,其中比较典型的包括线程阻塞,CPU 使用率过高,JVM Crash,堆内存不足,和类装载等问题。 1.2 如何生成 在不同的操作系统下,产生线程DUMP的方式是不同的: 1)在windows环境中 在启动程序的控制台里敲:Ctrl - Break,线程的dump会产生在标准输出中(缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。 2)在unix,linux和MacOS 环境中 在控制台中敲:Ctrl-\,或者,用“kill -3 ”,或者“kill –QUIT ”。Pid是用所关注的JA V A进程号,您可以用“ps -ef | grep java”找到,或者使用JDK 5.0中的“jps -v”命令获得。 3)在各个操作系统平台,都可以用JDK 5.0工具包中的jstack 这里要注意的是: 1.不同的JAVA虚机的线程DUMP的创建方法和文件格式是不一样的,不同的JVM版本,dump信息 也有差别。本文中,只以SUN的hotspot JVM 5.0_06 为例。 在实际运行中,往往一次dump的信息,还不足以确认问题。建议产生三次dump信息,如果每次dump都指向同一个问题,我们才确定问题的典型性。

相关文档
最新文档