[Troubleshooting tool] AD+ 또는 ADPlus

AD+ Debugging tools for windows에서 제공하는 Tool로써, Application Crash Hang 현상이 발생할 때, 쉽게 Memory Dump를 수집해 주는 Tool이다. 이는 실제 debugger는 아니고, adplus.vbs 라는 script file로써

 

A.      Windows Script Host(WSH)를 이용하여 실제 debugger cdb.exe를 해당 Target에 쉽게 attach하고 Dump 를 수집할 수 있도록 도와주는 역할을 한다. 그러므로 WSH install은 필수다.

B.      AD+ Debugger attach 된 이후에 유용한 debugging 정보를 LOG file로써 남기며, 만일, 적절한 Symbol 이 존재한다면 유용한 정보로써 Log에 남겨진다,

C.      Symbol Server Symbol path를 설정할 수 있도록 도와주며,

D.     Dr, Watson 과는 다르게 1st chance exception에 대한 처리가 가능하도록 구성할 수 있다.

E.      AD+, Debugging tools for windows도 마찮가지지만 XCOPY deployment가 가능하며, 또한

F.      반드시 Symbol이 있어야만 Dump를 수집할 수 있는 것은 아니다. 수집된 Dump를 분석할 때, 정확한 Debugging을 위해 Symbol을 맞춰서 분석하지만, 수집할 당시에는 Symbol이 존재하지 않더라도 Dump수집은 가능하다.

G.      기본적으로는 Debugging tools for windows install Directory New directory를 생성하고, Dump LOG file을 떨어뜨리며, File Name Unique 하게 자동 설정되어 저장된다.

H.     그리고, 동시에 여러 Processes Dump 수집이나,

I.       remote user에게 Notify 하는 것 등이 가능하다.

 

AD+는 다음의 경우에 유용하다.

 

1)     먼저, Process Deadlock 과 같은 Hang 상태 나,

2)     CPU 100% Processes,

3)     그리고, 예기치 않게 종료되는 Processes 를 위해서 Memory Dump를 수집할 수 있다.

 

하지만, 다음과 같은 경우는 사용하지 않는다.

 

1)     Startup시 예기치 않게 Process가 종료되는 경우나,

Note: 이 경우에는 Userdump.exe (http://www.microsoft.com/downloads/details.aspx?FamilyID=E089CA41-6A87-40C8-BF69-28AC08570B7E&displaylang=en)를 이용한다. 또는 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" key를 이용하여 CDB.exe Windbg.exe를 직접 Attach 하는 방법을 사용할 수 있다. (http://byung.egloos.com/3572751)그리고, AD+ -sc option을 사용해서 process spawn 시켜 attach 할 수도 있다.

2)     debug output EH(C++ Exception)이 대량으로 발생하는 경우, Performance의 이유로 권고하지 않는 다.

 

**

Full Dump ? Process에 대한 entire memory image를 포함하고 있다. 거의 Process가 사용하는 Memory size가 비슷하다. 그에 비해서 mini dump DLL EXE가 참조하고 있는 reference stacks 그리고 variables에 대한 정보만을 포함하기 때문에 size가 아주 작다.

 

** Options
일반적으로 command prompt 에서 다음과 같이 실행한다.

     cscript adplus -hang -pn myapp.exe -quiet

AD+를 실행할 때 가능한 Options는 다음과 같다.

 

-hang

특정 시점의 특정 process에 대한 Full memory dump를 수집한다. Terminal session에서도 가능하며, process terminated 하지 않는다.

-crash

invalid handle/Illegal Instruction/Integer Divide by zero/Floating Point Divide by zero/integer overflow/Access Violation/Stack overflow/C++ EH Exeption/Unknown Exception 등의 Exceptions에 대해서 Dump를 수집할 수 있다. 이는 Hang option과 같이 사용할 수 없으며, Terminal Session에서 사용할 수 없다. 수집 시점에 Crash에 대한 정보를 Event log에 남기며, detach 시점에 Process terminated된다.

-p <PID>

Task manager tlist.exe로 확인된 process id를 가지고 Target process를 설정한다. 하나 이상의 -p options을 사용하여 동시에 여러 proceses에 대한 Dump 수집이 가능하다.

-pn <Process Name>

Process Name을 가지고 target process를 설정한다. -p options과 다중의 -pn options을 사용하여 동시에 여러 processes에 대한 Dump 수집이 가능하다.

-iis

inetinfo IIS worker process dllhost.exe에 이르기 까지 monitoring 이 가능하다. 외에 추가적으로 -pn 이나 -p option을 추가할 수도 있다.

-quiet

