5 votos

¿Cómo desactivar el cuadro de diálogo "[ ] salir inesperadamente." en MacOS v13 ("Ventura")?

Estoy desarrollando una herramienta sencilla en C, y estoy utilizando aserciones para las pruebas. Desde que me actualicé a MacOS v13.0, cada vez que ejecuto mi conjunto de pruebas, obtengo un montón de " nombre del programa Una por cada afirmación que ha fallado, lo cual es bastante molesto. ¿Alguien sabe si esos cuadros de diálogo se pueden desactivar y cómo?

He considerado si esta pregunta debería ir en StackOverflow o aquí, pero en última instancia se trata de cómo desactivar un cuadro de diálogo de MacOS, no de desarrollo; esto es sólo para el contexto. Si me equivoco, estoy feliz de hacer mi pregunta en StackOverflow en su lugar.

El problema

Las afirmaciones que fallan llaman abort , lo que provoca una señal ABRT, desencadenando una salida anómala y, en consecuencia, el diálogo.

Por ejemplo:

$ cc -xc - <<EOF
#include <stdlib.h>

int main(void) {
        abort();
}
EOF
$ ./a.out

desencadena

Dialogue box "a.out quit unexpectedly.

Pero una de las cosas que mi conjunto de pruebas está comprobando es si las aserciones capturan los errores que deberían capturar; esas aserciones fallan a propósito. Así que sería estupendo si pudiera desactivar ese cuadro de diálogo, preferiblemente sólo para mi conjunto de pruebas o sólo mientras se realizan las pruebas.

Investigación

El manual de abort afirma que:

La función abort() hace que se genere un informe por Crash Reporter. Si desea terminar sin generar un informe de accidente, utilice exit(3) en su lugar.

Así que puede que no haya solución.

He intentado defaults write com.apple.CrashReporter DialogType none que se lee como si fuera a desactivar el Crash Reporter, pero en vano.

También he buscado en la web, pero cuando mis términos de búsqueda incluyen "Crash Reporter", el único consejo que obtengo es desactivar el intercambio de datos de fallos con Apple (lo que ya he hecho); y cuando no lo hacen, cualquier consejo que pueda haber está enterrado bajo una avalancha de artículos sobre cómo evitar que esta o aquella aplicación se cuelgue.

No soluciones

Supongo que podría redefinir assert o captar la señal ABRT y llamar a _exit del manejador de señales, pero hacer cualquiera de las dos cosas es de mal estilo, y prefiero no hacerlo.

4voto

Martin R Puntos 181

Descargue la imagen de disco "Additional Tools for Xcode NN" (la versión que coincida con su instalación de Xcode) desde el sitio web de Apple Más descargas e inicie "CrashReporterPrefs.app" en la carpeta "Utilities" de esa imagen de disco.

Aquí puede seleccionar si el cuadro de diálogo "Salir inesperadamente" debe mostrarse nunca, sólo para las caídas de la aplicación, o para todas las caídas de los procesos ejecutados por el usuario (incluyendo los procesos de línea de comandos):

enter image description here

Parece que los cambios no surten efecto hasta que el usuario se desconecta y vuelve a conectarse.

Si elige "Básico" o "Servidor", la ejecución del programa en el Terminal da lugar a un mensaje de error y a un código de salida distinto de cero, pero no se activa ningún diálogo:

$ ./a.out 
Abort trap: 6
$ echo $?
134

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X