2010-05-03 12 views
25

¿Cómo se puede "Asociar al proceso ..." para una aplicación de consola que se ejecuta desde una ventana de CMD y no se inició con F5? La razón por la que pregunto es porque la aplicación toma argumentos de línea de comando y quiero tener una experiencia genuina.Depuración: adjuntar al proceso para la aplicación de consola que se ejecuta dentro de cmd.exe

Incluso me he conectado a CMD.exe, pero no tuve suerte, o establecí un punto de inflexión usando Console.ReadKey() y tampoco tuve suerte. Estoy algo perdido aquí.

¿Esto es posible?

+3

En caso de que no lo sepa, puede establecer argumentos de línea de comandos en Visual Studio para usarlos en su aplicación cuando presiona F5. Haga clic derecho en el proyecto -> Propiedades -> Depuración -> Opciones de inicio -> Argumentos de línea de comando. –

+0

@Jacob G, sí, puedo hacerlo, pero es realmente torpe y si quiero cambiar los argumentos, tengo que profundizar en los diálogos – Chris

+2

No es útil adjuntar a cmd.exe, ya que la aplicación de consola se ejecuta en su propio proceso, no cmd.exe –

Respuesta

30

Usted tiene algunas opciones:

  • Uso "Test -> argumentos de línea de comandos" opción en Visual Studio;
  • Use "Depurar -> Adjuntar para procesar" y encuentre su proceso; no es cmd.exe, sino un proceso con nombre ejecutable como "MyProject.exe". Puede usar Process Explorer u otro administrador de tareas con soporte de "vista de árbol" para encontrar fácilmente el ID de proceso - solo busque los procesos iniciados por su cmd.exe.
  • Ponga Debugger.Break() en su código: cuando se ejecuta este método, el sistema abrirá un cuadro de diálogo que le pedirá que elija qué instancia de Visual Studio usar para la depuración (puede elegir la que ya tiene su proyecto abierto) .
+0

Excelente: acaba de agregar Console.ReadKey() como la primera línea y funcionó como un amuleto. – else

2

Es posible, claro. Pruebe uno de estos dos:

  1. Inicie el proceso, luego vaya a Depurar-> Adjuntar y encuentre el proceso. Es posible que deba actualizar para verlo.
  2. Agregue una declaración "Debugger.Break()" en el código, si es posible; eso se romperá automáticamente (pero asegúrese de eliminarlo o rodearlo con directivas de preprocesador para que no entre en el código de producción).
0

En la sección de configuración de proyectos "Depuración" hay un cuadro de texto para "Argumentos de línea de comandos:". Cuando el depurador VS inicia el programa C#, pasará esos argumentos al proceso como si el programa se hubiera iniciado desde la línea de comando con esos argumentos.

La alternativa es usar un depurador de línea de comandos. Aquí hay algunas opciones, pero honestamente, probablemente no sean lo que quieres usar en lugar de VS a menos que estés metiéndote en algunos escenarios de depuración realmente peludos. Si usted está interesado en la comprobación hacia fuera, hay un buen resumen en este SO responder:

También puede probar siguiendo la técnica de poner una llamada a System.Diagnostics.Debugger.Break() al principio de su inicialización - si el programa se ejecuta bajo un depurador, se romperá, no se está ejecutando bajo un depurador se le preguntará si desea adjuntar uno. Puede realizar la llamada de forma condicional dependiendo de un archivo de configuración o la configuración de la variable de entorno para que solo obtenga el receso si realmente está interesado en él (algo intrusivo, pero no tan malo).

1

Como han dicho otros, puede especificar los argumentos de la línea de comando stratup desde el proyecto y simplemente iniciar la depuración en Visual Studio.

Si aún desea adjuntar a la aplicación en ejecución, debe conectar el depurador a MyApp.exe (cualquiera que sea su aplicación, el exe que se compila en el directorio bin \ debug) y no cmd.exe. Adjuntar a cmd.exe se asocia al proceso de comando, no al proceso de su aplicación.

4

para depurar desde la línea de comandos en lugar de utilizar el laberinto VS GUI:

  • lanzamiento del sistema de Visual Studio Prompt

  • tipo vsjitdebugger /? que le da la orden de ejemplo como:

c:>vsjitdebugger [AppName] [Args]: Lanzamiento del especificado ejecutable y adjuntar al depurador

  • escribiendo lista o lista de tareas le dará PID para adjuntar a los procesos existentes. ejemplo:

c:> lista de tareas | find/i "web"

0

simplemente añada una entrada del registro para el nombre de su exe en "HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ opciones de ejecución del archivo de imagen", añadiendo una clave "depurador" valorada con "vsjitdebugger.exe" debajo de ella, Puede ver un cuadro de diálogo que le pide que elija una versión de VS para depurar cuando se inicia el ejecutable.

ver MSDN "How to: Launch the Debugger Automatically" para obtener más información.

Cuestiones relacionadas