Come si avvia un programma con argomenti durante il debug?


109

Voglio eseguire il debug di un programma in Visual Studio 2008. Il problema è che esce se non riceve argomenti. Questo è dal metodo principale:

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);
}

Non voglio commentarlo e poi reinserirlo durante la compilazione. Come posso avviare il programma con argomenti durante il debug? È impostato come Progetto StartUp.



Risposte:


171

Vai a Project-><Projectname> Properties. Quindi fai clic sulla Debugscheda e inserisci i tuoi argomenti nella casella di testo chiamata Command line arguments.


1
Gli argomenti possono (devono?) Essere inseriti in Command line argumentsspazi separati (come faresti, usando la riga di comando). Non sono sicuro che ci siano altri modi, ma forse puoi aggiungere questo alla tua risposta.
d4Rk

2
Sto cercando questa risposta da una settimana! Grazie!
bird2920

Non dimenticare i segni di discorso intorno agli argomenti dei comandi contenenti spazi, che mi hanno colto di sorpresa.
Dale

È possibile utilizzare parametri denominati per quando si utilizzano librerie come il parser della riga di comando? es. come posso passare qualcosa di simile -url https://google.com -p pass -u user?
Animesh

54

Suggerirei di utilizzare le direttive come le seguenti:

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

            Console.WriteLine(args[0]);
        }

In bocca al lupo!


2
Entrambe le buone risposte, mi piace di più solo perché è più facile cambiare o fare riferimento (anche se non è necessariamente una seccatura passare attraverso le proprietà: p, forse un clic del mouse in più o giù di lì)
Andrew Jackman

Lo esaminerò. Grazie.
Kasper Hansen

1
Sono d'accordo con Homam's Solution. Sebbene per un piccolo programma, l'impostazione delle proprietà del progetto -> Argomenti della riga di comando della scheda Debug è un modo più diretto e facile per eseguire il debug, per le applicazioni di grandi dimensioni che utilizzano le direttive sono più utili ed eleganti.
Sabitha

Entrambe le soluzioni sono perfette. ma preferisco la soluzione di Homam. Il suo elegante non ha bisogno di armeggiare con le ambientazioni del progetto di cui ci si può dimenticare di occuparsi. Con un secondo pensiero si possono anche dimenticare le modifiche al codice fatte ma sono almeno "visibili".
IUnknown

4
Omho questa risposta è LA risposta. È un lavoro noioso modificare le impostazioni del progetto ogni volta che si desidera eseguire il debug con un nuovo set di parametri della riga di comando. Quando è scritto in questo modo, puoi semplicemente scrivere tutti i casi di test che desideri controllare e semplicemente attivare i commenti su ciascuno per attivarlo. Molto più veloce e si rivela particolarmente utile se ti trovi improvvisamente davanti a un Visual Studio in una lingua diversa (non quella con cui sei abituato a lavorare), che è esattamente il mio caso e sebbene conosca la lingua, la traduzione è orribile e anche un madrelingua non può affrontarlo correttamente. : D
rbaleksandar

6

Il mio suggerimento sarebbe quello di utilizzare i test unitari.

Nella tua applicazione esegui le seguenti operazioni Program.cs:

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

e lo stesso per static Main(string[] args) .

In alternativa, usa le assemblee di amici aggiungendo

[assembly: InternalsVisibleTo("TestAssembly")]

al tuo AssemblyInfo.cs.

Quindi crea un progetto di unit test e un test che assomigli un po 'a questo:

[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);
        }
    }
}

In questo modo puoi, in modo automatico, testare più input di argomenti senza dover modificare il tuo codice o cambiare un'impostazione del menu ogni volta che vuoi controllare qualcosa di diverso.


3

Sono arrivato a questa pagina perché ho informazioni sensibili nei miei parametri della riga di comando e non volevo che fossero archiviate nel repository del codice. Stavo usando le variabili di ambiente di sistema per contenere i valori, che potevano essere impostati su ciascuna macchina di build o di sviluppo secondo necessità per ogni scopo. L'espansione delle variabili di ambiente funziona alla grande nei processi Shell Batch, ma non in Visual Studio.

Opzioni di avvio di Visual Studio:

Opzioni di avvio di Visual Studio

Tuttavia, Visual Studio non restituirà il valore della variabile, ma il nome della variabile.

Esempio di problema:

Esempio di errore in Visual Studio

La mia soluzione finale dopo aver provato diversi qui su SO è stata quella di scrivere una rapida ricerca per la variabile di ambiente nel mio Argument Processor. Ho aggiunto un controllo per% nel valore della variabile in entrata e, se viene trovato, cerca la variabile d'ambiente e sostituisci il valore. Funziona in Visual Studio e nel mio ambiente di compilazione.

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("%", ""));
                    }

Ciò mi consente di utilizzare la stessa sintassi nei file batch di esempio e nel debug con Visual Studio. Nessuna informazione sull'account o URL salvati in GIT.

Esempio di utilizzo in batch

Esempio di file batch


1

Per Visual Studio Code :

  • Apri launch.jsonfile
  • Aggiungi argomenti alla tua configurazione:

"args": ["qualche argomento", "un altro"],

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.