Fehler: CK1020 oder CK4009 festgestellt bei Typinformationen 64 KB überschreitet

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 112335 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Erstellen einer Debugversion von eine Anwendung mit mehr als 64 KB Indexinformationen Typ kann verursachen, mindestens eine der folgenden Fehlermeldungen angezeigt, je nachdem, welche Version von CVPACK eingesetzt wird:
CVPACK: Schwerwiegender Fehler CK1020: gepackte Typ Index überschreitet 65535 in Modul <filename.obj>
CVPACK: Warnung CK4009: 64 KB Typen... überschritten nachfolgende Typen verworfen.
CVPACK.exe Interner Fehler, Ausnahmecode - 0xc0000005.

Ursache

Diese Fehler sind aufgrund teilweise die Tatsache, dass Codeansicht symbolische Typ Informationen Index ein 16-Bit-Wert, ist, der Überlauf, verursacht Wenn die Anzahl der gepackte Symboltypen 64 KB überschreitet.

Beachten Sie, dass CK4009 eine Visual C++ Version 1.0 (32-Bit) und Version 1.5 (16-Bit) Ersatz für die älteren CK1020 Fehlermeldung ist. Mit CK1020 die Packer konnte, und das Programm konnte nicht debuggt werden. Mit CK4009 die Packer schlägt nicht fehl, sondern verwirft alle nachfolgende nonprimitive Typen. Dies ermöglicht mindestens das Programm für diese Symbole gedebuggt werden, deren Typen verworfen wurden.

Lösung

