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 versclang
par défaut. Votreg++ —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 aveclldb
d'après mon expérience.0 votes
Merci Fluzzlesnuff, c'est ce qui se passait. Au moment où j'ai écrit ces lignes, j'étais assez peu au courant de l'histoire de l'écosystème Mac et je pensais que Clang était juste le portage de g++ par Apple, et non un compilateur complètement reconstruit.