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
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.