2016-08-03 20 views
1

Ich verwende Visual Studio 2015 Update 3 und ich habe eine sehr einfache reine Win32-Konsole C++ "Hello World" wie diese, die keinen anderen Zweck dient als experimentieren:Kann nicht in CRT-Code Schritt verwenden, wenn Laufzeitbibliothek als dll

int main() 
{ 
    printf("Hello world"); 
    char *test = (char*)malloc(100); 
} 

ich in malloc nicht treten kann, wenn das Projekt die Multi-Thread-DLL-Laufzeitbibliothek (Projekt Eigenschaften-> Konfiguration Eigenschaften-> C/C++/verwendet -> Laufzeitbibliothek: Multithreaded-Debug-DLL (/ MDd)).

Aber wenn ich diese Einstellung in Multithread-Debug (/ MTd) ändern, dann funktioniert Steping in malloc funktioniert gut.

Aber stepping info printf funktioniert immer gut. Der Einstieg in meinen eigenen Code funktioniert immer auch.

Gibt es eine Möglichkeit zum Aktivieren der DLL für die Laufzeitbibliothek?

+1

Diese DLL wurde von Microsoft erstellt, Sie haben nicht die PDB dafür. Sie müssen den Symbolserver von Microsoft aktivieren, indem Sie ihn aktivieren. Extras> Optionen> Debugging> Symbole. Funktioniert gut für Update 2, nicht sicher über 3, ich werde die große Anzahl von Fehlern in diesem Update warten. –

+0

@HansPassant Ich habe es gerade ausprobiert, aber "Microsoft Symbol Servers" wurde bereits überprüft, und das würde nicht erklären, warum "printf" funktioniert, aber nicht "malloc". BTW Ich habe gestern Update 2 installiert, aber nachdem die Installation abgeschlossen war, stellte sich heraus, dass es tatsächlich Update 3 war. Ich habe nicht versucht, mit früheren Versionen von VS in 'malloc' zu treten. –

+0

Malloc() befindet sich in einer anderen DLL, ucrtbased.dll. Das hätte sich nicht ändern sollen, ähm. Verwenden Sie Debug> Windows> Module, und sehen Sie in der Spalte Symboldatei nach, wo sich die PDB befindet. Löschen Sie es, damit es eine neue Kopie herunterladen muss. –

Antwort

5

Beim Erstellen der Symbole für ucrtbased.dll Build 10.0.10240.0 auf dem Symbolserver ist ein Fehler aufgetreten. Die nicht entfernten Symbole (mit Quellinformationen) wurden ursprünglich auf dem Symbolserver veröffentlicht, wurden aber später überschrieben, als die entfernten Symbole veröffentlicht wurden.

Wir haben dieses Problem behoben und die nicht entfernten Symbole erneut veröffentlicht. Wenn Sie jetzt versuchen, Symbole für diese DLL vom Symbolserver herunterzuladen, sollten Sie die nicht entfernten Symbole erhalten.

Wenn Sie die abgestreiften Symbole bereits heruntergeladen haben, müssen Sie sie aus Ihrem Symbolcache löschen, damit der Debugger die nicht entfernten Symbole erneut herunterladen kann. Wechseln Sie in Visual Studio zu Extras => Optionen, Debuggen => Symbole. Dort ist ein Textfeld, "Cache-Symbole in diesem Verzeichnis". Schließen Sie Visual Studio. Öffnen Sie dieses Verzeichnis im Windows Explorer und suchen Sie nach "ucrtbased". Löschen Sie alle PDB-Dateien, für die die Suche angezeigt wird.

+0

Dieses Problem scheint für die CRT-Version 10.0.10240.16384 zurückgegeben worden zu sein. Und macht das Debugging sehr schwierig. –

1

Installieren Sie Windows 10 SDK (es wird auch ucrtbased.dll in System32 als Nebeneffekt aktualisieren).

+0

Es funktioniert auch ohne das Ziel auf "Windows 10" wie hier zu ändern: ["Wie: Verwenden des Windows 10 SDK in einer Windows Desktop-Anwendung"] (https://msdn.microsoft.com/en-us/library/ mt186161.aspx). – Liviu