성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>시작하자마자 비정상 종료하는 프로세스의 메모리 덤프 - procdump</h1> <p> 예전 글에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > windbg - 분석 예: 시작하자마자 비정상 종료하는 프로세스 - NullReferenceException ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/996'>http://www.sysnet.pe.kr/2/0/996</a> 풀 덤프 파일을 남기는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/991'>http://www.sysnet.pe.kr/2/0/991</a> </pre> <br /> <a target='tab' href='https://learn.microsoft.com/en-us/sysinternals/downloads/procdump'>procdump</a>를 소개하면서 시작하자마자 비정상 종료하는 경우 "procdump -ma -t -w test.exe"라는 식의 방법을 소개해 드렸는데 더 쉬운 방법이 있습니다. 그냥 procdump에 -i 옵션을 주면 되는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\System32> <span style='color: blue; font-weight: bold'>procdump -i</span> ProcDump v9.0 - Sysinternals process dump utility Copyright (C) 2009-2017 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com Set to: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug (REG_SZ) Auto = 1 (REG_SZ) Debugger = <span style='color: blue; font-weight: bold'>"c:\tools\procdump.exe"</span> -accepteula -j "C:\Windows\System32" %ld %ld %p Set to: HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug (REG_SZ) Auto = 1 (REG_SZ) Debugger = <span style='color: blue; font-weight: bold'>"c:\tools\procdump.exe"</span> -accepteula -j "C:\Windows\System32" %ld %ld %p </pre> <br /> 단지, 기본 폴더가 "C:\Windows\System32"라는 것이 경우에 따라 문제가 됩니다. 왜냐하면 관리자 권한의 프로세스 실행이 아니라면 저 폴더에 접근이 안 되므로 덤프 뜨는 동작에서 다음과 같이 예외가 발생하기 때문입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Error creating dump file: Access is denied. (0x80070005, -2147024891) C:\Windows\System32\ConsoleApplication1.exe_191114_101239* [10:12:39] Dump 1 initiated: C:\Windows\System32\ConsoleApplication1.exe_191114_101239* [10:12:39] Dump 1 error: Error writing dump file: 0x80070006 The handle is invalid. (0x80070006, -2147024890) </pre> <br /> 그래서 기본적으로는 -i 옵션 사용 시 덤프 남길 폴더 경로(와 full dump를 위한 -ma 옵션)를 습관적으로 함께 지정하는 것이 좋습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > procdump -i c:\temp -ma </pre> <br /> 이제 남은 작업은, 비정상 종료하는 프로그램을 실행시키는 것으로 끝!<br /> <br /> <hr style='width: 50%' /><br /> <br /> 마지막으로 다시 해제하는 방법은 "-u" 옵션으로 실행합니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Windows\System32> <span style='color: blue; font-weight: bold'>procdump -u</span> ProcDump v9.0 - Sysinternals process dump utility Copyright (C) 2009-2017 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com Reset to: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug (REG_SZ) Auto = <deleted> (REG_SZ) Debugger = <span style='color: blue; font-weight: bold'>"C:\WINDOWS\system32\vsjitdebugger.exe"</span> -p %ld -e %ld Reset to: HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug (REG_SZ) Auto = <deleted> (REG_SZ) Debugger = <span style='color: blue; font-weight: bold'>"C:\WINDOWS\system32\vsjitdebugger.exe"</span> -p %ld -e %ld ProcDump is no longer the Just-in-time (AeDebug) debugger. </pre> <br /> 참고로, procdump가 복원하는 vsjitdebugger.exe는 비주얼 스튜디오가 설치된 컴퓨터에서 설정된 값이고 기본적으로는 비어 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> sysinternals 관련 도구를 실행할 때 이런 오류가 발생한다면?<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> procdump.exe - Bad Image<br /> <br /> C:\SysInternals\pdh.dll is either not designed to run on Windows or it contains an error. Try installing the program again using the original installation media or contact your system administrator or the software vendor for support. Error status 0xc000012f. <br /> </div><br /> <br /> 원인은, pdh.dll 파일이 너무 예전 것이기 때문입니다. 기본적으로 최신 pdh.dll 파일이 윈도우에 포함되어 있기 때문에 해당 폴더(C:\SysInternals)에 있는 pdh.dll을 지워도 무방합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3334
(왼쪽의 숫자를 입력해야 합니다.)