애플리케이션 시작하자마자 예외발생에 대한 Full 메모리 덤프 수집 방법 Windows debugging

애플리케이션이 시작하자마자 예외가 발생하는 문제에 대한 디버깅을 위해 여러가지 방법이 있을 수도 있겠지만, 직접 라이브 디버깅을 할 것은 아니고 누군가에게 요청하여 메모리 덤프를 이용하여 사후 분석을 할 것이라면 AD+를 이용하여 다음과 같이 수집 요청을 하는 것이 좋을 듯 하다.

일단, Command는 아래와 같다.

adplus -c AV_FULL.cfg -o c:\dumps -sc "C:\Program Files\Test\Test.exe"

여기서 –c 옵션은 Config 파일을 읽어 들이는 옵션인데, Config 파일에는 Access Violation Exception 에 대한 1st, 2nd chance Full 메모리 덤프를 수집하도록 할 것이며, -sc 옵션은 spawning 옵션인데, 해당 process spawning 하여 디버거를 붙이도록 하는 옵션이다. 그러므로, Command를 수행하면 수행하자마자 Test.exe가 실행되면서 디버거인 cdb.exe가 attach 되어 수행되는 것을 볼 수 있을 것이다. 그리고 cdb.exe는 av발생에 대한 Full 메모리 덤프를 떨어뜨린다.

이제 필요한 것은 AV_FULL.cfg의 구성인데, 이는 아래와 같이 구성한다. 아마도 예전의 AD+를 가지고 있는 경우는 아래와 같이 구성했는 데, 최근의 AD+의 경우는 문제가 발생할 수 있다.

<ADPlus>

 

  <Settings>

      <RunMode> CRASH </RunMode>

  </Settings>

 

  <Exceptions>

     <Config>

       <Code> av </Code>

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

       <ReturnAction1> GN </ReturnAction1>

     </Config>

  </Exceptions>

</ADPlus>

 

최근의 AD+를 위해서는 아래와 같이 구성하면 된다. (AD+의 저장 위치 지정에 해당하는 -o 옵션을 반드시 사용해야만 하는 것도 최근의 일이다. )

 

<ADPlus Version='2'>

  <Settings>

      <RunMode> CRASH </RunMode>

  </Settings>

 

  <Exceptions>

     <Exception Code="av">      

        <Actions1>FullDump</Actions1>   

        <ReturnAction1>gn</ReturnAction1>  

     </Exception>

  </Exceptions>

</ADPlus>

 

하나 추가로 해당 code 부분은 Exception Code를 집어 넣으면 된다. 그러므로, av대신 c0000005 를 집어 넣어도 마찮가지 결과를 얻을 수 있다.


덧글

댓글 입력 영역