2009-09-03 8 views
1

J'ai un problème de débogage Invoke() ou BeginInvoke() dans Visual Studio 2008.Comment déboguer * Invoke() dans Visual Studio 2008

Par exemple, dans le code ci-dessous les pauses de débogage sur l'appel Invoke(). J'aurais aimé qu'il casse Console.WriteLine(p.ToString()); parce que c'est là qu'une exception est levée. Dans un code aussi simple que cela, ce n'est pas vraiment un problème, mais cela peut devenir vraiment ennuyeux dans un code plus complexe. (Avec BeginIvoke() les choses s'aggravent même parce que le débogueur se brise alors Application.Run(new Form1());)

Y at-il un moyen de faire déborder le débogueur à l'emplacement de l'exception d'origine?

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Invoke(new Action(MyMethod)); 
    } 

    private void MyMethod() 
    { 
     object p = null; 
     Console.WriteLine(p.ToString()); 
    } 
} 

Répondre

4

menu Debug> Exceptions> Cochez la case « Jeté » pour toute exception que vous voulez percer dans le débogueur au point où il est jeté.

0

Autre chose que vous pouvez faire, lorsque vous vous aventurez dans ce domaine de développement, est d'activer la fenêtre de débogage threading. Lorsque vous frappez des points d'arrêt et parcourez le code, notez les threads (vous pouvez même les nommer pour plus de clarté) pour vous aider à mieux comprendre ce qui se passe lorsque votre code s'exécute (et invoque). lorsque vous utilisez des threads d'arrière-plan, des temporisations, des événements, etc., et que vous devez les rappeler dans le thread d'interface utilisateur.