2009-07-29 5 views
14

Mon débogueur C# ne fonctionne pas correctement. Il saute des points de rupture et une ligne de codes parfois. J'ai vérifié le gestionnaire de configuration. J'ai même essayé d'ajouter mes projets à de nouveaux fichiers de solution. Quelqu'un peut-il m'aider s'il vous plaît?Pourquoi mon débogueur C# ignore-t-il les points d'arrêt?

+0

L'optimisation est-elle désactivée? Déboguer ou libérer? – Guillaume

+1

Qu'est-ce que c'est «parfois»? –

+0

comment puis-je vérifier l'optimisation ??? parfois signifie que chaque fois que j'utilise le débogueur, il passera après avoir passé quelques lignes –

Répondre

8

Assurez-vous que les optimisations sont désactivées (il s'agit du paramètre par défaut pour la configuration de débogage, mais elles sont activées dans la configuration de version). Les optimisations du compilateur peuvent jouer avec le débogueur ...

+0

comment puis-je ajuster l'optimisation du compilateur –

+0

Si vous utilisez Visual Studio: Cliquez avec le bouton droit de la souris sur le projet dans l'explorateur de solutions, puis sélectionnez l'onglet "Construire". Il devrait y avoir une case à cocher intitulée "optimiser le code". (Au moins, cela s'applique à VS 2005 et 2008. Je ne sais pas sur les versions antérieures). – Odrade

5

Etes-vous sûr qu'il a été compilé correctement? Il me semble que vous déboguez sur une version précédente, ce qui peut arriver si la construction échoue (peut-être un bug de code, peut-être que les fichiers sont en lecture seule).

+0

je compile des projets individuels dans la solution mais toujours le même problème –

1

Cela semble que votre code source n'est pas synchronisé avec les fichiers PDB. La solution la plus simple consiste à nettoyer la solution (qui supprime toutes vos DLL du dossier bin). Recompilez, puis réessayez.

En cas d'échec, essayez de fermer la solution et de supprimer les dossiers "obj". Et puis essayez à nouveau.

et aussi vérifier que vous compilez en mode débogage - quelque chose que je l'ai fait souvent (« pourquoi est-ce pas Parcourant ?! ») ne pas obtenir le point de rupture

+0

je l'ai essayé mais toujours le même problème –

23

Ma liste de contrôle de mise au point:

  • Assurez-vous que votre attachement au processus en utilisant le type de code correct - si le processus est à la fois non géré et le code managé alors ne compter sur « auto » pour travailler pour vous, indiquer explicitement ce que sorte de code que vous essayez de déboguer
  • Aller au modu les fenêtres (Debug -> Windows -> Modules, vous devrez peut-être l'activer dans le menu "Personnaliser ..."
  • Assurez-vous que l'assemblage que vous essayez de déboguer a été chargé, et que les symboles ont été chargés - s'ils n'ont pas été chargés, faites un clic droit sur ce module et sélectionnez "charger les symboles"
  • Ouvrez votre fichier de code et placez votre point d'arrêt - s'il apparaît avec le petit symbole d'avertissement, regardez et voyez ce qu'il dit,
  • Vous devrez peut-être aller à "tools -> options -> debugging -> général" et décochez "Activer juste mon code (géré seulement)"
  • Vous pouvez également désélectionner "Exiger des fichiers source pour correspondre exactement à la version d'origine" , si vous pensez que vos sources pourraient être minces TLY out (attention cependant, car cela peut conduire à le débogage avec complètement les mauvaises sources, ce qui peut être très déroutant)

Sur certains cas, vous trouverez peut-être que votre module ne soit pas chargé au point où vous attachez votre débogueur (par exemple si vous avez une sorte de plug dans archetecutre, et que les assemblys de plugins ne sont chargés que lorsque vous les utilisez pour la première fois). Dans ces cas, tout ce que vous pouvez faire est d'essayer de vous assurer que tout est prêt quand le module est chargé.

+0

Merci pour une réponse si détaillée. J'ai tout essayé mais j'ai toujours le même problème. –

+3

Désactiver "Just My Code ..." l'a fait pour moi. Merci. –

+0

Grande liste. M'a aidé. – Arnej65

1

Si des méthodes entières sont ignorées, examinez la source et vérifiez si l'attribut System.Diagnostics.DebuggerStepThroughAttribute est présent.

Malgré le nom, il empêche le débogueur de parcourir la méthode.

+0

non il saute un certain temps du milieu de la mathod et quelques fois complet mathod. –

+0

Brillant! Je pensais que je devenais fou quand une méthode personnalisée ajoutée à une classe générée à partir de XSD ne voulait pas déboguer. La raison en était que 'xsd.exe' décorait le code généré avec cet attribut. Les points d'arrêt créés avant F5 ont parfois été touchés, mais pas les nouveaux points d'arrêt, et pas toujours. – ajeh

1

Si au moins quelquefois le point d'arrêt est atteint, cela signifie que tous les paramètres sont probablement OK.Les occurrences manquantes peuvent être causées par des effets secondaires, par exemple: l'évaluation des propriétés par le débogueur (au moins VS ignore les points d'arrêt lors de l'évaluation des propriétés pour le débogueur) ou certains outils d'espionnage (mais ils sont généralement interceptés par le débogueur).

Si vous pensez que cela peut être le cas, éteignez les outils d'espionnage et disable the property evaluation by the debugger.

Cela peut parfois être insuffisant, par exemple: Si votre propriété renvoie une collection, l'affichage, par ex. un Count() évaluera la propriété - donc supprimer également toutes les références de propriété des fenêtres de surveillance, etc.

1

Cela a fonctionné pour moi dans VS 2017, allez dans Outils> Options puis dans la fenêtre Options, allez dans la section Débogage. Activer - "Activer le pas à pas source .NET Framework"

1

Désactiver "Propriétés du projet/Construire/Optimiser le code" a fonctionné pour moi.

Questions connexes