erreur de segmentation uniquement lorsque vous n'utilisez PAS de débogueur

J'ai un multithread C programme, qui génère systématiquement une erreur de segmentation à un point spécifique dans le programme. Quand je le lance avec gdb, aucun défaut n'est indiqué. Pouvez-vous penser à une raison pourquoi la faute peut se produire uniquement lorsque vous n'utilisez pas le débogueur? C'est assez ennuyeux de ne pas pouvoir l'utiliser pour trouver le problème!!!!

  • Ce genre de bug est appelé "Heisenbug" et peut avoir de nombreuses causes.
  • Le message d'erreur arrive d'être lié à la fenêtre de gestion et/ou User32.dll?
  • J'ai eu un problème comme ça, mon programme ne s'est écrasé à l'aide de GDB. Le problème est unintialized variable de membre de classe a été toujours obtenir la valeur 0 quand j'ai couru mon programme, mais quand je l'ai couru dans GDB, il avait une énorme valeur segfaulted quand je l'ai utilisé comme un index de tableau.
  • Ne pas les fenêtres liées - j'utilise Linux 2.6.32-24-generic #43-Ubuntu.
  • Avez-vous essayé d'organiser un core dump? Exécuter ulimit -c unlimited avant de commencer le programme à l'extérieur du débogueur, puis gdb myprogram core après il dumps noyau. gdb va alors être en mesure de post mortem votre erreur de segmentation.
  • Ce qui se passe à ce moment précis dans le programme? Êtes-vous tenter la déférence d'un pointeur? Appeler une autre fonction? Quoi?

InformationsquelleAutor Benubird | 2011-01-07