7 votos

GDB se cuelga después de "Nuevo hilo" en macOS

He compilado GDB a partir del código fuente en macOS 12.0 y lo he firmado. Sin embargo, cada vez que intento depurar un programa, obtengo esto:

(gdb) b main
Punto de interrupción 1 at 0x10000324f: archivo main.cpp, línea 50.
(gdb) run
Iniciando programa: /Users/fluzzlesnuff/Documents/C++/a.out
[Nuevo Hilo 0x2a03 del proceso 2389]

y luego GDB se cuelga. He estado compilando programas en C++ con g++. Aquí hay algunas cosas que he intentado:

  1. Compilar con la opción -g.
  2. Compilar con la opción -ggdb.
  3. Compilar con la opción -ggdb3.
  4. Ejecutar con sudo
  5. Matar y volver a ejecutar gdb repetidamente.
  6. Probar diferentes binarios.
  7. Desactivar SIP
  8. Agregar más breakpoints.
  9. set startup-with-shell off en .gdbinit

No recibo errores de taskgated / Mach Port; solo el mensaje de Nuevo Hilo.

Sé que esto es casi una duplicación de este, pero no vi una respuesta funcional en esa pregunta.

Para referencia, aquí están mis versiones:

$ g++ --version
Versión de Apple clang 12.0.0 (clang-1200.0.32.29)
Objetivo: x86_64-apple-darwin21.0.0
Modelo de hilos: posix
Directorio instalado: /Library/Developer/CommandLineTools/usr/bin

$ gdb --version
GNU gdb (GDB) 10.2

0 votos

Como estás utilizando clang, puede ser una mejor idea utilizar lldb (como se usa en Xcode) como depurador. Creo que gdb está más alineado para usarse con GNU cc, que no es tu g++

0 votos

g++ es un alias de gcc con algunas opciones de C++, por lo que definitivamente es de GNU. gcc.gnu.org

0 votos

Eso no es lo que muestras en la pregunta, el resultado de g++ --version dice que es clang

2voto

Fluzzlesnuff Puntos 1

Como de costumbre, el problema fue la atención al detalle. Vi que g++ --version reportaba clang, pero no pensé en ello lo suficiente. Había asumido que GDB era el problema, no mi compilador. No estoy seguro de por qué Apple vinculó g++ a clang++, ya que eso es bastante engañoso. Este pequeño descuido me hizo pasar 8 meses escribiendo C++ en mi teléfono (vi en una pantalla de 60 caracteres de ancho no es mi IDE ideal).

Lo que hice para obtener real g++:

  1. Instalar gcc con Homebrew

  2. Crear un enlace simbólico (ln -s) de gcc-11 y g++-11 desde /usr/local/Cellar/ a /usr/local/bin/

  3. unhash (al menos en zsh) gcc y g++, o si no gcc seguirá expandiéndose a /usr/bin/clang

Ahora GDB funciona genial.

0 votos

¿Por qué necesitas gnu c++? Clang hace la mayoría de las cosas igual de bien y para macos y ios probablemente es mejor. Con clang puedes usar xcode, que es un ide mucho mejor que vi en un iPhone. Además, al hacer la mayor parte del trabajo en c, no se llama a gcc o clang en la línea de comandos, sino a un sistema de compilación, por ejemplo, make, y para eso quieres configurar CC con la ruta completa y no depender de tu $PATH.

0 votos

No puedo depurar programas compilados con clang usando gdb. Intenté usar Xcode, pero era mucho más de lo que necesitaba para escribir pequeñas utilidades. Estoy escribiendo utilidades de línea de comandos, por lo que encuentro más fácil g++ *.cpp, luego ejecutar a.out con los argumentos que desee.

0 votos

Luego, usa lldb para depurar

1voto

Erik Puntos 121

Este hang hits bug de gdb: https://sourceware.org/bugzilla/show_bug.cgi?id=24069

Puedes instalar gdb desde esta fuente con el parche:

brew install --force --build-from-source domq/gdb/gdb  # una versión parcheada basada en 10.1

o puedes

brew update
brew install gdb # usar gdb 12.1

Funciona para mí, y lo encontré en este enlace: https://gist.github.com/mike-myers-tob/9a6013124bad7ff074d3297db2c98247

0voto

s razu Puntos 141

EDIT: Parece que estaba equivocado, todavía solo funciona esporádicamente, a veces se cuelga a veces no. Acaba de suceder que funcionó tres veces seguidas después de ejecutar este comando :(

Tuve el mismo problema y luché durante horas tratando de instalar gdb en mac. Encontré esta entrada de blog que decía que no debería haber ejecutado

sudo DevToolsSecurity -enable

lo cual nunca hice. Así que lo intenté y funcionó. Otra posible solución era ejecutar gdb con sudo cada vez pero sentí que esta era mejor. No tengo idea de por qué funcionaron pero lo hicieron, espero que alguien más encuentre esto útil.

0 votos

No he ejecutado esto, pero después de una actualización reciente de las Herramientas de Desarrollo de Línea de Comandos, se me pidió la confirmación de Touch-ID cuando inicié gdb. Eso me hace pensar que su comando, o alguna forma de él, se ejecutó durante la actualización, y ahora hace una verificación de seguridad al ejecutar herramientas de desarrollo.

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