10 votes

GDB se bloque mystérieusement après le nettoyage et la construction.

OS: Mac OSX 10.14.6
GDB version: 8.2.50.20190226-git
g++ version: 11.0.0 (clang-1100.0.33.16)

Le problème : Chaque fois que je nettoie et reconstruis ma simple application c++ "Hello World" (en utilisant g++) et que j'essaie ensuite de la déboguer en utilisant gdb, gdb se bloque indéfiniment. Mais la partie la plus étrange vient ensuite : si je vais dans le moniteur d'activité et que je tue le processus gdb en cours d'exécution, puis que je relance gdb (en le tuant s'il se bloque à nouveau), gdb finira par fonctionner et je pourrai parcourir mon code. J'ai suivi les étapes décrites aquí pour coder correctement gdb, donc cela ne semble pas être le problème. Mac Experts, avez-vous une idée de la raison pour laquelle la reconstruction d'un exécutable C++ empêcherait GDB de le déboguer tant qu'il n'a pas été exécuté et tué plusieurs fois ?

Pour référence, voici les commandes de terminal brutes que le Makefile génère :

$ rm -f -r ./build/Debug
$ rm -rf ./dist/Debug
$ mkdir -p ./build/Debug/GNU-MacOSX
$ mkdir -p ./dist/Debug/GNU-MacOSX
$ g++    -c -g -MMD -MP -MF "build/Debug/GNU-MacOSX/welcome.o.d" -o build/Debug/GNU-MacOSX/welcome.o welcome.cc
$ g++     -o dist/Debug/GNU-MacOSX/welcome_1 build/Debug/GNU-MacOSX/welcome.o

Et voici ce qui se passe quand je lance gdb :

Starting program: /Users/matthewboyle/NetBeansProjects/Welcome_1/dist/Debug/GNU-MacOSX/welcome_1 
[New Thread 0xf03 of process 33622]
[New Thread 0xd03 of process 33622]
(It just hangs after this point, I have to kill the process)

0 votes

Je suis confronté au même problème. Je débogue un exécutable compilé à partir d'un code d'assemblage (NASM + ld avec l'indicateur de débogage -g). J'ai essayé lldb et cela a bien fonctionné. Si vous avez juste besoin d'un débogueur, vous pouvez essayer lldb dans mac.

0 votes

Le problème a été résolu pour moi après avoir lancé Xcode et installé les composants qu'il suggérait d'installer.

1 votes

Comme je l'ai récemment découvert sur ma question similaire , g++ est un lien vers clang par défaut. Votre g++ —version confirme que vous utilisez réellement clang. Faire correspondre le compilateur GNU avec le débogueur GNU semble avoir résolu le problème dans mon cas. Clang fonctionne mieux avec lldb d'après mon expérience.

1voto

awdeorio Points 11

J'ai rencontré le même problème et j'ai pu le résoudre en compilant avec GNU g++ et en incluant les informations de débogage GDB de niveau 3.

$ g++-10 -ggdb3 FILE.cpp

Addendum : ajout de mes versions de toolchain pour la postérité.

$ uname -a
Darwin manco.local 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64 i386 MacBookPro15,2 Darwin

$ g++-10 --version
g++-10 (Homebrew GCC 10.2.0) 10.2.0
...

$ gdb --version
GNU gdb (GDB) 10.1
...

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X