es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Xcode LLDB: Cómo no detenerse pero pasar señales

Pregunta: ¿Cómo puedo configurar / indicar a LLDB de Xcode que no se detenga en – y pase una señal específica para una herramienta de línea de comandos?


Antecedentes:

Estamos usando código de terceros que depende de SIGUSR1.

Al ejecutar en Xcode 13, LLDB se detiene en esa señal y la suprime (es decir, no la pasa).

Nuestro objetivo es una herramienta de línea de comandos, no una NSApplication.

He encontrado esta respuesta a una pregunta muy similar (la única diferencia que veo es que es una NSApplication). Dice que se debe utilizar este comando:

process handle SIGUSR1 -n true -p true -s false

en un Punto de interrupción simbólico, estableciendo main() como símbolo.

Pero esto nos da:

error: target no válido, cree un objetivo utilizando el comando ‘target create’


He intentado con un punto de interrupción “normal” en main():

Imagen

Y con un Punto de interrupción simbólico, utilizando main() como símbolo:

Imagen

Ambos puntos de interrupción registran el error descrito, lo que demuestra que:

  • El punto de interrupción funciona
  • El comando se procesa pero causa el error

La configuración del esquema de Xcode está establecida para debug y el ejecutable correcto:

Imagen


Cuando utilizo el comando en la consola de LLDB (en lugar de Xcode), funciona correctamente, por lo que el comando parece estar bien.


Cómo reproducirlo de manera sencilla:

  • En Xcode, seleccionar “nuevo proyecto” -> “Herramienta de línea de comandos”
  • Nombrar como “TestLLDB” y guardar en cualquier lugar
  • Establecer un punto de interrupción en la línea 13 de main() (NSLog…)
  • Editar el punto de interrupción y agregar la acción “Comando del depurador”: “process handle SIGUSR1 -n true -p true -s false”
  • Ejecutar el proyecto
  • Comprobar la consola para ver el error mencionado anteriormente
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para configurar LLDB de Xcode para que no se detenga en y pase una señal específica para una herramienta de línea de comandos, siga estos pasos:

    1. Abra su proyecto de Xcode y vaya al navegador de puntos de interrupción.
    2. Cree un punto de interrupción simbólico en la función main(). Para hacer esto, haga clic en el ícono “+” en la esquina inferior izquierda del navegador de puntos de interrupción y seleccione “Añadir punto de interrupción simbólico…”. En la ventana emergente que aparece, escriba main en el campo “Símbolo” y presione “Enter” para crear el punto de interrupción.
    3. Haga clic derecho sobre el nuevo punto de interrupción y seleccione “Editar punto de interrupción…”.
    4. En la ventana emergente que aparece, haga clic en el ícono “+” en la parte inferior y seleccione “Comando del depurador”.
    5. En el campo de texto que aparece a continuación, escriba el siguiente comando: process handle SIGUSR1 -n true -p true -s false, tal como se describe en la respuesta de Stack Overflow.
    6. Desmarque la opción “Continuar automáticamente después de evaluar las acciones”.
    7. Haga clic en “Listo” para cerrar la ventana emergente.

    Ahora, cuando ejecute su herramienta de línea de comandos, LLDB no se detendrá en la señal SIGUSR1 y la pasará a su aplicación.

    Tenga en cuenta que si aún recibe el mensaje de error “destino no válido”, podría ser porque su punto de interrupción no está alcanzando la función main(). Asegúrese de que su punto de interrupción esté alcanzando la función correcta e intente nuevamente.

Comments are closed.