2017-08-15 2 views
0

Je tente de construire une recherche personnalisée dans exim, j'ai suivi les docs et bien les bases en place afin que mon code supplémentaire soit compilé et accroché, en plus d'être appelé. J'utilise le Makefile inclus avec Exim pour effectuer la construction et j'ai ajouté CFLAGS=-g -O0 pour m'assurer que j'ai des symboles de débogage.Les blocs de code ne s'arrêtent pas à tous les points d'arrêt

Les blocs de code, gcc, gdb et la source se trouvent tous sur ma machine Linux, dans laquelle je suis en train de passer et d'exporter la session X sur mon bureau Windows en utilisant XMing, je ne pense pas que le problème à noter. Maintenant, mon problème est que lorsque j'exécute le débogueur avec des points d'arrêt, C: B semble ne pas être paramétré ou gdb ignore les points d'arrêt dans mon code, mais en frappe ceux que j'ai dans la fonction main (j'ai ajouté un à la sortie, je pouvais lire la sortie d'exécution et prouver qu'ils travaillaient).

J'ai confirmé que mon code est en cours d'appel, il crache actuellement un message d'erreur, ce qu'il fait. Si j'ajoute un point d'arrêt sur cette ligne, il ne se déclenche pas, ni s'il est sur la fonction ou la première ligne de la fonction.

Ce qui est encore plus étrange (pour moi), c'est qu'auparavant ça fonctionnait! il a seulement cessé de fonctionner quand j'ai redimensionné le panneau C :: B du bas, ce qui a empêché une partie de l'écran de s'afficher (je pense que c'est un problème avec C: B et XMing). arrêter et redémarrer C :: B). J'ai donc quitté C :: B, l'ai redémarré, rechargé mon projet et depuis lors, les points de rupture dans mon code ne fonctionnent tout simplement pas, même si je peux prouver que le code est en cours d'exécution.

De plus, si j'ajoute manuellement le point d'arrêt, cela fonctionne comme prévu. J'ai mis un point d'arrêt dans C :: B au début de la main. Hit débogage, puis envoyé b mddfind_open (nom de ma fonction) dans gdb et appuyez sur continuer .. C :: B s'arrête à nouveau au début de cette fonction. Peut-être un peu bizarre avec la façon dont C :: B passe les points d'arrêt à gdb?

MISE À JOUR: Le projet sur lequel je travaille est Exim, qui lie le code dans le répertoire de construction (en raison d'un bug avec gcc 2.92.x et extern IIRC). Si j'ouvre le fichier à partir de cet emplacement dans C :: B et que je définis un point d'arrêt, cela fonctionne comme prévu. Je soupçonne que C :: B est en train de transmettre des références incorrectes à gdb?

Des idées?

+0

C'est donc un problème de blocs de code –

+0

Je pense qu'il se peut que dans ce cas, la façon dont le binaire est construit n'existe pas d'informations de chemin stockées avec les symboles. Donc, gdb cherche au mauvais endroit pour la source. L'ajout du sous-chemin dans les répertoires source l'a corrigé.Merci – Graeme

+0

Il n'a rien de commun avec la programmation. C'est un problème de configuration. Je vote pour CLOSE –

Répondre

0

Il semblerait que dans cette situation, j'ai besoin de spécifier le chemin source pour le fichier source en question, même si c'est dans le chemin de la source racine.

Au départ, j'ai eu mon chemin source GDB réglé sur:

/home/graeme/exim/src 

Le code en question vit à src/lookups, afin d'ajouter ce chemin fixe aussi le problème

/home/graeme/exim/src 
/home/graeme/exim/src/lookups 

je crois que cette situation est née Comme le code que je construis est initialement compilé dans une bibliothèque statique, cette bibliothèque est ensuite liée au programme principal lui-même. De tels symboles référencent la source des fichiers source de la bibliothèque situés au point où la bibliothèque a été compilée. Donc, dans ce cas, il y a plusieurs paquets en construction, et j'ai besoin de faire référence à chacun d'entre eux dans les chemins source.