2009-07-17 5 views
2

Le point d'arrêt de débogage fonctionne correctement dans les 38 autres unités de mon système. Mais, dans mon DataModule, qui a + - 10.000 lignes, Delphi désactive alors après le lancement par F9/F8/F7. Dans toute partie de la source de cette unité, même sur des étapes obrigatoires comme OnCreate, SQLConnection.Active:=true, etc. Détail: fonctionne bien jusqu'à + - 20 jours auparavant. J'utilise D7 et j'ai aussi toutes les sources de composants. Merci FelipeLe point d'arrêt de débogage ne fonctionne pas uniquement dans l'unité DataModule - Delphi

+0

Bonjour à tous! J'ai découvert ce problème. C'est un comportement bizarre dans Delphi7 qui limite le nombre de champs dans la section de classe d'interface, entre: type TDM = classe (TDataModule) et section privée. J'ai supprimé certains champs (DataSet Fields (+ -40 champs)) et degub s'exécute à nouveau. J'ajoute à nouveau ces champs, et le débogage ne s'exécute pas. Je suis sûr que c'est une limite, car elle ne détermine pas les champs de composants que j'ai supprimés. J'ai essayé avec plusieurs, en ajoutant, en testant et en supprimant.C'est dommage, mais vrai ... Merci pour votre aide. – Felipe

Répondre

0

J'ai découvert ce problème. C'est un comportement bizarre dans Delphi7 qui limite le nombre de champs dans la section de classe d'interface, entre: type TDM = classe (TDataModule) et section privée. J'ai supprimé certains champs (DataSet Fields (+ -40 champs)) et degub s'exécute à nouveau. J'ajoute à nouveau ces champs et le débogage ne s'exécute pas. Je suis sûr que c'est une limite, car elle ne détermine pas les champs de composants que j'ai supprimés. J'ai essayé avec plusieurs champs, à partir de différentes tables aussi, en ajoutant, en testant et en supprimant. C'est dommage, mais c'est vrai ... Merci pour votre aide.

4

Essayez de faire une construction complète (Maj + F9). Si cela ne fonctionne pas, alors que se passe-t-il si vous simulate a breakpoint in code avec le ci-dessous?

asm int 3 end; 
+1

Et si plus tard vous exécutez votre application et obtenez une "Exception non gérée 80000003", c'est parce que vous avez oublié de supprimer l'instruction ci-dessus. :-) Été là, fait ça, a usé le t-shirt. –

4

Vérifiez plusieurs copies de votre fichier source pour le module de données. Parfois, le code que vous pensez exécuter n'est pas le code que le compilateur et le débogueur voient.

Ensuite, assurez-vous que vous n'avez pas accidentellement désactivé le débogage dans votre code avec {$ D-} ou {$ DEBUGINFO OFF}. Cela peut désactiver les informations de débogage pour une seule unité.

Assurez-vous également que vous avez activé le débogage intégré dans Outils | Options | Options du débogueur. Je sais que vous avez dit que vous pouviez déboguer d'autres endroits, mais ça ne peut pas faire de mal de s'assurer que le débogage intégré n'a pas été désactivé accidentellement.

+0

Merci. Mais, il n'y a qu'une seule copie de ce fichier. Déjà trouvé et effacé tous les dcu et recompiler à nouveau. Déjà écrit {D +} directement dans le code source de cette unité et du fichier source du projet. – Felipe

+0

Avez-vous recherché votre nom de fichier sur votre disque dur? Et avez-vous cherché toutes les sources pour le commutateur tournant le débogage, cependant? Je doute que la taille du fichier soit le problème, car j'ai une bibliothèque de composants qui contient un fichier de fonctions utilitaires de 9000 lignes et que je peux déboguer correctement. –

+0

Oui. J'ai utilisé Windows File Search et trouvé chaque copie avec le même nom et les ai supprimés. J'ai fait quelques "codes sources erreurs" et recompiler pour vérifier quel fichier est utilisé et l'erreur du rapport du compilateur comme prévu. Toutes les autres unités du même projet exécutent des points d'arrêt de débogage corrects – Felipe

0

Il existe un article de blog de Steve Trefethen, a while back, explaining some possible reasons, bien que si vous dites que vous pouvez déboguer d'autres unités, je doute qu'elles s'appliquent. Nous avons eu le même problème avec un DataModule volumineux dans Delphi 5 qui ne nous permettait pas de le déboguer, et de le mettre comme un trop gros fichier à déboguer et Delphi ne l'aimait pas. Quand nous sommes passés à Delphi 2007, nous pouvions le déboguer à nouveau. Je ne sais pas pourquoi, rien n'a changé (code sage).

+0

Merci. J'ai lu cet article maintenant et fait quelques tests. Même comportement Je vais essayer d'enlever du code à d'autres unités et réessayer. – Felipe

0

Felipe, est l'unité qui ne vous permettra pas de déboguer dans une DLL qui est déplacée dans ou hors de la mémoire? J'ai trouvé lors du débogage dll que si je fais quelque chose dans l'exécutable qui exécute le code dans une autre DLL ou décharge la DLL dans laquelle l'unité de problème est - Delphi va désactiver tous les points d'arrêt. Habituellement, un redémarrage de Delphi et être sûr de garder une seule instance de la DLL de l'unité à problème dans la mémoire est la seule solution pour ce problème.

Je doute de taille est le problème, car j'ai une unité de ligne 17k que je débogue régulièrement.

+0

Merci Doug. Mais, je n'utilise pas de DLL ou BPL. J'ai toutes les sources de tous les composants. Ce problème se produit uniquement dans un DataModule de tout le code de programme. – Felipe

0

J'ai un vague souvenir que le débogage de très gros fichiers était buggé dans l'ancien D7. Essayez de vous casser une grande unité dans plusieurs classes et se si vous pouvez déboguer à l'extérieur de votre unité. Une autre option pourrait être de désactiver debuginfo dans votre gros fichier sauf la section que vous voulez déboguer. Cela vaut la peine d'essayer.

+0

Merci. J'essaye ceci maintenant. Quand j'aurai des résultats, je posterai. – Felipe

Questions connexes