none
StackOverFlowException Visual Studio 2010 en mode debug RRS feed

  • Question

  • Premièrement je n'ai pas une boucle infinie.

    J'utilise une dll que je declare avec [DLLImport]. Lorsque je met le target du framework sur 3.5 cela fonctionne très bien mais dès que je passe en 4.0 en mode debug, j'ai une StackOverFlow que je ne peux pas catcher. Par contre, si je démarre avec "Demmarer sans le deboggueur" je n'ai pas de problème. Le problème avec ce mode c'est que les point d'arrête ne fonctionne plus ?

    jeudi 24 février 2011 21:45

Toutes les réponses

  • Bonjour,

    L'erreur StackOverFlow intervient en général lorsque une variable dépasse la capacité de mémoire allouée.
    Par exemple lorsqu'on essaye de mettre 256 dans un System.Byte et donc pas uniquement en cas de boucle.

    Par défaut, le compilateur de .net ne génère pas d'exception de dépassement de pile, c'est une option qu'il faut activer dans les options du projet.

    Cependant, je pense que ton problème vient d'un problème de transtypage entre les types managés (.net) et les types natifs (dll). Ainsi, un int en C++ est un type 16 bits alors qu'en .net c'est un type 32 bits. Il faut donc vérifier tout cela.


    Sebastien FERRAND MVP C# (2004-2009) http://www.sfphotographie.fr
    vendredi 25 février 2011 09:25
  • Merci pour taréponse

    Ce que je m'explique mal c'est que cela fonctionne très bien en 3.5 et ne fonctione pas en 4.0.

    extern "C" __declspec(dllexport) long __stdcall Disconnect ();

     

     

     

    que j'ai traduit en C#

    [

     

    DllImport("SmartDll.dll",CallingConvention=CallingConvention.StdCall)]

    public static extern Int32 Disconnect ();

     

     

     Comment expliquer que l'exception n'est pas déclencher quand je fais (CTRL +F5) -->"Demmarer sans le deboggueur"

    Est-ce qu'il y a une différence sur le marshalling entre 3.5 & 4.0. Notez que j'ai utilisé <NetFx40_PInvokeStackResilience> sans aucun resulat http://msdn.microsoft.com/fr-fr/library/ff361650.aspx

     

    vendredi 25 février 2011 14:58
  • Voici une discussion que j'ai trouvé sur le sujet : http://social.msdn.microsoft.com/Forums/is/vsdebug/thread/9b442720-eed1-4ca3-9dd7-acb292fe677f?prof=required

    Sans aucune solution. Est-ce que cela pourrait s'agir d'un BUG ?

     

     

     

    vendredi 25 février 2011 15:01
  • il semble en effet que ce soit un bug.

    Toutefois, je te conseille de regarder les options de compilation de ton projet (dans Properties/Build/Advanced) : vérifie si la case "Check for arithmetic overflow/underflow" est coché en Debug et Release. Ca pourrait expliquer la différence de comportement.

    Ensuite vérifie dans la fenêtre "Exceptions" du menu "Debug" que la colonne "Thrown" est bien décochée pour l'exception "Win32 Exceptions / c00000fd Stack overflow".

     


    Sebastien FERRAND MVP C# (2004-2009) http://www.sfphotographie.fr
    vendredi 25 février 2011 15:08
  • J'ai vérifié les options et j'ai coché ce que tu m'a dit et toujours le même résulat !

    Le comportement n'est pas différent que je contruise le projet en "Debug" ou "Release".

    La différence est quand je démarre "Start Without Debugging" (CTRL + F5) ou que j'execute le EXE directement dans le fichier BIN/Debug/ xxx.exe. Je n'ai pas de problème avec les deux facon que je viens d'énumerer.  

    Je me suis monté une nouvelle machine avec la SP1 Beta et j'ai toujours le problème avec ou sans SP1

    Si cela serait un BUG il me semble qu'il serait documenter ? et que la SP1 beta corrige ce Bug !

    Quand pense-tu ?

     

    vendredi 25 février 2011 15:45
  • je pense que ton problème vient du fait que le debugger est attaché à l'instance.
    Le Ctrl+F5 exécute ton projet sans debuggeur.

    Il est possible que ce soit un bug... mais pas de visual studio... c'est surement le debuggeur.


    Sebastien FERRAND MVP C# (2004-2009) http://www.sfphotographie.fr
    vendredi 25 février 2011 15:48
  • Et bien !

    Dans ce cas s'il s'agirait d'un bug avec le déboggueur. Il faut tenir en compte que lorsque je cible le Framework 3.5. Le problème n'est pas présent ?

    Je crois qu'i faudrait que je rentre en contact avec Microsoft dans ce cas ?

     

    vendredi 25 février 2011 16:01
  • je ne peux pas t'en dire plus... ce ne sont que des suppositions.
    Sebastien FERRAND MVP C# (2004-2009) http://www.sfphotographie.fr
    vendredi 25 février 2011 19:42
  • Bonjour,

     

    Si vous suspectez un bug, vous pouvez ouvrir un billet sur Microsoft Connect et donner les détails pour la réplication de votre projet et les erreurs rencontrés.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, SharePoint, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     


    Suivez MSDN sur Twitter 

    samedi 26 février 2011 22:50