分享
 
 
 

使用AD+处理崩溃和挂起(2)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

更多细节

没有安装调试符号的情况

在没有安装调试符号的情况下,我们运行ADPlus.vbs,看看有什么结果。

运行下列命令,它将导致对Inetinfo.exe和其他Out-Of-Process (OOP)应用程序的Full-Memory Dumps:

cscript.exe adplus.vbs -hang -iis

CScript将会输出:

Microsoft (R) Windows Script Host Version 5.6

Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

以及一个对话框提示你安装调试符号:

对话框上建议您安装好调试符号后,新建一个环境变量“_NT_SYMBOL_PATH”保存调试符号的安装路径。

然后,让我们继续:

The '-hang' switch was used, Autdoump is running in 'hang' mode.

Dumping process info for IIS 5.x and all COM+ server applications

except for the System application.

----------------------------------------------------------------------

Dumping process: IIS (INETINFO.EXE)

(Process ID: 1140)

最后有一个对话框报告日志存放地点:

这时候,默认在Debugging Tools For Windows安装路径下新建了一个目录,它的名字类似于这样“Normal_Hang_Mode__Date_10-28-2002__Time_21-25-1919”。下面是Dump的内容:

MemoryDump文件

PID-792__INETINFO.EXE__full_2002-10-28_21-25-25-750_0318.dmp,

和相应的说明PID-792__INETINFO.EXE__Date_10-28-2002__Time_21-25-1919.log。

说明文件中会依次给出以下信息:

µ Autodump+启动的时间

µ 操作系统信息

µ 运行计算机名

µ 堆栈信息

µ 句柄信息

µ 线程堆栈遍历信息

µ 加载的模块信息

µ DLL信息

µ 关键段信息

µ 线程CPU使用情况信息

这是肉眼看得懂的。至于高达十几MB的DMP文件,只有让WinDBG来解释了。

启动Windbg,按Ctrl+D,将出现选择“Open crash Dump”文件对话框,选中上面的PID-792__INETINFO.EXE__full_2002-10-28_21-25-25-750_0318.dmp。当出现对话框询问是否保存Workspace Information时,选择Yes。之后Windbg将会出现两个窗口“Disassembly”和“Command”。这里我们不需要“Disassembly”窗口,关掉它。

“Command”窗口将会告诉你,当Dump进行时,Active Thread在做什么。

由于我们没有安装调试符号,所以只能遗憾地看到:

Symbol search path is: *** Invalid *** : Verify _NT_SYMBOL_PATH setting

Executable search path is:

..................................................................

Wake debugger - code 80000007 (!!! second chance !!!)

eax=00000001 ebx=00000000 ecx=0027aa80 edx=00000000 esi=00000000 edi=00000068

eip=77f8fb68 esp=0006f8a0 ebp=0006f910 iopl=0 nv up ei pl zr na po nc

cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246

*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -

ntdll!NtReadFile+b:

77f8fb68 c22400 ret 0x24

*** ERROR: Symbol file could not be found. Defaulted to export symbols for ADVAPI32.dll

这时,输入命令“kb”,这是召唤线程堆栈信息的符咒。你可以查看Windbg帮助,那里写得很明白:KB(Display Stack Backtrace),B就是显示传入每一个函数的前三个参数。输出如下所示:

0:000> kb

ChildEBP RetAddr Args to Child

WARNING: Stack unwind information not available. Following frames may be wrong.

0006f910 77da86d3 00000068 0006f9d8 00000216 ntdll!NtReadFile+0xb

0006f93c 77da9431 00000068 0006f9d8 00000216 ADVAPI32!SetSecurityDescriptorSacl+0x4c

0006f9b8 77d929f7 00000068 0006f9d8 00000216 ADVAPI32!StartServiceCtrlDispatcherW+0x34d

0006fbf4 01002884 00279390 010040c8 00000000 ADVAPI32!StartServiceCtrlDispatcherA+0x72

0006fd30 01001e94 002d7f98 00000024 0006ffc0 inetinfo+0x2884

77dfdbee 2474ff50 2474ff0c fb93e80c 55c3ffff inetinfo+0x1e94

0c24448d 00000000 00000000 00000000 00000000 0x2474ff50

上面的输出可以大致分为三列内容:

