Bonjour,

Après avoir fait quelques recherches, il semble qu'il n'y ait aucun moyen documenté de récupérer le workspace (dans une optique de debuggage) au moment ou l'erreur est levée avant d'être rethrow. Seul le workspace au moment du rethrow est disponible.

Sur un exemple : comment récupérer le workspace de la fonction inner_ ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function test()
try;inner_();
catch ME; rethrow(ME);
end
end
function x= inner_()    % raises error
    x=[];x(1);
end
Je cherche donc une solution potentiellement sale. Je pense aux pistes suivantes. Est il possible de ?
- Sauvegarder (dans un fichier) automatiquement le workspace sur une erreur (avant le catch)
- Faire un catch conditionnel
- Ajouter une condition au mode "dbstop if caught error"
- Faire un peu d'introspection sur une instance MException (en espérant que matlab aie conservé le workspace initial quelque part, ce qui me semble de plus en plus douteux)
- Changer la classe de toutes les exception (y compris les natives de matlab) par une user-class qui implémenterait la solution
- Contourner par un moyen ou un autre le flot d'instruction (en particulier le catch qui semble détruire la stack originale).

Merci d'avance pour vos idées/réponses