모든 modal dialog popup suppress 한다.

-o <output directory>

dump를 떨어뜨리는 output folder를 지정할 수 있다.

-c <configfile.txt>

configuration file을 통해서 AD+를 설정할 수 있다.

Note: Examples

 

첫 번째. Pageheap enabled 그리고, Crash Dump

 

<ADPlus>

 

<Settings>

<RunMode> CRASH </RunMode>

</Settings>

 

<PostCommands>

<Cmd> !gflag + htc </cmd>

<Cmd> !gflag + hfc </cmd>

<Cmd> !gflag + hpc </cmd>

<Cmd> !gflag + hvc </cmd>

<Cmd> !gflag + hpa </cmd>

</PostCommands>

 

<Exceptions>

<!--  Configuring the AV exception -->

<Config>

<Code> av </Code>

<Actions1> Log;Stack;FullDump;EventLog </Actions1>

<ReturnAction1> GN </ReturnAction1>

</Config>

 

<!--  Configuring the Debug Break (CTL+C) exception -->

<Config>

<Code> bpe </Code>

<Actions1> Log;Stack;FullDump;EventLog </Actions1>

<ReturnAction1> GN </ReturnAction1>

</Config>

</Exceptions>

 

</ADPlus>

 

두 번째. 일반적인 VB Runtime Error 의 경우

 

<ADPlus>

 

<Settings>

<RunMode> CRASH </RunMode>

</Settings>

 

<Exceptions>

<NewException>

<Code> c000008f </Code>

<Name> VBError </Name>

</NewException>

 

<Config>

<Code> c000008f </Code>

<Actions1> Log;Stack;FullDump;EventLog </Actions1>

</Config>

</Exceptions>

</ADPlus>

 

 

3번째. mdToken0x02000092인 특별한 CLR Exception에 대해서 Full Dump를 수집

 

<ADPlus>

 

<Settings>

<Sympath>srv*c:\symbols*http://msdl.microsoft.com/download/symbols</Sympath>

</Settings>

 

 

<Exceptions>

 

<!--  Configuring the AV exception -->

<Config>

<Code> av </Code>

<Actions1> Log;Stack </Actions1>

<ReturnAction1> gn </ReturnAction1>

</Config>

 

<!-- This is for the CLR exception -->

<Config>

<Code> clr </Code>

<Actions1> Log </Actions1>

<ReturnAction1> gn  </ReturnAction1>

</Config>

 

</Exceptions>

 

 

<Breakpoints>

<NewBP>

<Address> mscorwks!RaiseTheException </Address>

<CustomActions> j (poi(poi(poi(poi(esp+4))+8)+48) = 02000092)'.echo !!!!!!!!!!!!;du poi((poi(esp+4)+10))+c;.dump /ma /u OOM.dmp;kb;g'  '.echo !!!!!!!!!!!!;du poi((poi(esp+4)+10))+c;.echo !!!!!!!!!!;kb;g '</CustomActions>

<ReturnAction> </ReturnAction>

</NewBP> 

</Breakpoints>

 

 

</ADPlus>

 

-y <symbol file path>

Symbol server Symbol File path를 지정할 수 있으며, ';'를 이용하여 각 path를 구분할 수 있다. (예를 들어, c:\path1;c:\path2 )

-notify <target>

NET SEND 를 이용하여 특정 Usercomputer를 지정하여 notify 할 수 있다.

-MiniOnSecond

기본적으로 2nd Chance Exception Full Dump지만, Mini로 변경할 수 있다.

-FullOnFirst

기본적으로 1st Chance Exception Mini Dump지만, Full Dump로 변경할 수 있다.

-NoDumpOnFirst

동일한 1st Chance Exception이 많이 발생할 때, dump File overwrite 하도록 설정한다. 예를 들어, C++ EH Exceptions의 경우 유용할 수 있다.

-NoDumpOnSecond

2nd Chance Exceptions Disable 한다.

-CTCF

CTRL+C 를 눌렀을 때 Full Dump를 생성하도록 하고, exit 된다.

Note: 100% CPU로 인하여 Command 입력이 어려워 Hang Dump 수집이 불가능하다면, 미리 Crash Mode -CTCF option을 가지고 수행하도록 하고, CPU 100시점에 CTRL+C를 눌러서 Dump를 수집할 수 있도록 할 수 있다.

-CTCFG

CTRL+C를 눌렀을 때 Full Dump를 생성하도록 하고, App는 계속 실행된다.

by 강세윤 | 2008/11/18 14:31 | Windows debugging | 트랙백 | 덧글(0)
트랙백 주소 : http://byung.egloos.com/tb/4737464
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >