2010-09-04 30 views
17

Estoy intentando construir una herramienta de línea de comandos en C# con VS2010.Cómo depurar un programa de línea de comandos C#

Mi pregunta es: ¿cómo puedo depurar esto, como lo haría con un winforms.
Con winforms, puedo recorrer el código, ver los valores en cada paso individual, etc ...

Aquí sin embargo, el programa solo responde cuando hablo desde la línea de comando. No puedo iniciar una sesión de depuración, ya que eso iniciará completamente el programa. Y debido a la naturaleza del programa, se cerrará porque no hubo argumentos de línea de comandos.

Por lo tanto, no se puede realizar ninguna depuración.

¿Qué debo hacer aquí?

EDITAR: un ejemplo, ya que alguien hizo un comentario que me hace sentir que esta explicación es necesaria.

C: \ Path \ To \ archivos \ file.exe -help

Eso es un ejemplo de cómo son destinatarios de este programa. El comando, -help, se da en la misma línea en que se inició el programa. En otras palabras, no puedo comenzar el programa y luego darle un comando mientras se está ejecutando ... porque ya no se ejecutará. Comenzará, verá que no tenía argumentos en el inicio, y debido a eso, apague. Así es como funciona una herramienta de línea de comandos.

  1. Activa
  2. Proceso posibles argumentos
  3. resultados de salida
  4. cerrado automáticamente

No es algo que sigue funcionando hasta que hace clic en las pequeñas X en la esquina superior derecha.

+0

posible duplicado de [Pasando los parámetros de línea de comando con Visual Studio C#] (http://stackoverflow.com/questions/6475887/passing-command-line-parameters-with-visual-studio-c -sharp) – horns

Respuesta

42

En las propiedades del Proyecto, en Debug, puede ingresar los Argumentos de Línea de Comando que desee y luego ejecutar la aplicación con F5, el depurador se adjuntará automáticamente.

+5

Aparecerán en gris si ya está * depurando. Si abre el menú Depurar, ¿está habilitada la opción "Detener depuración"? Si es así, selecciónelo y luego podrá establecer los argumentos de la línea de comando normalmente. –

1

Puede usar Visual Studio para conectar un depurador a la aplicación de línea de comandos, una vez que esté en curso con los argumentos correctos. No estoy seguro de si su aplicación terminará rápidamente o si le dará la oportunidad de adjuntar el depurador, pero si lo hace, esto debería funcionar.

estoy usando VS2008, pero apuesto a que el proceso es similar en 2010:

  1. En VS, vaya a Tools y haga clic en Attach to Process
  2. Cambiar la aplicación de la lista y pulse Attach

Ahora VS debe poder acceder a su aplicación y romper un error.

+0

No es probable en este escenario. La aplicación de línea de comando se iniciará y se cerrará tan rápido que no tendrá la oportunidad de conectarse de esta manera. Las sugerencias anteriores son muy superiores. –

+0

cierto. Solo tenía la esperanza de que tal vez habría una entrada de bloqueo que les daría la oportunidad de adjuntar el depurador. Pero, dado que acepta argumentos de línea de comando, supongo que es poco probable. –

+1

Si tiene el código fuente, puede insertar fácilmente una 'Console.Readline' para pausar el programa el tiempo suficiente para que pueda adjuntar el depurador. Luego presiona una tecla, y está fuera de las carreras. Esto no merece un voto negativo en mi opinión, funcionará perfectamente con un cambio trivial de una línea. –

1

Solo necesita agregar un punto de interrupción a la primera línea de la función principal (puede hacer esto haciendo clic en la línea en el editor de Visual Studio y presionando F9) y presionar F5 para iniciar una sesión de depuración.

+0

O podría simplemente ingresar al programa, sin necesidad de establecer un punto de interrupción explícitamente. – hydrogen

+0

Eso es lo que originalmente hice. Repito: este es un programa que espera argumentos de la línea de comando. No puedo ingresarlo varias veces. Se apaga después de 1 carrera. La entrega de un comando y el inicio del programa es simultáneo, lo cual es inherente a la naturaleza de los programas de línea de comando. Pondré un ejemplo en la publicación principal – KdgDev

1

O agregue un punto de interrupción a la apertura { de Main, o ingrese al programa (menú de depuración). En ese punto fije un reloj en el parámetro para main (los argumentos de la línea de comando) seleccionándolo y haciendo clic derecho/Add Watch o arrastre el parámetro para ver la ventana si ya está abierta. Haga doble clic en la columna Valor en la ventana Inspección y configúrelo en lo que quiera que sea.

Nota: el valor añadido debe ser un código válido - es decir, añadir un -help a la cadena [] que tendría que escribir o new string[] {"-help"}new [] {"-help"} dependiendo de la versión que está utilizando.

Esto tiene la ventaja de establecer el parámetro en la pestaña Depurar de la ventana Propiedades al permitir diferentes parámetros para cada ejecución sin tener que volver a la ventana Propiedades.

8

Puede agregar una llamada a Debugger.Launch a su código de inicio. Luego puede compilar e iniciar su aplicación desde la línea de comando. Recibirá un mensaje que le preguntará qué depurador desea adjuntar (normalmente esta será una lista de las diferentes versiones de Visual Studio que haya instalado), y listo.

(Pero en realidad, el establecimiento de parámetros de línea de comandos en las propiedades del proyecto> ficha Depurar es el mejor camino a seguir la mayor parte del tiempo. Si eso no funciona para usted, usted debe averiguar por qué.)

+1

System.Diagnostics.Debugger.Break() también tiene un efecto similar. – stephbu

-1

Cuando tiene argumentos de línea de comando, entonces necesita seguir una ruta diferente para depurar. Vaya a proyecto y luego seleccione propiedades. Allí verá la sección de depuración y luego dará los parámetros requeridos. Para que se encargue de pasar los parámetros al programa. Si tiene múltiples parámetros, sepárelos con espacio. Después de eso, si depura, llegará directamente al punto de ruptura. Para obtener más información, marque aquí how to debug c# through command line arguments in visual studio

+0

Lea primero la otra respuesta. Esto ya fue respondido. –

Cuestiones relacionadas