Contents Up Previous Next

Macros et fonctions de débogage

Macros et fonctions de débogage pour la vérification d'erreurs et la programmation défensive. wxWidgets défini trois familles de macros de style assert: les macros wxASSERT et wxFAIL ne font quelque chose que si __WXDEBUG__ est défini (en d'autres termes, lors d'une compilation debug), mais disparaissent complêtement dans une compilation release. D'autre part, les macros wxCHECK restent actives lors de compilations releases, mais un échec de vérification ne générera aucun effet visible à l'utilisateur. Finalement, les 'assertions' de compilation n'apparaîssent pas au moment de l'éxécution, mais résulteront en messages d'erreurs au moment de la compilation si la condition qu'elles vérifient échoue.

Fichiers à inclure

<wx/debug.h>

::wxOnAssert
wxASSERT
wxASSERT_MIN_BITSIZE
wxASSERT_MSG
wxCOMPILE_TIME_ASSERT
wxCOMPILE_TIME_ASSERT2
wxFAIL
wxFAIL_MSG
wxCHECK
wxCHECK_MSG
wxCHECK_RET
wxCHECK2
wxCHECK2_MSG
::wxTrap
::wxIsDebuggerRunning


::wxOnAssert

void wxOnAssert(const char *fileName, int lineNumber, const char *func, const char *cond, const char *msg = NULL)

Cette fonction est appelée chaque fois que l'une des macros de débogage échoue (par exemple, la condition est fausse dans une assertion). Elle est seulement définie en mode degub, en mode release, les échecs de wxCHECK ne feront rien du tout.

Pour surclasser le comportement par défaut dn mode debug, qui est d'afficher à l'utilisateur une boite de dialogue lui demandant s'il veut arrêter le programme, le continuer ou continuer en ignorant les échecs suivants, vous pouvez surclasser wxApp::OnAssertFailure qui est appelé par cette fonction si l'objet application global existe.


wxASSERT

wxASSERT(condition)

Macro de vérification. Un message d'erreur sera généré si la conditionest fausse en mode debug, mais rien ne se produira en mode release.

Notez que la condition dans wxASSERT() ne doit avoir aucun effet secondaire, car elle ne sera pas exécutée du tout en mode release.

Voir aussi

wxASSERT_MSG,
wxCOMPILE_TIME_ASSERT


wxASSERT_MIN_BITSIZE

wxASSERT_MIN_BITSIZE(type, size)

Cette macro va donner un échec de vérification au moment de la compilation si la taille du type type est inférieure à size bits.

Pour pouvez par exemple l'utiliser comme ceci:

    // we rely on the int being able to hold values up to 2^32
    wxASSERT_MIN_BITSIZE(int, 32);

    // can't work with the platforms using UTF-8 for wchar_t
    wxASSERT_MIN_BITSIZE(wchar_t, 16);

wxASSERT_MSG

wxASSERT_MSG(condition, msg)

Maccro de vérification avec message. Un message d'erreur sera généré si la condition est fausse.

Voir aussi

wxASSERT,
wxCOMPILE_TIME_ASSERT


wxCOMPILE_TIME_ASSERT

wxCOMPILE_TIME_ASSERT(condition, msg)

L'utilisation de wxCOMPILE_TIME_ASSERT donnera une erreur de compilation si la condition spécifiée est fausse. Le message d'erreur du compilateur doit inclure l'identifiant msg - notez qu'il doit s'agir d'un identifiant C++ valide et non d'une chaîne de caractères contrairement aux autres cas.

Cette macro est le plus souvent utile pour tester les expressions invoquant l'opérateur sizeof car elles ne peuvent être testées par le préprocesseur, mais il est parfois nécessaire de les tester au moment de la compilation.

Notez que cette macro déclare en interne une structure en essayant de lui donner un nom unique en utilisant __LINE__, mais il se peut que cela ne marche pas si vous l'utilisez sur la même ligne dans deux fichiers sources différents. Dans ce cas, vous devriez changer la ligne sur laquelle elles apparaissent ou utiliser la macro wxCOMPILE_TIME_ASSERT2.

Notez égalementq ue Microsoft Visual C++ contient un bug qui se traduit par des erreurs du compilateur si vous utilisez cette macro avec l'option 'Program Database For Edit And Continue' (/ZI), vous ne devriez donc pas l'utiliser('Program Database' (/Zi) est ok malgré tout) pour le code utilisant cette macro.

Voir aussi

wxASSERT_MSG,
wxASSERT_MIN_BITSIZE


wxCOMPILE_TIME_ASSERT2

wxCOMPILE_TIME_ASSERT(condition, msg, name)

Cette macro est identique à wxCOMPILE_TIME_ASSERT2 excepté qu'elle vouspermet de spécifier un nom (name) unique pour la structure définie en interne par cette macro, afin d'éviter les erreurs de compilation décrites ci-dessus.


wxFAIL

wxFAIL()

Générera toujours une erreur de vérification si ce code est atteind (en mode debug).

Voir aussi: wxFAIL_MSG


wxFAIL_MSG

wxFAIL_MSG(msg)

Générara toujours une erreur de vérification avec un message spécifié si ce code est atteind (en mode debug).

Cette macro est utile pour marquer des zones de code comme ne devant jamais être atteintes. Par exemple, elle peut être utilisée dans la branche "default:" d'une condition "switch" si tous les cas possibles sont traités avant.

Voir aussi

wxFAIL


wxCHECK

wxCHECK(condition, retValue)

Vérifie si la condition est craie, et retourne la valeur donnée si ce n'est pas le cas (FAIL en mode debug). Cette vérification est effectuée également en mode release.


wxCHECK_MSG

wxCHECK_MSG(condition, retValue, msg)

Vérifie que la condition est vraie, et retourne la valeur donnée si ce n'est pas le cas (FAIL en mode debug). Cette vérification est effectuée également en mode release.

Cette macro ne peut être utlisée que dans des fonctions "non-void", voir aussi wxCHECK_RET.


wxCHECK_RET

wxCHECK_RET(condition, msg)

Vérifie que la condition est vraie, et retourne si ce n'est pas le cas (FAIL avec message d'erreur donné en mode debug). Cette vérification est effectuée également en mode release.

Cette macro doit être utilisée dans les fonctions "void" à la place de wxCHECK_MSG.


wxCHECK2

wxCHECK2(condition, operation)

Vérifie que la condition est vraie et wxFAIL et exécute operation si ce n'est pas le cas. Il s'agit d'une généralisation de wxCHECK et peut être utilisé quand autre chose doit être fait que simplement retourner de la fonction quand la condition est fausse.

Cette vérification est faite même en mode release.


wxCHECK2_MSG

wxCHECK2(condition, operation, msg)

Idem que wxCHECK2, mais wxFAIL_MSG est appelée avec msg à la place de wxFAIL() si la condition est fausse.


::wxTrap

void wxTrap()

En mode debug (quand __WXDEBUG__ est défini), cette fonction génère une exception du débogueur signifiant que le contrôle est passé au débogueur s'il y en a un relié auprocessus. Sinon, le programme se termine juste anormalement.

Cette fonction ne fait rien en mode release.

Fichiers à inclure

<wx/debug.h>


::wxIsDebuggerRunning

bool wxIsDebuggerRunning()

Retourne true si le programme s'éxécute à partir d'un débogueur, sinon false.

Notez que cette fonction n'est actuellement implémentée que pour Win32 et Mac Please note that this function is currently only implemented for Win32 and Mac avec CodeWarrior et retourne toujours false dans les autres cas.