otro localizar localizacion internet dispositivo desde desactivada cómo conexión conexion buscar apple activar iphone xcode debugging macos gdb

localizar - ¿Alguna manera de saber si mi aplicación de iPhone se está ejecutando bajo el depurador en tiempo de ejecución?



icloud (2)

Me gustaría que mi código de manejo de errores se comportase de manera diferente si se ejecuta bajo el depurador. Específicamente, si estoy ejecutando en un teléfono, no conectado a un depurador y fallo una afirmación, deseo enviar el error a mi servidor. Cuando estoy bajo gdb, quiero entrar en el depurador.

Aunque puedo imaginar cómo Apple escribiría el código, no puedo encontrar ninguna documentación de una forma de tiempo de ejecución para probar la presencia del depurador.


¿Por qué no redefinir assert para hacer lo que quieras, cuando no se compila para la depuración?

Otra opción es crear su propia función afirmar, donde luego puede agregar un punto de interrupción al cargar en GDB.

El prototipo afirmar es

void assert (int expresión);

void assert(int expression) { if( !expression ) { // enable break point here // log to server } }

o agregue el punto de interrupción en el código de registro al servidor.


El método descrito aquí funcionó bien para mí

-(void)viewDidLoad colocándolo en -(void)viewDidLoad

- (void)viewDidLoad { [super viewDidLoad]; int mib[4]; size_t bufSize = 0; int local_error = 0; struct kinfo_proc kp; mib[0] = CTL_KERN; mib[1] = KERN_PROC; mib[2] = KERN_PROC_PID; mib[3] = getpid(); bufSize = sizeof (kp); if ((local_error = sysctl(mib, 4, &kp, &bufSize, NULL, 0)) < 0) { label.text = @"Failure calling sysctl"; return; } if (kp.kp_proc.p_flag & P_TRACED) label.text = @"I am traced"; else label.text = @"I am not traced"; }