N° de bogue : CK1020 ou CK4009 rencontrés lors des informations de type dépassent 64 Ko

Traductions disponibles Traductions disponibles
Numéro d'article: 112335 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Symptômes

Génération d'une version de débogage d'une application contenant plus de 64 Ko d'informations sur le type index peut provoquer un ou plusieurs des messages d'erreur suivants, selon la version du programme CVPACK est utilisée :
Erreur irrécupérable du programme CVPACK : CK1020 : index de type compressée dépasse 65535 dans module <filename.obj>
Programme CVPACK : avertissement CK4009 : dépassement 64 Ko types... en supprimant des types suivants.
CVPACK.exe Erreur interne, code d'exception 0xc0000005.

Cause

Ces erreurs sont en partie en raison du fait symbolique type informations index de ce CodeView est une valeur 16 bits, ce qui provoque un dépassement de capacité si le nombre de types de symboles compressée dépasse 64 Ko.

Notez que CK4009 est une version de Visual C++ 1.0 (32 bits) et de remplacement de (16 bits) version 1.5 pour le message d'erreur CK1020 anciens. Avec CK1020, le packer a échoué et le programme ne peut pas être débogué. Avec CK4009, le packer n'échoue pas, mais ignore tous les types de nonprimitive ultérieures. Cela permettra au moins le programme à déboguer pour ces symboles dont les types n'ont pas été ignorés.

Résolution

Voici quelques éléments qui peuvent être effectuées pour réduire le nombre de symboles dans une application de façon à être débogué avec succès :
  1. Compiler uniquement les fichiers source dont vous avez besoin de déboguer avec /Zi et utilisez /Zd pour le reste. Cela réduira le nombre de symboles dans votre application. (Si vous utilisez du programmeur Deployment WorkBench (PWB) ou Visual Workbench, il nécessitera également vous permet d'utiliser un fichier Make externe, car la compilation n'est pas un module sélective au sein de ces outils.) Si vous choisissez de compiler avec/Zd, vous obtiendrez une prise en charge du numéro de ligne uniquement pour les modules. Avec un fichier de mappage de l'éditeur de liens, vous pouvez déterminer l'emplacement de vos symboles publics afin de pouvoir au moins visualiser vos données globales dans CodeView si nécessaire. Pour plus d'informations, consultez les articles suivants dans la base de connaissances Microsoft :
    48241Relation entre les adresses de fichier de mappage et l'emplacement dans la mémoire
  2. Si vous utilisez MFC avec Visual C++, essayez de régénérer les bibliothèques MFC avec le commutateur de /Zi à la place de/Z7. Cela va générer un fichier .pdb (base de données du programme) pour la bibliothèque entière contenant toutes les informations de type symbolique. Lors de la compilation des fichiers source, chaque fois que le compilateur génère des informations de type pour un nouveau symbole, il vérifie le fichier PDB pour voir si ce type est déjà présent. Si tel est le cas, le type n'est pas ajouté. À l'aide de ce processus, le montant total des informations de type est réduit en éliminant les types redondantes qui seraient présentes dans les fichiers .obj créés pour MFC (Microsoft Foundation Class) bibliothèques à l'aide / Z7. L'utilisation de /Zi provoque redondances être réduite avant le code packer s'exécute, ce qui permet le packer fonctionnent plus efficacement.
  3. Pour les projets Visual C++, compiler à l'aide de /FD pour spécifier un fichier .pdb unique pour votre application. Là encore, l'idée est de réduire le nombre de types en éliminant les redondances qui sont présents dans les applications de module multi avant l'exécution de la packer. Notez que cette opération est automatique si vous générez à partir de l'atelier Visual. Le fichier par défaut sera nommé MSVC.PDB: à l'aide de /FD vous permet de spécifier un autre nom. Étant donné que la valeur par défaut consiste à utiliser les fichiers PDB (ce qui élimine les informations redondantes), le problème est beaucoup moins susceptible de se produire. Pour activer l'utilisation de la base de données du programme, utilisez /Zi pas/Z7 lors de la compilation et de ne pas désactiver «Base de données d'un programme» dans l'environnement de développement intégré (IDE) (ou utilisez/PDB : NONE sur la ligne de commande).
  4. Dans la mesure du possible, pensez à élimination parmi les types plus complexes tels que les classes, structures, des enums et unions. Cela permettra de réduire la probabilité des types de manière redondante est incluse dans votre application.
  5. Compilez certains modules sans informations de débogage du tout. Si l'utilisation de Microsoft Foundation Classes, doit être vigilant ne pas pour mélanger les modules compilés avec _DEBUG et les modules compilés sans _DEBUG. Essayez de générer la bibliothèque MFC avec CODEVIEW = 0 ou CODEVIEW = 2 pour réduire la quantité d'informations symboliques (la valeur par défaut de DEBUG est "= 1", qui définit _DEBUG). Lorsque la bibliothèque de classe est générée avec CODEVIEW = 0, vous n'aurez pas n'importe quelle bibliothèque disponibles des informations de débogage. Les MFC déboguer les fonctions TRACE et ASSERT sera disponible, toutefois. Avec CODEVIEW = 2, certains composants de la bibliothèque seront générés avec les informations de débogage. Readme.txt dans\MFC\SRC explique comment chacune des options le, procédez en termes de limiter les informations de débogage disponibles pour la bibliothèque MFC. Plus d'informations peuvent également être trouvés dans l'annexe du «Guide de l'utilisateur de bibliothèques de classes» comme suit :
    Annexe B pour Visual C++ version 1.0 (16 bits)
    Annexe A pour Visual C++ version 1.5 (16 bits)
    Annexe B pour Visual C++ version 1.1 (32 bits)
  6. Une autre solution possible confirmée est liée aux en-têtes précompilés. Vous pouvez essayer de l'activation ou désactivation de l'utilisation des en-têtes précompilés, selon ce qui est actuellement pas utilisé et puis régénérez tout. Cela peut avoir des effets différents en fonction de l'utilisation de votre application des fichiers d'en-tête.

