레이블이 중첩 디버깅인 게시물을 표시합니다. 모든 게시물 표시
레이블이 중첩 디버깅인 게시물을 표시합니다. 모든 게시물 표시

2013년 6월 4일 화요일

에뮬레이터와 어플리케이션의 연계 디버깅?

앞선 포스팅에 이어서 DOSBox와 관련된 문제가 있었습니다.

DOSBox에서 vim을 사용하면서 나온 문제였는데, 특이하게 Linux환경에서만 발생하는 듯 합니다. (MS-Windows에서는 문제가 없음을 확인했으며, 문제의 발생을 확인한 환경은 Ubuntu 10.04였습니다.)

우선 스크린샷으로 문제를 확인해 보겠습니다.

vim으로 test.txt라는 파일을 새로 만듭니다.

파일을 저장하면 정상적으로 저장됩니다

해당 파일인 TEST.TXT가 만들어진 것을 확인할 수 있는데, read-only입니다.

같은 파일을 수정해서 다시 저장해보겠습니다.

저장이 안됩니다!!

DOSBox에서 생성된 파일은 read-only로 생성이 되고, 그래서 수정이 안된다?
그러면 당연히 DOSBox의 문제라고 생각할 수 있으나 vim이 아닌 다른 에디터에서 수정한 후 저장하면 저장이 됩니다.
단지 vim만 저장을 못합니다.

그럼 vim의 문제일까요?
MS-Windows 환경의 DOSBox에서는 문제가 없습니다.
Linux환경이라 해도 VirtualBox에 MS-DOS를 설치해 vim을 사용하면 문제가 없습니다.

아마 vim도 다른 에디터와는 뭔가 다른 방법으로 파일을 저장하고 있으며,
DOSBox도 Linux 환경에서는 파일 I/O에 관해 일부 기능에 버그가 있는 것이 아닌가 싶습니다.



여기에서 발생하는 재미있는 문제가 하나 있습니다.
vim에서 문제가 발생하는 부분을 디버거로 트레이스 할 수 있겠지요.
하지만 두개의 제품이 연계하면서 발생하는 문제를 하나만 디버깅해서는 제대로 잡을 수 없을 겁니다.
따라서 vim에서 문제가 발생하는 부분이 다시 DOSBox로 어떻게 이어지는지,
혹은 반대로 DOSBox에서 발생한 문제가 어떻게 vim으로 이어지는지를 확인해야 할 겁니다.

이런 연계 문제를 디버깅하려면 어떻게 해야 할까요?
Linux에서 gdb로 DOSBox를 디버깅하면서 DOSBox에서는 터보디버거로 vim을 디버깅하나요?
gdb와 터보디버거가 연동할 수 없는 환경이니 의미가 없을겁니다.

만약에 DOSBox에 내장디버거가 있어서 vim을 자체 디버거로 디버깅할 수 있다면 어떨까요?
그 상황에서도 gdb가 디버깅하는 DOSBox는 정상적인 루틴이 아닌 내장디버거에 의해 각종 trap이 설치된 변형된 루틴일 수도 있어 오히려 디버깅이 어려울 수도 있을겁니다.

이상적으로는 DOSBox를 디버깅하는 디버거가, DOSBox라는 에뮬레이터와 그 안에서 돌아가는 vim이라는 application이 존재하는, 일종의 nested? embedded?임을 인식해야만 할 겁니다.

현실적으로는 디버거가 환경을 인식한다 하더라도 효율적인 디버깅 방법도 고민스러우며, 얼마나 다양하게 쓰일 수 있는냐도 의심스러운 부분입니다.
따라서 통상적으로 분산 시스템의 연계 문제를 디버깅할 경우에 synchronization을 방해하지 않고 디버깅하는 방법은.......
메시지를 기록해서 이를 분석하는 방법입니다.

쉽지는 않겠지만 한번 디버깅을 해 보겠습니다.