Hier sind einige Dinge, die ausgeführt werden können, um die Anzahl von Symbolen in einer Anwendung zu reduzieren, so dass er erfolgreich debuggt werden kann:
  1. Kompilieren Sie nur Quelldateien, die Sie mit/Zi debug und/Zd für den Rest verwenden müssen. Dies verringert die Anzahl der Symbole in Ihrer Anwendung. (Bei Verwendung von Programmer's WorkBench (PWB) oder Visual Workbench, es darüber hinaus müssen Sie ein externes Makefile verwenden da Kompilierung nicht innerhalb dieser Tools ausgewählte Modul ist.) Wenn Sie die Kompilierung mit/Zd, erhalten Sie die Zeile Nummer Unterstützung nur für die Module. Mit einer Map-Linker Datei können Sie den Speicherort der Ihre öffentlichen Symbole ermitteln, so dass Sie mindestens Ihren globalen Daten in der Codeansicht anzeigen können bei Bedarf. Weitere Informationen finden Sie in der folgenden Artikel der Microsoft Knowledge Base:
    48241Beziehung zwischen Map File-Adressen und Speicherort im Speicher
  2. Wenn Sie mit Visual C++ MFC verwenden, versuchen Sie es Neuerstellen der MFC-Bibliotheken mit der Befehlszeilenoption/Zi anstelle von/Z7. Dies erstellt eine PDB (Program Database)-Datei für die gesamte Bibliothek, die alle die symbolischen Typinformationen enthalten wird. Beim Kompilieren der Quelldateien, überprüfen generiert der Compiler Typinformationen für ein neues Symbol jedesmal, wenn es die PDB-Datei, ob dieser Typ bereits vorhanden ist. Wenn dies der Fall ist, wird der Typ nicht hinzugefügt. Mithilfe dieser Prozess der Gesamtbetrag der Typinformationen wird reduziert durch die Beseitigung redundanter Typen, die andernfalls in die für die Microsoft Foundation Class (MFC) erstellten .OBJ-Dateien vorhanden sein würde Bibliotheken/Z7 verwenden. / Zi wird Redundanzen reduziert werden, bevor der Packer Code ausgeführt wird die Packer effizienter arbeiten können.
  3. Kompilieren Sie für Visual C++-Projekte mit/Fd eine einzelne PDB-Datei für Ihre Anwendung angegeben. Reduzieren Sie die Anzahl der Typen, indem Sie vermeiden von Redundanzen, die in mehreren Modul Anwendungen vorhanden, sind bevor die Packer führt ist das Konzept hier wieder. Beachten Sie, dass dies automatisch, wenn Sie von Visual Workbench erstellen ist. Die Standarddatei wird MSVC.PDB heißen: mit/Fd können Sie einen alternativen Namen angeben. Da der Standardwert ist PDB-Dateien (die redundanten Informationen entfällt) verwenden, ist das Problem weniger wahrscheinlich. Verwenden, um die Verwendung der PDB zu aktivieren/Zi nicht Z7 beim Kompilieren und nicht ausschalten "Programmdatenbank" in der IDE (oder verwenden Sie/PDB: NONE in der Befehlszeile).
  4. Sollten Sie wenn möglich, einige der komplexeren Typen wie Klassen, Strukturen, Enumerationen und Unionen eliminieren. Dadurch verringert sich die Wahrscheinlichkeit für die Typen redundant in Ihrer Anwendung eingeschlossen werden.
  5. Kompilieren Sie einige Module ohne Debuginformationen Informationen überhaupt. Wenn die Microsoft Foundation Classes verwenden, muss darauf geachtet werden nicht, um mit _DEBUG und ohne _DEBUG kompilierten Modulen kompilierte Modulen zu mischen. Versuchen Sie es Erstellen der MFC-Bibliothek mit CODEVIEW = 0 oder CODEVIEW = 2, verringern Sie den symbolischen Informationen (der Standardwert für DEBUG ist "= 1", die _DEBUG definiert). Wenn baut-Klasse Bibliothek mit CODEVIEW = 0, Sie haben keine Bibliothek Debuginformationen verfügbar. MFC-Funktionen TRACE- und ASSERT Debuggen wird weiterhin, jedoch verfügbar. Mit CODEVIEW = 2, einige Komponenten von der Bibliothek mit Debuginformationen erstellt. Readme.txt in\MFC\SRC wird erläutert, welche einzelnen der tun Optionen hinsichtlich der Begrenzen der Debuginformationen für die MFC-Bibliothek verfügbar weiter. Weitere Informationen sich auch befindet im Anhang "Class Libraries User's Guide" wie folgt:
    Anhang a für Visual C++, Version 1.0 (16-Bit)
    Anhang A für Visual C++ Version 1.5 (16-Bit)
    Anhang a für Visual C++, Version 1.1 (32-Bit)
  6. Eine andere nicht bestätigte mögliche Lösung bezieht sich auf vorkompilierte Header. Aktivieren Sie versuchen, möglicherweise oder deaktivieren die Verwendung von vorkompilierten Headern, derzeit nicht verwendet wird und dann neu erstellen ist alles. Dies kann unterschiedliche Auswirkungen je nach auf die Verwendung von Headerdateien in Ihrer Anwendung haben.

Status

Microsoft hat dies ein Problem in CVPACK-Dienstprogramm für MS-DOS, Versionen 4.0, 4.1 und 4.26, und CVPACK-Dienstprogramm für Windows NT, Version 4.25 bestätigt. Dieses Problem wird derzeit untersucht, und entsprechende Informationen werden hier in der Microsoft Knowledge Base veröffentlicht, sobald sie verfügbar sind.

Weitere Informationen

Die Symbol und OMF Typspezifikation erfordert, dass symbolischer Debuginformationen enthalten sein, in zwei Tabellen durch den Compiler (in Visual C++ diese in die Objektmodule-und die PDB-Datei enthalten sind) ausgegeben. Die erste Tabelle $ $ SYMBOLS aufgerufen, und beschreibt die Symbole in der Objektdatei; während die zweite $ $ TYPES aufgerufen wird und Informationen zu den Symboltypen enthält. Die Anweisung z. B. "Int i,"definiert das Symbol "i" Typ"Int". Es gibt Felder in den Datensätzen der beiden Tabellen, die verwendet werden zum Index in die Datensätze der anderen Tabelle. Darüber hinaus ist eine dritte Tabelle von symbolischen Informationen, die vom Linker generiert und in die ausführbare Datei geschrieben wird. In dieser Tabelle PUBLICS aufgerufen wird und die Symbol-Datensätze für jedes Öffentliche während der Verarbeitung der Objektdateien Symbol enthält.

Zweck des CVPACK besteht darin, doppelte Symbol und geben Informationen entfernen, und Schreiben Sie die weiteren Informationen in einem Format für die Codeansicht Verarbeitung optimiert. Die Typ-Indizes für diese verbleibenden Informationen darf 64 KB nicht überschreiten, da der Index selbst ein 16-Bit-Wert ist. Da dieser Index Teil der Spezifikation ist, kann nicht es geändert werden, ohne die Tools abhängen, von die viele von Drittanbietern bereitgestellt werden.

Eigenschaften

Artikel-ID: 112335 - Geändert am: Donnerstag, 23. Oktober 2003 - Version: 2.0
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt KB112335 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 112335
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Disclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.

Ihr Feedback an uns

 

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