Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

Visual Studio Code에서 콘솔 응용 프로그램 개발 시 "입력"받는 방법

예를 들어 다음과 같이 입력을 받는 콘솔 프로그램을 만든 경우,

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        Console.ReadLine();
    }
}

Visual Studio Code에서 실행하면 "입력"을 받을 수 없습니다. 물론 필요가 없다면 그냥 종료해도 되겠지만 그렇지 않은 경우라면 문제가 되는데요, 이에 대해서는 관련 옵션을 설정할 수 있는 다음의 공식 문서에 해답이 있습니다.

Configuring launch.json for C# debugging - Console (terminal) window
; https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window

Debug Console window cannot accept Console.ReadLine() input during debugging
; https://github.com/OmniSharp/omnisharp-vscode/issues/1053

그러니까, ".vscode/launch.json" 파일을 보면 기본적으로 "console" 설정이 입력을 받을 수 없는 "internalConsole"로 되어 있습니다.

{
   // Use IntelliSense to find out which attributes exist for C# debugging
   // Use hover for the description of the existing attributes
   // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            // If you have changed target frameworks, make sure to update the program path.
            "program": "${workspaceFolder}/bin/Debug/netcoreapp3.0/vscode_console_input.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
            "console": "internalConsole",
            "stopAtEntry": false
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

이 값을 "integratedTerminal" 또는 "externalTerminal"로 바꿔주면 입력 값을 받을 수 있는데요. "externalTerminal"의 경우 실행 시 Visual Studio Code의 하단 "OUTPUT" 뷰가 사용되지 않고 아예 콘솔 창이 하나 뜨게 됩니다.

vscode_console_input_1.png

새 창이 하나 뜨는 게 왠지 거슬릴 수 있는데, 그런 경우라면 "integratedTerminal" 옵션을 선택하면 됩니다.




참고로 "Remote Development" 환경의 경우,

로컬의 Visual Studio Code로 원격 리눅스 머신에 접속해 개발하는 방법
; https://www.sysnet.pe.kr/2/0/11942

윈도우에서 리눅스로 접근하고 있다면, "externalTerminal" 설정은 다음과 같은 식의 오류가 발생하게 됩니다.

Unable to launch debugger worker process (vsdbg) through the terminal. can't find terminal application 'xterm'

xterm을 설치해 주면,

[Centos 7]

$sudo yum install xterm

이제는 다음과 같이 바뀝니다.

Unable to launch debugger worker process (vsdbg) through the terminal. xterm: Xt error: Can't open display: 

저도 해보진 않았는데 아마도 필요한 설정을 해주면,

Windows 10에서 리눅스용 프로그램 설치하고 실행하기
; https://medium.com/rkttu/windows-10%EC%97%90%EC%84%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%9A%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%84%A4%EC%B9%98%ED%95%98%EA%B3%A0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-2cb0d7892d12

Xming X Server for Windows
; http://sourceforge.net/projects/xming/

"externalTerminal" 설정이 동작해 새 창으로 뜨게 될 것입니다. 하지만, "integratedTerminal" 옵션이 제공되므로 저렇게까지 할 필요는 없는 것 같습니다. "integratedTerminal" 옵션이 한 가지 불편한 점이 있다면, 그 모드로 띄웠을 때 예외가 발생해 콘솔 프로그램이 종료되면 "OUTPUT" 창이 더 이상 동작하지 않게 되는 문제가 발생한다는 점입니다. 이럴 때는 OUTPUT 창을 닫고 다시 열어야 하는 식으로 조정을 좀 해야 합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/5/2019]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  188  189  190  191  192  193  [194]  195  ...
NoWriterDateCnt.TitleFile(s)
122정성태3/21/200517862    답변글 .NET Framework: 31.3. 소스세이프 관련 사이트
160정성태11/14/200520892    답변글 VS.NET IDE: 31.4. [추가]: 웹 애플리케이션 로드시 "_1"을 붙여서 묻는 경우. [1]
196이문석12/23/200517586        답변글 .NET Framework: 31.8. [답변]: [추가]: 웹 애플리케이션 로드시 "_1" 을 붙여서 묻는 경우.
167정성태10/10/200517274    답변글 .NET Framework: 31.5. [추가]: 삭제한 웹 가상 디렉터리에 대해 동일한 이름으로 웹 공유를 설정할 때 - 이미 있다고 오류발생
190정성태12/11/200516498    답변글 VC++: 31.6. ASP.NET 소스세이프 오류현상: 다른 사람이 체크아웃 한 것을 또 다른 사람이 체크아웃 가능!
191정성태12/11/200518933    답변글 VC++: 31.7. 소스 세이프 사용 시, 특정 프로젝트의 빌드 체크가 솔루션 로드할 때마다 해제되는 경우
118정성태3/30/200624885VC++: 14. TCP through HTTP tunneling: 기업 내 Proxy 서버 제한에서 벗어나는 방법 [2]
117정성태3/19/200525951.NET Framework: 30. Process.Start에서의 인자 길이 제한 [4]
116정성태3/14/200518357.NET Framework: 29. [.NET WebService] 자동생성되는 WSDL 을 막는 방법.
115정성태3/13/200518918VS.NET IDE: 25. [IIS 서버] ODBC 로그 남기기 [1]
195정성태12/21/200518305    답변글 VC++: 25.1. ODBC 로그를 못 남길 때의 오류 화면
113정성태3/13/200519188VS.NET IDE: 24. [VPC] 타이머 동기화 기능 제거
110정성태11/14/200518105.NET Framework: 28. VS.NET 2005 / SQL Server 2005 베타 버전 재설치 또는 업그레이드 [1]
111정성태3/7/200516833    답변글 VS.NET IDE: 28.1. [추가] SQL 2005 / VS.NET 2005 2005-02 CTP 버전이 올라왔네요. [1]
112정성태11/14/200518020        답변글 VS.NET IDE: 28.2. [추가] VS.NET 2005 2005-02 CTP 버전에서 달라진 점 ( VC++ )
127정성태3/29/200516021        답변글 VS.NET IDE: 28.4. [추가] SQL 2005 2005-02 CTP 버전에서 달라진 점
123정성태3/25/200519990    답변글 .NET Framework: 28.3. Uninstalling software without using Add Remove Programs...
108정성태3/4/200519436.NET Framework: 27. 시스템 이벤트 로그에 쌓이는 {00020906-0000-0000-C000-000000000046} 보안에러
107정성태3/1/200519621COM 개체 관련: 15. COM: Control 유형인 경우, IObjectWithSite 를 구현해도 SetSite/GetSite 가 호출이 안됨
106정성태2/28/200519068COM 개체 관련: 14. 탐색기 "처럼" 파일 열기
105정성태2/28/200518017.NET Framework: 26. VS.NET 2005 : 설치 프로젝트 - .NET Framework 설치 강제화
139정성태11/14/200516293    답변글 .NET Framework: 26.1. ^^ 역시, 배려가 되어 있네요. 제가 못 찾은 것이었습니다.
104정성태2/27/200518920VS.NET IDE: 23. MSI 설치 중에 GetLocalTime / GetSystemTime API 사용
132정성태3/30/200518587    답변글 VS.NET IDE: 23.1. [추가]: MSI 설치 동작 원리
102정성태2/16/200521372.NET Framework: 25. Verify that you are a member of the 'Debugger Users' group on the server. [2]
101정성태2/15/200519091.NET Framework: 24. WMI Win32_NTLogEvent 관리 이벤트를 Windows 2000 에서는 "Access Denied" 가 발생하는 문제파일 다운로드1
... 181  182  183  184  185  186  187  188  189  190  191  192  193  [194]  195  ...