Commençons par la description ce qui se passe:SDL2 & GDB: programme signal reçu, signal inconnu
Je joue avec la bibliothèque SDL2 sous Windows. Je peux compiler des programmes en l'utilisant, et quand je cours le .exe cela fonctionne très bien. Des problèmes surviennent lorsque j'essaie de le déboguer en utilisant GDB - quand le code arrive aux fonctions SDL_Init ou SDL_OpenAudio (qui créent éventuellement de nouveaux threads), GDB s'arrête, affiche le message "signal reçu du programme?, Signal inconnu", et quand je reprends l'exécution programme se bloque.
Apparemment, il existe un bogue dans GDB (https://www.mail-archive.com/[email protected]/msg149735.html) lié à un nom de thread, et il devrait être corrigé dans GDB version 7.11.1-1. Au début, j'utilisais GCC 5.1.0 (TDM) avec GDB 7.6.1, donc j'ai décidé de mettre à jour vers une version plus récente. Il semble que TDM ne fournisse aucune mise à jour depuis environ deux ans, j'ai donc installé MinGW-w64 (je ne m'en souviens pas maintenant, mais il pourrait s'agir de la version 7.11 de GDB). N'a pas aidé, GDB still se bloque.
Ensuite, j'ai recherché une version plus récente de GDB, et trouvé 7,12 (www équation point dot com/servlet/équation.cmd? Fa = gdb). N'a pas fonctionné, aussi, peut-être corriger n'a pas réussi à cette version.
Apparemment, ce bogue ne devrait être présent que dans la version x86 de GDB, j'ai donc installé la version x64 de TDM (GCC 5.1.0 et GDB 7.9.1). Le programme a bien été compilé, mais GDB capte toujours les signaux inconnus et les plantages du programme.
À l'heure actuelle, je ne peux effectivement déboguer aucun programme utilisant SDL2. Donc, la question est, que puis-je faire pour le faire fonctionner à nouveau?
solutions possibles:
- Utilisez Visual Studio - J'aime Eclipse (et cela signifie que j'ai commencé à tolérer des choses que je n'aime pas) et il ne veux pas vraiment apprendre tout nouveau IDE, mais je vais garder cela comme dernière option.
- Compiler GDB - essayé que, ne fonctionnait pas, compiler des choses sur Windows ne fonctionne presque jamais pour moi, et GDB 7.12 avait aussi ce bug.
- Passer à Linux - Option encore plus radicale que de passer à Visual Studio.
- Retour à SDL 1.2 - Les choses étaient plus faciles à l'époque ...
- Basculez vers n'importe quelle autre bibliothèque - ... et espérons qu'ils coopéreront avec GDB. Cela ne ressemble pas vraiment à une solution.
- Basculer vers un autre compilateur?
- Désactiver la dénomination de thread?
Exemple de code:
#include <SDL2/SDL.h>
// Normally I'd use #undef main
int WinMain(int, char**)
{
SDL_Init(SDL_INIT_EVERYTHING);
return 0;
}
Compilation: g ++ gdbtest.cpp -lSDL2main -lSDL2
SDL2 version: 2.0.5 (dernière version pour Windows, MinGW, version 32 bits)
Exécution normale: a.exe
Résultats: début du programme et se termine normalement
en cours avec GDB: Console log
Résultats: GDB reçoit un signal inconnu, le plantage programme
Il n'y a pas grand-chose à faire. Pouvez-vous poster un code minimal pour nous aider à comprendre? En savoir plus sur votre environnement - les bibliothèques exactes que vous avez utilisées, les arguments de la ligne de commande utilisés pour compiler et lier, etc ... – Leonardo
Terminé - le code est aussi minimal que possible. – crueltear