Ich habe Qt installiert, bekomme aber Fehler, wenn ich versuche, C++ - Code in QtCreator zu debuggen. Ich verwende Visual Studio 2017 unter Windows und es scheint, dass der von QtCreator benötigte Debugger (cdb.exe) nicht installiert ist. Wie kann ich das Debuggen für 64-Bit-Code in QtCreator konfigurieren, wenn ich den MSVC2017-Compiler verwende?
(Ich beantworte meine eigene Frage gemäß https://stackoverflow.com/help/self-answer . Schreibe eine bessere Antwort und ich ändere die akzeptierte Antwort auf deine!)
Was ich hier diskutiere, ist, QtCreator mit dem Compiler von Visual Studio 2017 (MSVC2017) zum Laufen zu bringen - einschließlich Debuggen! Bei einer Standardinstallation von MSVC2017 und Qt 5.10 können Sie Code kompilieren und ausführen, aber standardmäßig erhalten Sie keine Unterstützung für das Debuggen. Ich werde die notwendigen Schritte zeigen, um alles zu installieren (einschließlich Debugging-Unterstützung) für das folgende Referenzsystem:
Ich habe diese Schritte sowohl unter Windows 10 als auch unter Windows 7 (x64) getestet und es scheint zu funktionieren. Beachten Sie, dass die mit dem Qt-Installationsprogramm gelieferte Version von QtCreator die 32-Bit-Version ist und nicht sofort funktioniert, wenn Sie versuchen, das Debuggen mit MSVC durchzuführen. Dies ist dokumentiert, aber nicht schrittweise (siehe QtCreator Windows Debugging und QtCreator Debugger Engines ), und nicht alles befindet sich an einem Ort Hier finden Sie einfache Anweisungen, wie Sie das oben beschriebene Referenzsystem zum Laufen bringen.
Angenommen, Sie haben Win7/Win10 und MSVC2017 installiert, fangen wir an!
Installieren Sie das Windows SDK für Windows 10 - https://developer.Microsoft.com/en-us/windows/downloads/sdk-archive
Installieren Sie diese beiden Dateien (die x86-Version ist optional):
HINWEIS: Wenn Sie QtCreator NACH der Installation der Windows-Debugging-Tools installieren, erkennt QtCreator automatisch die Position der Debugger und erspart Ihnen so den Aufwand beim Erstellen der Kits. Wenn Sie QtCreator bereits installiert haben, können Sie die Kits in QtCreator wie folgt konfigurieren.
In der Sprache oder Terminologie von QtCreator ist ein "Kit" eine Kombination aus Debugger + Compiler + Qt-Version + anderen. (In diesem Sinne bedeutet das Wort "Kit" nicht dasselbe wie für "Windows Kits", als wir den obigen Debugger installiert haben. Dies ist eine unglückliche Namenskollision.) Richten Sie ein "QtCreator Kit" ein, indem Sie Extras - wählen. > Optionen -> Build Run. Ich beginne gerne ganz rechts und arbeite nach links, bis ich zu "Kits" komme. Der Grund dafür ist, dass alle Registerkarten (1, 2, 3) unten konfiguriert werden müssen, um ein vollständiges Kit zu erstellen.
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe
und geben Sie ihm einen Namen wie "Window Kit 10 cdb x64".Richten Sie den Compiler ein. Stellen Sie sicher, dass "Microsoft Visual C++ Compiler 15.0 (AMD64)" in der Liste enthalten ist. Beachten Sie, dass QtCreator diese Speicherorte automatisch erkennt, wenn Sie die Standardpfade verwendet haben. Fügen Sie den Pfad zum Compiler hinzu, wenn er nicht aufgeführt ist.
Beachten Sie, dass Sie für Visual Studio 2017 x64-Bit die "AMD64" -Version benötigen, bei der es sich um den 64-Bit-Compiler handelt. Falls Sie sich fragen, warum so viele Compiler aufgelistet sind - sie sind "Cross-Compiler". Das heißt, sie richten sich an unterschiedliche Architekturen. So ist beispielsweise "x86_AMD64" ein 32-Bit-Prozess, der eine 64-Bit-Anwendung erstellt. Sie würden diese Version verwenden, wenn Sie 64-Bit-Code auf einem 32-Bit-Computer entwickeln würden (daher der Begriff Cross-Compiling). Da in diesem Lernprogramm davon ausgegangen wird, dass Sie ein 64-Bit-Betriebssystem verwenden, verwenden Sie die AMD64-Version. (Der Cross-Compiler "x86_AMD64" generiert auch 64-Bit-Code.) Als ich zum ersten Mal die riesige Liste der Compiler-Auswahlen in QtCreator sah, wusste ich nicht, welche ich auswählen sollte. Jetzt weißt du es auch! Siehe Was ist der Unterschied zwischen "x86_AMD64" und "AMD64" beim Kompilieren von x64-Code? .
Lassen Sie uns Spaß haben und ein 64-Bit-Programm schreiben und es dann debuggen. Ein guter Test besteht darin, viel Speicher zuzuweisen (typische 32-Bit-Windows-Prozesse sind auf 2 GB beschränkt, siehe Wie viel Speicher kann ein 32-Bit-Prozess auf einem 64-Bit-Betriebssystem verwenden? ). Das Zuweisen von beispielsweise 32 GB RAM sollte ein positiver Indikator dafür sein, dass wir tatsächlich eine 64-Bit-Anwendung kompilieren. Hier ein Screenshot von QtCreator, der ein 64-Bit-Windows-Testprogramm debuggt:
Beachten Sie, dass ich den 64-Bit-Compiler MSVC2017 und den oben genannten Debugger CDB.exe verwende.
#include <QCoreApplication>
#include <cassert>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int intSize = sizeof(int);
assert(intSize == 4);
int intPtrSize = sizeof(int*);
assert(intPtrSize == 8);
constexpr size_t giga = 1000 * 1000 * 1000;
size_t _32gigs = 32 * giga / intSize;
int* gigaChunk = new int[_32gigs];
assert(gigaChunk != nullptr);
return a.exec();
}