디버깅 할 때 인수로 프로그램을 시작하려면 어떻게합니까?


108

Visual Studio 2008에서 프로그램을 디버깅하고 싶습니다. 문제는 인수를 얻지 못하면 종료된다는 것입니다. 이것은 주요 방법에서 가져온 것입니다.

if (args == null || args.Length != 2 || args[0].ToUpper().Trim() != "RM") 
{
    Console.WriteLine("RM must be executed by the RSM.");
    Console.WriteLine("Press any key to exit program...");
    Console.Read();
    Environment.Exit(-1);
}

나는 그것을 주석 처리하고 컴파일 할 때 다시 들어가기를 원하지 않습니다. 디버깅 할 때 인수로 프로그램을 시작하려면 어떻게해야합니까? 시작 프로젝트로 설정됩니다.



답변:


169

로 이동하십시오 Project-><Projectname> Properties. 그런 다음 Debug탭을 클릭하고 라는 텍스트 상자에 인수를 입력합니다 Command line arguments.


1
인수는 (반드시?) Command line arguments공백으로 구분 하여 채울 수 있습니다 ( 명령 줄을 사용하는 것처럼). 다른 방법이 있는지 확실하지 않지만 답변에 이것을 추가 할 수 있습니다.
d4Rk

2
나는 일주일 동안이 대답을 찾고 있었다! 감사합니다!
bird2920

공백이 포함 된 명령 인수 주변의 음성 표시를 잊지 마세요.
Dale

명령 줄 파서와 같은 라이브러리를 사용할 때 명명 된 매개 변수를 사용할 수 있습니까? 예 : 어떻게 통과 할 수 -url https://google.com -p pass -u user있습니까?
Animesh

54

다음과 같은 지시문을 사용하는 것이 좋습니다 .

        static void Main(string[] args)
        {
#if DEBUG
            args = new[] { "A" };
#endif

            Console.WriteLine(args[0]);
        }

행운을 빕니다!


2
모두 좋은 답변, I 등이 더 만 변경하거나 참조하는 것이 더 쉽습니다 때문에 (그것은 속성을 통해가는 번거 로움 반드시 아니지만 : P, 어쩌면 여분의 마우스 클릭 정도)
앤드류 잭맨

나는 이것을 조사 할 것이다. 감사.
Kasper Hansen

1
호맘의 솔루션에 동의합니다. 작은 프로그램의 경우 프로젝트 속성-> 디버그 탭의 명령 줄 인수를 설정하는 것이보다 직접적이고 쉬운 디버깅 방법이지만 지시문을 사용하는 대규모 애플리케이션의 경우 더 유용하고 우아합니다.
Sabitha 2011 년

두 솔루션 모두 완벽합니다. 하지만 저는 Homam의 솔루션을 선호합니다. 그것의 우아함은 돌보는 것을 잊을 수있는 프로젝트 설정을 고칠 필요가 없습니다. seconf에서 코드 변경 사항을 잊어 버릴 수도 있지만 적어도 "볼 수 있습니다".
IUnknown 2011-08-09

4
Omho이 대답은 대답입니다. 새로운 명령 줄 매개 변수 집합을 사용하여 디버깅 할 때마다 프로젝트 설정을 편집하는 것은 지루한 작업입니다. 이렇게 작성되면 확인하려는 모든 테스트 케이스를 간단히 기록하고 각 테스트 케이스에 대한 주석을 토글하여 활성화 할 수 있습니다. 훨씬 빠르며 특히 다른 언어 (작업에 익숙한 언어가 아님)로 Visual Studio 앞에있는 경우 특히 유용합니다. 이는 정확히 제 경우이며 언어를 알고 있지만 번역은 끔찍하고 원어민조차 제대로 처리 할 수 ​​없습니다. : D
rbaleksandar

6

내 제안은 단위 테스트를 사용하는 것입니다.

응용 프로그램에서 다음 스위치를 수행하십시오 Program.cs.

#if DEBUG
    public class Program
#else
    class Program
#endif

static Main(string[] args).

또는 다음 을 추가하여 Friend Assemblies 를 사용할 수도 있습니다.

[assembly: InternalsVisibleTo("TestAssembly")]

귀하의 AssemblyInfo.cs.

그런 다음 단위 테스트 프로젝트와 다음과 같은 테스트를 만듭니다.

[TestClass]
public class TestApplication
{
    [TestMethod]
    public void TestMyArgument()
    {
        using (var sw = new StringWriter())
        {
            Console.SetOut(sw); // this makes any Console.Writes etc go to sw

            Program.Main(new[] { "argument" });

            var result = sw.ToString();

            Assert.AreEqual("expected", result);
        }
    }
}

이렇게하면 코드를 편집하거나 메뉴 설정을 변경할 필요없이 자동화 된 방식으로 여러 인수 입력을 테스트 할 수 있습니다.


3

명령 줄 매개 변수에 민감한 정보가 있고 코드 저장소에 저장하는 것을 원하지 않았기 때문에이 페이지를 방문했습니다. 시스템 환경 변수를 사용하여 각 목적에 따라 필요에 따라 각 빌드 또는 개발 시스템에 설정할 수있는 값을 보유하고있었습니다. 환경 변수 확장은 셸 배치 프로세스에서 훌륭하게 작동하지만 Visual Studio에서는 작동하지 않습니다.

Visual Studio 시작 옵션 :

Visual Studio 시작 옵션

그러나 Visual Studio는 변수 값이 아니라 변수 이름을 반환합니다.

문제의 예 :

Visual Studio의 오류 예

여기에서 여러 가지를 시도한 후 최종 솔루션은 내 인수 프로세서에서 환경 변수에 대한 빠른 조회를 작성하는 것입니다. 들어오는 변수 값에 %에 대한 확인을 추가하고 발견되면 환경 변수를 찾아 값을 바꿉니다. 이것은 Visual Studio와 내 빌드 환경에서 작동합니다.

foreach (string thisParameter in args)
            {
                if (thisParameter.Contains("="))
                {
                    string parameter = thisParameter.Substring(0, thisParameter.IndexOf("="));
                    string value = thisParameter.Substring(thisParameter.IndexOf("=") + 1);

                    if (value.Contains("%"))
                    {   //Workaround for VS not expanding variables in debug
                        value = Environment.GetEnvironmentVariable(value.Replace("%", ""));
                    }

이를 통해 샘플 배치 파일과 Visual Studio를 사용한 디버깅에서 동일한 구문을 사용할 수 있습니다. GIT에 저장된 계정 정보 또는 URL이 없습니다.

배치에서 사용 예

배치 파일 예


1

대한 비주얼 스튜디오 코드 :

  • launch.json파일 열기
  • 구성에 인수를 추가하십시오.

"args": [ "일부 인수", "다른 인수"],

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.