ChildEBP (列1)

RetAddr (列2)

Args to Child (列3~ 5)

其他可以尽情练习的命令有:

Ø ~*kb: ~*代表对于所有的线程应用后面的kb动作

Ø !locks : show all critical sections (这样你就可以看到挂起时哪一个线程在等待了)

Ø lm -- List Modules loaded in the Process dump

Ø dc -- Dump address

这几个命令都是重点推荐的,不可不试!

安装调试符号的情况

以上介绍的是没有安装调试符号的情况,我们来看一看安装了之后有什么不同。

首先,安装调试符号。

其次,最好新建一个环境变量:

重新打开Windbg。

这次Windbg加载了Dmp文件之后,就会报告找到了调试符号:

Symbol search path is: D:\NTSymbols

Executable search path is:

............................................

Wake debugger - code 80000007 (!!! second chance !!!)

eax=00000004 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=0000006c

eip=77f82861 esp=0006f8a0 ebp=0006f910 iopl=0 nv up ei pl zr na po nc

cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246

*** WARNING: symbols timestamp is wrong 0x3af357eb 0x38175b30 for ntdll.dll

ntdll!_output+567:

77f82861 c22400 ret 0x24

*** WARNING: symbols timestamp is wrong 0x3c1aab1e 0x385134fe for ADVAPI32.dll

我们来比较一下“~*kb”命令在两种情况下的区别:

没有安装调试符号情况下:

4 id: 420.484 Suspend: 1 Teb 7ffda000 Unfrozen

*** ERROR: Symbol file could not be found. Defaulted to export symbols for RPCRT4.DLL -

ChildEBP RetAddr Args to Child

WARNING: Stack unwind information not available. Following frames may be wrong.

0119ff74 77d375ec 77d37a82 00280068 00270000 ntdll!ZwReplyWaitReceivePortEx+0xb

0119ffa8 77d379a0 0027b898 0119ffec 77e76523 RPCRT4!RpcBindingSetOption+0x6e9

0119ffb4 77e76523 0028f788 00270000 50000161 RPCRT4!RpcBindingSetOption+0xa9d

0119ffec 00000000 77d37988 0028f788 00000000 KERNEL32!TlsSetValue+0x115

安装了调试符号:

4 id: 420.484 Suspend: 1 Teb 7ffda000 Unfrozen

ChildEBP RetAddr Args to Child

0119ff74 77d375ec 77d37a82 00280068 00270000 ntdll!memmove+0x14

0119ffa8 77d379a0 0027b898 0119ffec 77e76523 RPCRT4!LOADABLE_TRANSPORT::LOADABLE_TRANSPORT+0x97

0119ffb4 77e76523 0028f788 00270000 50000161 RPCRT4!ReadSeed+0x11

0119ffec 00000000 77d37988 0028f788 00000000 KERNEL32!CreateThread+0x13

也就是说,微软警告你没有调试符号的情况下,可能会被一个错误的堆栈误导。很明显,两种情况下堆栈展开的也不一样。所以我们强烈建议您安装调试符号。

处理崩溃的触发模式

能够自动处理Crash情况,也是AD+让人激赏的功能之一。你可以配置ADPlus,让它一直运行,当发生异常时,选择几种方式处理:用信使服务通知管理员,或者自动Dump memory。

它能监视的异常有:

Invalid Handle

Illegal Instruction

Integer Divide by Zero

Floating Point Divide by Zero

Integer Overflow

Invalid Lock Sequence

Access Violation

Stack Overflow

C++ EH Exception

Unknown Exception

这也是一个管理员早就希望拥有的功能了吧。

总结一下,大致的使用步骤是:

u 安装Windows2000的调试符号

u 安装Windows2000 SP1的调试符号

u 安装Windows2000 SP2的调试符号

u 新建环境变量“_NT_SYMBOL_PATH”

u 安装Microsoft Debugging Tools for Windows最新版本

u 当IIS Hang时,运行脚本cscript.exe adplus.vbs -hang -iis

u 用Windbg加载dmp文件,运用各种命令组合观察。

值得注意的是,AD+已经被扩展,而不仅仅限于拯救IIS和COM+,一般的应用和服务也完全支持。

Written by zhengyun@tomosoft.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有