Débogage des applications C++ Builder Windows 64 bits
Remonter à Développement d'applications C++ Builder Windows 64 bits
Sommaire
Le compilateur C++Builder Windows 64 bits (BCC64) génère des informations de débogage au format DWARF, différent du format utilisé par BCC32 et BCCOSX. Toutefois, en général, le débogage des applications Windows 64 bits est similaire au débogage des applications C++ Windows 32 bits. Il existe quelques différences, comme indiqué ci-dessous :
- Certaines fonctionnalités du débogueur ne sont pas prises en charge. Le débogage des propriétés, clôtures, méthodes de classe et autres extensions du langage Delphi n'est pas actuellement pris en charge.
- Par exemple, sur l'inspecteur d'objets, les onglets Méthodes et Propriétés ne sont pas affichés pour les applications C++ Windows 64 bits.
- Unicode, les pages de codes et la localisation ne sont pas complètement pris en charge.
- Par exemple, Unicode n'est pas pris en charge dans les noms des identificateurs et les pages de codes ne sont pas prises en charge par le débogueur C++ Windows 64 bits.
- Lors de l'évaluation d'un registre Windows 64 bits, le nom du registre doit être préfixé par $, comme par exemple
$rax
.- Voir Evaluer/Modifier.
- Les appels de fonctions qui déclenchent des exceptions sont gérés comme suit :
- Si une fonction contient un bloc try/except/catch et qu'une exception OS/SEH ou C++ est déclenchée lors de l'exécution, l'appel de fonction se termine correctement, mais le résultat est non défini ou vaut 0. Dans ce cas, le bloc d'exception interne n'est pas exécuté car l'exception est gérée directement par le débogueur.
- Si une fonction contient un bloc try/except/catch et qu'aucune exception OS/SEH ou de langage n'est déclenchée, l'appel de fonction se termine correctement et le résultat est correct, selon la fonction.
Différences relatives à la pile d'appels
L'affichage de certaines valeurs peut être différent dans les évaluateurs 32 bits et 64 bits. Par exemple, la pile d'appels est affichée sans paramètre de fonction et sans valeur.
La pile d'appels contient typiquement deux copies de chaque constructeur et destructeur. Par exemple, la pile d'appels peut contenir :
:0000000000401244 ; MyClass::~MyClass
:0000000000401229 ; MyClass::~MyClass
:0000000000401187 ; main
:000000000040ef90 ; _startup
- Remarque : Clang implémente l'Itanium ABI, qui décrit trois constructeurs et trois destructeurs qui effectuent un chaînage d'appels l'un envers l'autre. Toutefois, Clang n'a implémenté que deux des trois constructeurs, et C++Builder a ajouté le troisième pour les classes de style Delphi. Voir le Document Itanium ABI ou cette publication : http://stackoverflow.com/questions/6921295/dual-emission-of-constructor-symbols.
Evaluation d'appels de fonction tels que strcmp()
L'évaluation d'un appel de fonction tel que strcmp(str, "ABC") peut renvoyer une erreur comme suit :
#include <system.hpp> int main() { char *str = "ABC"; return strcmp(str, "ABC"); } error: 'strcmp' has unknown return type; cast the call to its declared return type error: 1 errors parsing expression
Dans la fenêtre Evaluer/Modifier, vous devez transtyper le type de retour pour strcmp() :
(int) strcmp(str, "ABC");
Voir strcmp, _mbscmp, wcscmp.