안녕하세요,
리눅스 개발환경에만 익숙하여,
Visual Studio 환경이 그저 낯설기만한 개발자 윤진입니다.
간헐적으로 Visual Studio를 사용할 때마다 궁금했던 것이 있었습니다.
수시로 코드상태를 체크하기 위해 F5키나 Ctrl+F5키를 눌러 결과를 확인하는데요,
F5는 실행이 완료되는 순간 커맨드라인 창이 사라지고,
Ctrl+F5는 실행이 끝나도 커맨드라인 창이 남아있습니다.
이게 무슨 의미인지도 모르고 신나게 사용하던 때가 있었습니다. :)
하지만, 단지 커맨드라인 창의 동작방식으로 F5와 Ctrl+F5를 구분했을까요?
F5와 Ctrl+F5는 각각의 이름이 있습니다.
F5 : 디버깅 시작(Start debugging) Ctrl+F5 : 디버그하지 않고 시작(Start without debugging) |
F5와 Ctrl+F5는 디버깅 유무로 나뉘어져 있습니다.
F5는 디버거를 붙여 실행하는 것이고, Ctrl+F5는 디버거를 붙이지 않고 실행합니다.
디버거를 붙이면 Break point를 붙이거나 레지스터를 확인할 수 있습니다.
반대로 디버거를 붙이지 않으면, Break point 등의 기능을 사용할 수 없습니다.
이 부분은 메뉴명만으로도 충분히 유추할 수 있는 사항입니다.
하지만, 애초에 궁금한 점은 아니죠.
사실 몹시나 궁금했던 것은 디버깅 모드에 따라 ‘왜 터미널 창의 행동양식이 다른가’입니다.
분명 메뉴명을 보면, 디버거를 붙이고 안붙이고 정도의 차이만 있어야 하는데요.
거기에 터미널 창의 유지/비유지 차이도 발생했습니다.
스택오버플로우에 올라와 있는 질문(링크)
이 때문에 많은 개발자들이 디버깅모드로 빌드한 후 커맨드라인을 유지하는 방법에 대해 문의하고 있습니다.
사용자에게 의문점을 갖게 하는 디자인이 과연 좋은 디자인인지는 고민을 해봐야겠죠.
지극히 개인적인 의견으로는 가장 좋은 UX는 디버거를 달고 빌드를 하든 그렇지 않든 터미널이 모두 사라지거나 모두 남아있는 것이라고 생각합니다.
Visual Studio로 개발경험이 거의 전무하여 터미널 창이 사라지는게 좋은지 남아있는게 좋은지 판단하긴 힘들지만-
어느 쪽이든 디버거 외의 동작 방식에는 차이가 없는 것이 낫지 않을까 합니다.
하지만, MS 입장에서 보면, 프로세스 라이프사이클에 대한 지극히 당연한 논리적 귀결로 이런 형태를 선택했을 겁니다.
사용자도 디버깅 모드의 동작방식에 대한 이야기를 들으면, 충분히 이런 상황을 납득할 수 있을 거라 생각했겠죠.
우선, 디버깅 모드에서는 실행파일의 프로세스 자체에 디버거를 붙여서 실행합니다.
간단하게 FirstProgram이라는 프로젝트를 만들어 실행시켜 작업관리자를 보면,
FirstProgram.EXE 응용 프로그램 자체가 실행 중인 것을 확인할 수 있습니다.
최종적으로 main 함수에서 return되어 프로세스가 사라지면, 관련 자원도 모두 사라지는 것입니다.
하지만, 디버깅이 아닐때에는 cmd.exe를 통하여 FirstProgram이라는 실행파일을 실행합니다.
작업관리자의 응용 프로그램 탭에서 FirstProgram을 찾아볼 수가 없지요.
그렇기 때문에 실행파일 프로세스가 종료되어도 cmd.exe 프로세스가 남아 결과를 보여줄 수 있습니다.
따라서 각각의 모드에 따라 터미널이 남고 안남고의 차이가 나는 것이지요.
디버그 모드냐 아니냐에 따라 실행파일을 실행하는 방법이 다르기에 그 행동양식에도 차이가 난 것입니다.
따라서 디버깅 모드에서 콘솔로 실행파일을 실행한다면,
프로세스가 종료된 후에도 콘솔이 사라지지 않게 설정할 수도 있겠지요.
어느 입장에서 보느냐에 따라 디자인과 구현방식은 달라지기 마련입니다.
무엇이 맞는지는 상황에 따라 다르겠죠…?
이 점에 대해서 항상 고민이 필요하다고 생각합니다.
* References
https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx
https://msdn.microsoft.com/en-us/library/ms241274.aspx
'IT' 카테고리의 다른 글
[C#] bool.Parser vs Convert.ToBoolean() (0) | 2017.01.30 |
---|---|
[C#] Unicode에서 한글 초성/중성/종성에 대한 짧은 고찰 (0) | 2017.01.29 |
[C#] UTF-16의 캐릭터 크기에 대한 간단한 탐구 (0) | 2017.01.28 |
[C#] int.MaxValue 코딩컨벤션에 대한 사소한 의문 (30) | 2017.01.27 |
[C#] 코딩컨벤션, linux_kernel_coding_style vs camelCase vs PascalCase (2) | 2017.01.26 |
[Moonlight] 사요나라, 문라이트 프로젝트 (0) | 2017.01.02 |
[러시아] 러시아어 키보드가 어렵다! [모바일 안드로이드 버전편] (2) | 2016.03.17 |
비행기에서 최적의 자리는 어디일까요? (3) | 2016.03.13 |
카카오톡으로 대한항공 탑승권 체크인이 되나요? (0) | 2016.03.12 |
[GoPro HERO4 Silver] 고프로 히어로4 실버 타임랩스 촬영영상(서울/플라자호텔) (2) | 2016.03.03 |