2013년 11월 23일 토요일

Appler 디버깅하기 ___ 7

이미 수정까지 완료한 사항이지만, 지난 번과는 달리 이번에는 DOSBox를 수정해서 문제를 해결해 보았습니다.

지난 번에 수정을 했던 Ubuntu system의 HDD가 고장이 나서, 다른 HDD에 새로 시스템을 꾸미다 보니 결국은 같은 문제에 봉착하게 되었습니다.
그래서 이번에는 다른 방식으로 문제를 해결해 보고자 하는 생각에...


우선은 문제가 되는 그 화면
문제가 되는 화면, Path가 이상하고 Directory도 이상합니다.

이 문제는 DOS Interrupt 21h, AH=60h일 때의 오작동으로 인한 문제였음은 이미 앞선 포스팅에서 밝힌 바 입니다.

해당 부분을 처리하는 루틴은 dos.cpp의 DOS_21Handler()에 있습니다.
DOS_21Handler()

AH=60h (Canonicalize)가 해당하는 루틴입니다.

디버거를 이용해 trace를 해 본 결과 DOS_canonicalize()라는 함수를 수정하면 될 것으로 보였습니다.

DOS_files.cpp의 DOS_Canonicalize()


마지막에 Backslash만 붙여주면 되는 문제였기에, 문자열의 마지막에 Backslash가 있는지 없는지 검사해서 없을 때에만 붙여 주면 된다 생각했습니다.

그러나 이 루틴에 입력되는 문자열이 디렉토가 아닌 파일인 경우도 있기에, 무조건 Backslash를 넣어 주어서는 안됩니다.

몇번의 디버깅과 고민 끝에 입력 문자열의 마지막에 Backslash가 있다면 디렉토리이므로 이 경우에만 마지막에 Backslash를 검사하고 붙여주도록 수정하였습니다.

다음이 수정한 결과입니다.

위와 같이 수정하였습니다.

수정하고 빌드하여 확인한 결과 화면입니다.

이젠 정상 작동합니다.

2013년 11월 22일 금요일

vim/gvim에 대한 몇가지 의문

vim은 애초의 vi를 개량한 버전으로 알고 있습니다.
현재 널리 사용되는 vim의 홈페이지는 http://www.vim.org 입니다.

현재 Ubuntu 10.04 환경에서 사용하던 중에 이상한 부분을 발견하였습니다.
vim과 gvim이 하나의 실행파일이라는 점이고, 그럼에도 불구하고 ps에 보이는 결과는 또 다르다는 것이었습니다.

일단은 설치된 vim/gvim의 실행 파일이 하나라는 점은 다음에서 확인이 됩니다.
vim/gvim은 모두 /usr/bin/vim.gnome에 연결되어 있습니다.

gvim을 실행 한 후, "ps -aux"를 실행한 결과 화면
gvim을 실행한 결과, vim.gnome이 아닌 gvim으로 표시된다.


vim을 실행 한 후, "ps -aux"를 실행한 결과 화면
vim을 실행한 결과, vim.gnome이 아닌 vim으로 표시된다.

실행 파일 하나로 콘솔버전과 GUI버전을 통합한 것은 충분히 이해가 가능하지만, process 이름을 다르게 보이게 하는 신기합니다.