2010-11-30 18 views
1

J'ai un gros problème avec l'utilisation de STL, C++ et Visual Studio. Quand j'utilise des fonctions std ou stl (dans la compilation de débogage), j'ai quelques erreurs comme celle-ci "Incorrect format specifier".Erreur de débogage dans STL

mais mon code est trop grand pour la "recherche manuelle" de cette erreur. Peut-être que l'on sait comment obtenir de l'aide pour trouver l'erreur, certains comme __FILE__ & __LINE__ pour affirmer? Parce que le code du programme est trop grand.

Ou try & catch mon dernier espoir? ...

par rapport Alex

+1

Le message d'erreur doit spécifier le fichier source et le numéro de ligne auquel il est associé ... –

+0

@Oli: Je pense que celui-ci provient du CRT et n'a pas d'informations de fichier/ligne. –

+0

Je ne comprends pas. Le compilateur ne donne-t-il pas le fichier et la ligne de toutes les erreurs de compilation? – Puppy

Répondre

0

Puisque vous avez le code source pour le TSL, ce que je ferais est mis un point d'arrêt au point où la " Spécificateur de format incorrect "chaîne est située. Faites un grep (par exemple, recherchez dans les fichiers) pour cette chaîne, définissez un point d'arrêt sur chacun d'eux, exécutez votre programme et espérez la mort. :)

+0

Oui, mais je dis ce que j'ai ce problème que dans d'autres PC (lorsque MSVC n'est pas attaché à mon programme). – Alex

+0

@Alex: Ah, alors votre problème est plus difficile. Vous aurez probablement besoin de recourir à une combinaison de débogage de sprintf, de débogage de fusil de chasse et de minidumps, ou peut-être de connecter WinDbg à la machine client. –

0

Peut-être que vous pourriez faire des messages d'état sur la console afin que vous obteniez une idée où l'erreur se produit. Vous pouvez rechercher dans cette partie plus détaillée avec la même technique. Faites-le aussi souvent que nécessaire. Après cela, vous pouvez déboguer votre programme et définir des points d'arrêt dans la 'zone à problème' et le parcourir.

EDIT: Si vous êtes capable de compiler le programme sous Linux, vous pouvez simplement installer et lancer valgrind memcheck. Il devrait imprimer toutes les erreurs avec le numéro de ligne.

+0

Seulement dans Windows Platform :(. Je sais à propos de valgring mais ...Je ne sais pas quoi que ce soit la même chose pour Windows que des projets anciens et arrêtés ou commerciaux – Alex

+0

Parce que votre code dépend de la plate-forme ou vous n'avez pas linux? Dans le dernier cas, vous pouvez essayer un live-cd (par exemple Ubuntu) et installer les progs nécessaires pendant l'exécution. – tbolender

0

Vous parlez de try/catch, donc je suppose qu'il lance une exception. Si vous exécutez votre application dans le débogueur, cela ne casse-t-il pas votre programme au point où l'exception non interceptée est lancée?

EDIT: Si vous pouviez alternativement compiler sous Linux/g ++, cela laisserait derrière un core avec un backtrace dans ce cas.

+0

Bien sûr, je vois la pile et mes erreurs et etc si je cours avec MSVC (débogage). Mais si je lance un programme dans un autre PC (sans mode de débogage mais avec une compilation de débogage) je ne vois rien, seulement une ligne d'erreur dans les fichiers internes. – Alex

0

La capture d'écran ci-jointe indique clairement que vous avez atteint une assertion d'exécution et offre même l'option de passer directement au dbugger. Cela vous amènera au callstack défectueux.

Ce message est le mode par défaut de _CrtDbgReport. Avec _CrtSetReportHook2, vous pouvez exécuter votre propre code avant l'impression de l'erreur. Vous pourriez créer un minidump, par exemple.