Statut

Microsoft a confirmé l'existence de ce problème dans le programme CVPACK utilitaire pour MS-DOS, versions 4.0, 4.1 et 4,26 et le programme CVPACK utilitaire pour Windows NT, version 4.25. Nous recherche ce problème et nous publierons de nouvelles informations dans la base de connaissances Microsoft dès que possible.

Plus d'informations

Le symbole et la spécification de type OMF nécessite que les informations de débogage symboliques être contenus dans deux tables émises par le compilateur (dans Visual C++ ces sont inclus dans les modules d'objet et le fichier .pdb). La première table est appelée $ $ SYMBOLS et décrit les symboles dans le fichier objet ; alors que la seconde est appelée $ $ TYPES et contient des informations sur les types de symboles. Par exemple, l'instruction "int i;"définit le symbole «i» de type «int». Il existe des champs dans les enregistrements des deux tables qui sont utilisés pour les index dans les enregistrements de l'autre table. En outre, il existe une troisième table d'informations symboliques qui sont générées par l'éditeur de liens et écrites dans le fichier exécutable. Cette table est appelée PUBLICS et contient les enregistrements de symbole pour chaque symbole public lors du traitement des fichiers de l'objet.

Du programme CVPACK sert à supprimer les informations de symbole et le type en double et réécrire les informations restantes dans un format optimisé pour le traitement CodeView. Les indices de type pour obtenir cette information restante ne doivent pas dépasser 64 K, car l'index lui-même est une valeur de 16 bits. Étant donné que cet index est une partie de la spécification, il ne peut pas être modifiée sans rompre les outils qui en dépendent, dont bon nombre sont fournis par les fournisseurs tiers.

Propriétés

Numéro d'article: 112335 - Dernière mise à jour: jeudi 23 octobre 2003 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft CVPACK for MS-DOS 4.0
  • Microsoft CVPACK for MS-DOS 4.10
  • Microsoft CVPACK for MS-DOS 4.26
  • Microsoft CVPACK Utility for Windows NT 4.25
  • Microsoft CVPACK Utility for Windows NT 4.27
Mots-clés : 
kbmt KB112335 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 112335
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Exclusion de responsabilité concernant les contenus obsolètes dans la Base de connaissances
Cet article concerne des produits pour lesquels Microsoft n'offre plus de support. Il est par conséquent fourni « en l'état » et ne sera plus mis à jour.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com