2009년 10월 29일 목요일

Appeon PowerBuilber datawindow.ShareData 버그

개발자 환경 즉 2Tire에서는 dw_1.ShareData('dw_2') 사용시

dw_2의 컬럼의 값을 변경 할경우에

정상적으로 동작한다.

 

하지만 deploy를 해서 웹배포 3Tire로 만들 경우에는

dw_2의 변경한 테이터의 값의 잔상이 남게 되어서 문제가 발생 하게 된다.

 

이유는 버그로 보이긴 하나

대처 방법은  공유데이터를 제거후에 해당 dw를 리셋시킨다.

dw_1.ShareDataOff()

dw_2.reset()

그리고 변경해야할 행으로 다시 이동 명령어를 지정해준다.

2009년 10월 3일 토요일

응용프로그램의 덤프파일 분석 (WinDbg, Dr. Watson)

다음 내용은 "응용프로그램이 비정상 종료 되었을 때,Dr. Watson에 의해서 생성된 덤프파일을 WinDbg를 사용하여 분석하는 방법"

대해서 설명하고 있습니다.


[단계 1] Dr. Watson 설정


?? 먼저, 응용프로그램의 비정상종료 되었을 때, Dr. Watson에 의해서 덤프파일이 생성될 수 있도록,

?? 다음과 같이 Dr. Watson을 시스템의 기본 디버거로 설정을 합니다.

??

?? 참고로, 위와 같이 설정은 다음 레지스트리에 기록이 됩니다.

?? [32비트 윈도우] \\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug?

?? [64비트 윈도우] \\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug


[단계 2] Dr. Watson 설정확인


? 다음과 같이 Dr. Watson을 실행합니다.

?

? 그리고, 실행되어진 Dr. Watson 윈도우 응용프로그램에서 "크래쉬 덤프" 경로와

? "크레쉬 덤프 유형" 값을 적절히 설정합니다.

?

? (※ 참고로, "크레쉬 덤프 경로"는 응용프로그램이 비정상 종료될 때마다, 덤프파일이 생성되어지는 곳입니다. )


[단계 3] 테스트 용 소스 코드 작성


?? 설명의 편의상 다음과 같이, 비정상 종료되어지는 샘플 응용프로그램을 작성합니다.

#include <windows.h>
#include <stdio.h>

void BadPtrFunc(char *ptr)
{
*ptr = *ptr / 0; /* Null pointer exception + divide by zero */
}

int main(int argc, char **argv)
{
char *ptr = NULL;
BadPtrFunc(ptr);
return 0;
}

[단계 4] Visual studio 설정

?? 컴파일 되어지는 응용프로그램에 디버깅 정보가 포함되어질 수 있도록, 다음과 같이 프로젝트 설정을 수정합니다.

??

??


[단계 5] WinDbg 설치

?? 다음 웹사이트 경로를 참조하여, WinDbg를 설치합니다.

?? http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

??

?? (※ 참고로, WinDbg는 무료 프로그램입니다.)


[단계 6] 비정상 종료되는 응용프로그램 실행

[단계 3]을 통해서 만들어진 응용프로그램을 실행한 후, 덤프파일이 생성되어 있는지 확인합니다.



[단계 7] 덤프 파일 분석

덤프파일을 분석하기 위해서 WinDbg를 실행 한 후, 다음과 같이 덤프파일, 심볼 경로, 소스 경로를 설정합니다.

> 덤프파일 설정? [File] -> [Open Crash Dump???? Ctrl + D] 메뉴를 통해서 덤프파일을 설정합니다.

> 심볼경로 설정? [File] -> [Symbol File Path ? ???? Ctrl + S] 메뉴를 통해서 심볼경로를 설정합니다.

?? 참고로, 심볼경로는 Visual Studio를 사용하여 컴파일 할 때, 생성 되어지는 pdb 파일의 경로를 설정합니다.

?? 그리고, 다음과 같이 "Symbol Store Path"를 설정합니다. (시스템에 "c:\websymbol"이라는 폴더가 존재한다고 가정함.)



> 소스파일 설정? [File] -> [Source File Path ???? ? Ctrl + P] 메뉴를 통해서 소스경로을 설정합니다.


위와 같이 설정이 완료되었으면, 다음과 같이 "!analyze -v" 명령어를 통해서 덤프파일을 분석합니다.

명령어를 입력한 후, 약 2~3초 정도 기다리면 "FAULTING_SOURCE_CODE" 정보를 WinDbg 커맨드 윈도우를 통해서

확인이 가능하며, 이 정보를 바탕으로 어느 부분이 잘못되었는지 확인 할 수 있습니다.

이 외에도 WinDbg 커맨드창에서는, "kn", ".frame", "dv", "dt"와 같은 유용한 디버깅 명령어들을 사용할 수 있습니다. (다음 그림 참고)


이 때, 특정 명령어의 쓰임새를 알고 싶을 경우에는 다음과 같은 명령어를 WinDbg의 커맨드 창에 입력하면 됩니다.

.hh <command>


예를 들어, 모든 지역 변수를 프린트 하는 dv 라는 명령어를 알고 싶으면

.hh dv 라고 입력하면, 다음과 같은 도움말이 화면에 표시 됩니다.