2010-07-20 5 views
1

J'ai une DLL Delphi 2010 très simple que je charge à partir d'une application de console Vislual Studio 2008 C ATL (l'application graphique MVF ne fonctionne pas non plus). Lorsque je débogue directement l'application de console à partir de l'EDI - pas de points de rupture - la sortie de l'application n'est pas correcte mais quand j'exécute l'application directement ou si j'attache au processus avec le débogueur alors cela fonctionne à 100%. Le débogage de la même DLL à partir d'une application de console Delphi (c'est-à-dire en l'exécutant depuis l'IDE) fonctionne également.Le débogueur VS2008/2010 change le comportement de l'application

Le débogueur VS semble rompre l'application en fonction de la façon dont vous l'exécutez. VS2010 fait la même chose!

Je suis sûr à 100% - plusieurs fois! - que les types de données et la convention d'appel des exportations dll et ceux de l'application console correspondent. Je peux entrer dans plus de détails, mais je ne veux pas confondre la question avec ce qui peut être une information non pertinente. S'il vous plaît dites-moi si je dois entrer dans les détails du code si ce que j'ai offert n'est pas suffisant.

Est-ce que quelqu'un a connu ce genre de chose et sait comment y remédier?

+0

Gerhard, avez-vous vérifié les problèmes de parallélisation/conditions de course? (est-ce une application multithread?). En outre, vous ciblerez probablement une meilleure audience si vous étiez tagué avec delphi/dll etc. –

+0

Il s'agit d'une application à un seul thread. –

+1

Quelle est la différence entre la sortie des deux cas? Les débogueurs changent toutes sortes de choses; le timing sera différent à coup sûr, mais d'autres choses pourraient être différentes aussi. Nous avons besoin de quelques informations supplémentaires de votre part pour avoir une idée de la direction dans laquelle le comportement diffère. –

Répondre

0

J'ai un problème similaire une fois (comportement différent dans IDE/débogueur et dans une application autonome). Il s'est avéré que j'ai vérifié la valeur de la variable non définie. Le débogueur l'a alloué (toujours!) Dans un bloc de mémoire précédemment utilisé, de sorte que la valeur n'était pas vide et que l'application fonctionnait correctement (car seul le bloc conditionnel était erroné). Cependant, OS parfois mis l'application dans le bloc de mémoire vide (rempli avec 0s), la condition a échoué et l'application s'est écrasée.

Peut-être que c'est le problème? Essayez d'utiliser OutputDebugString() pour rechercher les valeurs des variables pendant l'exécution de la bibliothèque. Sans code source, je crois que ce n'est pas facile à dire, quelle en serait la raison.

Meilleures salutations - Spook.

Questions connexes