2011-03-06 2 views
8

운영 체제는 일반적으로 어떻게 디버깅됩니까? 간단한 콘솔 프로그램과 같은 디버거를 사용하여 단계를 밟을 수는 없으며 빌드 시간이 너무 길어 반복적으로 작은 변경을 수행하고 전체를 다시 컴파일 할 수 있습니다.운영 체제는 어떻게 디버깅됩니까?

답변

6

이들은 멀티 기가 바이트 프로그램으로 디버깅되지 않습니다! :)

개별 사용자 모드 구성 요소를 의미하는 경우 일반 프로그램 및 라이브러리와 마찬가지로 디버그 할 수 있습니다 (은 일반 프로그램/라이브러리 인이기 때문에!).

커널 모드 구성 요소의 경우 각 OS마다 고유 한 메커니즘이 있습니다. here은 Windows에서 커널 디버깅을 수행하는 방법에 대한 정보입니다. 직렬 포트 등을 통해 디버깅중인 컴퓨터에 연결된 다른 컴퓨터의 도움을 받아 수행 할 수 있습니다. 나는 프로세스 자체에 익숙하지 않지만, 그것이 어떻게 작동하는지에 대한 요지입니다. (시스템이 디버거가 가능한 한 빨리 연결될 수 있도록 일부 부트 로더 옵션을 설정해야합니다.)

5

운영 체제의 어느 부분에 대해서 이야기하고 있는지에 따라 다릅니다. MSFT에서 일하면서 IE 팀에서 일했습니다. 우리는 IE와 셸 (Windows 탐색기)을 Visual Studio에서 디버깅하고 하루 종일 라인을 통해 밟았습니다. 때때로 NTSD와 같은 command line tool을 사용하여 디버그하는 것이 더 쉽습니다.

그러나 OS 커널이나 디바이스 드라이버와 같은 커널 영역의 디버깅을 원할 경우 커널 디버거를 사용해야합니다. kd라는 명령 행 도구 인 Windows의 경우 일반적으로 한 시스템에서 디버거를 실행하고 대상을 원격으로 디버그합니다.

1

콘솔에서 깜박이는 표시 등에서 ICE와 같은 하드웨어 장치 사용, 상당히 표준적인 디버거를 사용하는 최신 기술에 이르기까지 전체 기술 집합이 있습니다. OS 개발자와 응용 프로그램 개발자간에 공통적으로 사용되는 기술 중 하나는 코어 덤프 분석입니다. solaris의 mdb와 같은 것을보고 Solaris 커널 개발자가 디버깅을 수행하는 방법에 대한 아이디어를 얻으십시오. 또한 추적 기술이 사용됩니다. dtrace와 같은보다 현대적인 기술에 이르기까지 어느 곳에서나 쉽게 로깅 패키지를 생성 할 수 있습니다.

사용되는 기술은 소프트웨어 계층에 따라 달라집니다. 초기 부팅은 손가락을 넣기가 꽤 어려운 곳입니다. 그러나 그 후에 현대 운영 시스템의 환경은 점점 더 당신이 사용하고있는 응용 프로그램 설정과 유사 해 보입니다. 결국, 모든 코드입니다 :)

관련 문제