¿Qué es un código de salida de hilo?


115

¿Qué es exactamente un código de salida de hilo en la ventana de salida durante la depuración? ¿Qué información me da? ¿Es de alguna manera útil o simplemente algo interno que no debería molestarme?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

¿Existe tal vez algún tipo de lista de posibles códigos de salida junto con su significado?

Respuestas:


100

En realidad, no parece haber mucha explicación sobre este tema, pero se supone que los códigos de salida se usan para dar una indicación de cómo salió el hilo, 0tiende a significar que salió de forma segura, mientras que cualquier otra cosa tiende a significar que no lo hizo. no sale como se esperaba. Pero luego, este código de salida se puede configurar en código por usted mismo para pasarlo por alto por completo.

El enlace más cercano que pude encontrar útil para obtener más información es este

Cita del enlace anterior:

Cualquiera que sea el método de salida, el número entero que devuelve de su proceso o subproceso debe ser valores de 0-255 (8 bits). Un valor cero indica éxito, mientras que un valor distinto de cero indica fracaso. Aunque puede intentar devolver cualquier valor entero como código de salida, solo el byte más bajo del entero se devuelve de su proceso o subproceso como parte de un código de salida. Los bytes de orden superior son utilizados por el sistema operativo para transmitir información especial sobre el proceso. El código de salida es muy útil en programas por lotes / shell que ejecutan condicionalmente otros programas dependiendo del éxito o fracaso de uno.


De la documentación de GetEXitCodeThread

Importante La función GetSalirCodeThread devuelve un código de error válido definido por la aplicación solo después de que termina el hilo. Por lo tanto, una aplicación no debe usar STILL_ACTIVE (259) como código de error. Si un subproceso devuelve STILL_ACTIVE (259) como un código de error, las aplicaciones que prueban este valor podrían interpretar que significa que el subproceso todavía se está ejecutando y continúan probando la finalización del subproceso después de que el subproceso haya terminado, lo que podría poner el aplicación en un bucle infinito.


Entiendo todo esto es que el código de salida no importa tanto si está utilizando subprocesos dentro de su propia aplicación para su propia aplicación. La excepción a esto es posiblemente si está ejecutando un par de subprocesos al mismo tiempo que tienen una dependencia entre sí. Si es necesario que una fuente externa lea este código de error, puede configurarlo para que otras aplicaciones conozcan el estado de su hilo.


1
¿Hay alguna forma de eliminarlo desde la ventana de salida?
Arne Evertsson

26
@ArneEvertsson - Si va a Herramientas | Opciones ... en el área "Ventana de depuración \ Salida", hay una configuración de "Mensajes de salida de hilo" (Activado | Desactivado).
Josh Poley

2
Esto puede significar que está utilizando métodos asíncronos dentro de un hilo principal de una aplicación síncrona y no está esperando a que finalicen. La forma más fácil de lidiar con esto es llamar a Wait () en una tarea iniciada y devuelta por otro método como se muestra en este ejemplo: asp.net/web-api/overview/advanced/… RunAsync().Wait();
Bron Davies

1
El hilo del grupo de subprocesos de @BronDavies sale con el código de error 259 incluso después de llamar a Wait (). Aquí está mi código: static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }La cuestión es que las tareas se ejecutan mediante subprocesos del grupo de subprocesos y, según la heurística del grupo de subprocesos, es posible que no finalice el subproceso incluso después de que la tarea haya finalizado. El hilo simplemente regresa al grupo de hilos esperando ser asignado con la siguiente tarea. Y es por eso que el código de salida STILL_ACTIVE (259) suena tan intuitivo aquí.
RBT

El artículo del enlace es incorrecto. No hay ningún requisito de que un código de salida de hilo (o un código de salida de proceso, para el caso) sea de un solo byte.
Harry Johnston

55

Como mencionó Sayse, el código de salida 259 (0x103)tiene un significado especial, en este caso el proceso que se está depurando aún se está ejecutando.

Vi esto mucho con la depuración de servicios web, porque el hilo continúa ejecutándose después de ejecutar cada llamada de servicio web (ya que todavía está escuchando más llamadas).


7
Más información ... generalmente, cualquier hilo que sea propiedad del grupo de hilos saldrá con 259. Ver: stackoverflow.com/questions/21632584/…
Skrymsli

Me preguntaba qué significaba esto, y su respuesta fue exactamente lo que estaba viendo mientras ejecutaba mi aplicación de consola C #. ¡Gracias!
kayleeFrye_onDeck

0

lo que me pasó es que tengo varios proyectos en mi solución. Quería depurar el proyecto 1, sin embargo, el proyecto 2 se estableció como el proyecto inicial predeterminado. Arreglé esto, haga clic derecho en el proyecto y seleccione "Establecer como proyecto de inicio", luego ejecutar la depuración está bien.


1
No veo los mensajes de depuración en la ventana de salida como problemas. Solo tenía curiosidad por saber qué son, no cómo deshacerme de ellos.
Ondrej Janacek
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.