Débogage des applications Appmethod C++ Windows 64 bits

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Développement d'applications Appmethod C++ Windows 64 bits


Le compilateur Appmethod C++ 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 Object Pascal 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 Appmethod C++ a ajouté le troisième pour les classes de style Object Pascal. 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.

Voir aussi