2010-07-21 2 views
0

Le scénario est: il existe une hiérarchie d'appels en profondeur et chaque appel renverra HRESULT. Si quelque chose de mal se produit, la fonction retournera S_FALSE ou S_ERROR, et si un appel renvoie une erreur, l'appelant retournera directement le code d'erreur. normalement toute la fonction retournera S_OK. Donc quand déboguer un problème, j'ai besoin de faire beaucoup d'essais, voir quel appel renvoie! S_OK, et aller plus loin, et continuer ... jusqu'à ce que je trouve l'endroit ultime qui provoque une erreur.Est-il en mesure de configurer un "point d'arrêt de données" sur la valeur de retour

Je me demande est-il capable de créer un « point d'arrêt données » sur la valeur de retour (EAX?) Donc, lorsque la valeur de retour a changé ou valeur de retour égale à une certaine valeur, le programme peut arrêter ...

Répondre

0

Pourquoi ne pas Affectez juste la valeur de retour à une variable, définissez une pause sur la variable quand elle est égale à une certaine valeur (c'est ce qu'on appelle un point d'arrêt conditionnel), et renvoyez juste la variable au lieu de retourner S_FALSE/S_ERROR/S_OK, etc.

ex:

public long yourFunc() { 
    long ret = S_OK; 

    if (someCondition) { 
     ret = S_ERROR; 
    } 
    return ret; // set a conditional breakpoint here, and put in 
       // a condition where ret != S_OK 
} 

EDIT
Si vous ne voulez pas/ne peut pas changer le code, vous pouvez consulter ce fil: Is it possible to set a conditional breakpoint at the end of a function based on what the function is about to return?

+0

Parce qu'il ya une hiérarchie d'appel profonde, par exemple, ret = some_other_function(); Si une autre erreur de retour de fonction se produit, je dois répéter ce processus à nouveau. S'il y a une fonction récursive traitant d'une structure de données arborescente, je dois répéter plusieurs fois ... Donc je demande s'il y a quelque chose comme un point d'arrêt de données sur la valeur de retour :) – superb

+0

Je ne comprends pas pourquoi vous devriez répétez le processus plusieurs fois si la récursivité est utilisée. Le point d'arrêt conditionnel se déclenche dès que la condition est remplie, quelle que soit la profondeur de la descente récursive. Quoi qu'il en soit, si vous ne voulez pas changer votre code, j'ai posté un lien connexe dans mon édition qui peut aider. Bonne chance :). – dcp

+0

le problème est que dans la méthode il ne retourne pas à un seul endroit, beaucoup de morceau de code ressemble à: hr = some_call (...); if (FAILED (hr)) renvoie hr; Donc, le point d'arrêt conditionnel ne fonctionnera pas .... Je vais vérifier le lien que vous avez posté .. – superb

Questions connexes