Y a-t-il une macro qui le fait? Quels objets DTE utiliser?Comment mettre un point d'arrêt dans chaque fonction du fichier .cpp?
Répondre
Je ne sais pas ce que les fonctions à utiliser DTE, mais vous pouvez très simplement enregistrer une macro qui pourrait le faire à peu près:
- Aller en haut du fichier
- ctrl - changement - R (début de l'enregistrement)
- ctrl-I (recherche incrémentale)
- {(recherche du premier {caractère).
- F9 (set point d'arrêt)
- ctrl -] (aller à la correspondance} caractère)
- ctrl - changement - R (enregistrement arrêt)
Maintenant, il suffit d'exécuter encore et (ctrl - changement P à plusieurs reprises) jusqu'à la fin du fichier.
Si vous avez des espaces de noms, puis modifiez 4.:
- ((rechercher "(" au début de la définition de la fonction)
- esc (arrêt progressif recherche)
- ctrl - I (recherche incrémentale nouveau)
- {(début du corps de la fonction)
Ce genre de chose peut être modifiée à l'infini en fonction de votre base de code
J'ai des espaces de noms anonymes, cela fonctionnera-t-il? (Ne pas avoir VS pour le moment à vérifier) – Constantin
En fait (ignorer mon commentaire précédent), il serait évidemment ignorer le code à l'intérieur de l'espace de noms. Essayez le changement que j'ai édité en –
Impossible de faire fonctionner ceci dans VS 2010 - la recherche incrémentale est désactivée pendant l'enregistrement d'une macro. –
Mettre cela en haut du fichier:
#define WANT_BREAK_IN_EVERY_FUNCTION
#ifdef WANT_BREAK_IN_EVERY_FUNCTION
#define DEBUG_BREAK DebugBreak();
#else
#define DEBUG_BREAK
#endif
puis insérez DEBUG_BREAK au début de chaque fonction, comme ceci:
void function1()
{
DEBUG_BREAK
// the rest of the function
}
void function2()
{
DEBUG_BREAK
// the rest of the function
}
Lorsque vous ne voulez plus les pauses de débogage, commentaire la ligne
// #define WANT_BREAK_IN_EVERY_FUNCTION
en haut du fichier.
Je voudrais une solution automatisée non intrusive. Je pourrais aussi bien appuyer sur F9 dans chaque fonction. – Constantin
Voilà comment quelque chose de similaire pourrait être atteint dans WinDbg:
bm mymodule!CSpam::*
Cela met dans chaque point d'arrêt méthode de classe (ou espace de noms) CSpam
dans le module mymodule
. Je cherche toujours quelque chose près de cette fonctionnalité dans Visual Studio.
Voici une mise en œuvre rapide de l'idée de 1800 INFORMATION:
Sub TemporaryMacro()
DTE.ActiveDocument.Selection.StartOfDocument()
Dim returnValue As vsIncrementalSearchResult
While True
DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.StartForward()
returnValue = DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.AppendCharAndSearch(AscW("{"))
DTE.ActiveDocument.ActiveWindow.Object.ActivePane.IncrementalSearch.Exit()
If Not (returnValue = vsIncrementalSearchResult.vsIncrementalSearchResultFound) Then
Return
End If
DTE.ExecuteCommand("Debug.ToggleBreakpoint")
DTE.ExecuteCommand("Edit.GotoBrace")
DTE.ActiveDocument.Selection.CharRight()
End While
End Sub
+1, mais ne peut pas accepter, car il ne fonctionne pas avec les espaces de noms. – Constantin
Si vous rencontrez des problèmes avec les espaces de noms, commentez simplement la première ligne qui va au début du document. Vous devrez placer manuellement le curseur au début du bloc que vous voulez basculer, mais cela fonctionnera. – tfinniga
méthode est comme Constantin ... Cela semble WinDBg territoire.
Puisque vous avez le cpp, (même si vous ne pouviez pas écrire quelque chose), il ne devrait pas y avoir de problème pour utiliser logger une partie des outils de débogage pour Windows ... c'est un outil très pratique, honte si peu de gens l'utilisent. Logger le débogueur C/COM/C++ facilement, avec des informations symboliques riches, crochets/profilage/instrumentation flexible;
Nice stuff! ---- – Constantin
J'ai voulu en savoir plus à ce sujet, j'ai un problème lors du chargement et je veux voir le contexte de cette duplication supposée se produire pour certaines exceptions de google protobuf. – jxramos
(Ce n'est pas tout à fait ce que vous demandez, mais presque :)
Vous pouvez mettre un point d'arrêt sur toutes les fonctions de membre d'une classe dans Visual Studio en apportant la New Breakpoint dialogue et en entrant:
CMyClass::*
Voir http://blogs.msdn.com/b/habibh/archive/2009/09/10/class-breakpoint-how-to-set-a-breakpoint-on-a-c-class-in-the-visual-studio-debugger.aspx pour plus de détails.
Bon à savoir ... – Constantin
Il existe une macro, mais je l'ai testée uniquement avec C#.
Sub BreakAtEveryFunction()
For Each project In DTE.Solution.Projects
SetBreakpointOnEveryFunction(project)
Next project
End Sub
Sub SetBreakpointOnEveryFunction(ByVal project As Project)
Dim cm = project.CodeModel
' Look for all the namespaces and classes in the
' project.
Dim list As List(Of CodeFunction)
list = New List(Of CodeFunction)
Dim ce As CodeElement
For Each ce In cm.CodeElements
If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
' Determine whether that namespace or class
' contains other classes.
GetClass(ce, list)
End If
Next
For Each cf As CodeFunction In list
DTE.Debugger.Breakpoints.Add(cf.FullName)
Next
End Sub
Sub GetClass(ByVal ct As CodeElement, ByRef list As List(Of CodeFunction))
' Determine whether there are nested namespaces or classes that
' might contain other classes.
Dim aspace As CodeNamespace
Dim ce As CodeElement
Dim cn As CodeNamespace
Dim cc As CodeClass
Dim elements As CodeElements
If (TypeOf ct Is CodeNamespace) Then
cn = CType(ct, CodeNamespace)
elements = cn.Members
Else
cc = CType(ct, CodeClass)
elements = cc.Members
End If
Try
For Each ce In elements
If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
GetClass(ce, list)
End If
If (TypeOf ce Is CodeFunction) Then
list.Add(ce)
End If
Next
Catch
End Try
End Sub
Alors que ce lien peut répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –
@SahilMittal merci, corrigé. – alexkovelsky
Intéressant, bien que normalement je ne mette pas de code C# dans les fichiers .cpp. Je me demande si cela fonctionne aussi pour C++. – Constantin
Voici une façon de le faire (je vous préviens, il est hacky):
EnvDTE.TextSelection textSelection = (EnvDTE.TextSelection)dte.ActiveWindow.Selection;
// I'm sure there's a better way to get the line count than this...
var lines = File.ReadAllLines(dte.ActiveDocument.FullName).Length;
var methods = new List<CodeElement>();
var oldLine = textSelection.AnchorPoint.Line;
var oldLineOffset = textSelection.AnchorPoint.LineCharOffset;
EnvDTE.CodeElement codeElement = null;
for (var i = 0; i < lines; i++)
{
try
{
textSelection.MoveToLineAndOffset(i, 1);
// I'm sure there's a better way to get a code element by point than this...
codeElement = textSelection.ActivePoint.CodeElement[vsCMElement.vsCMElementFunction];
if (codeElement != null)
{
if (!methods.Contains(codeElement))
{
methods.Add(codeElement);
}
}
}
catch
{
//MessageBox.Show("Add error handling here.");
}
}
// Restore cursor position
textSelection.MoveToLineAndOffset(oldLine, oldLineOffset);
// This could be in the for-loop above, but it's here instead just for
// clarity of the two separate jobs; find all methods, then add the
// breakpoints
foreach (var method in methods)
{
dte.Debugger.Breakpoints.Add(
Line: method.StartPoint.Line,
File: dte.ActiveDocument.FullName);
}
- 1. Comment compiler un fichier source .cpp dans un fichier .dll?
- 2. Génération d'un fichier .cpp
- 3. Accéder à la fonction membre d'un autre fichier .cpp dans le même fichier source?
- 4. fonction essayant de mettre point après n caractères
- 5. compiler rapidement le fichier cpp
- 6. Comment créer une cible/exécutable pour mon fichier .cpp
- 7. Comment puis-je inclure un sous-ensemble d'un fichier .cpp dans un commentaire Doxygen?
- 8. Impossible d'enregistrer le fichier avec le format .cpp insted de format .cpp.9.0 dans VCExpress
- 9. mettre chaque texte entouré via tag html, dans un tableau?
- 10. Comment editer un fichier dans VB?
- 11. Comment appeler la fonction dans chaque minute "X"?
- 12. Dans un makefile, comment j'exécute une commande sur chaque nom de fichier dans une variable?
- 13. Extraction de fonctions à partir d'un fichier CPP
- 14. Comment mettre un point d'arrêt sur un emplacement mémoire dans dbx?
- 15. Comment mettre des éléments d'un fichier dans un hachage? -Ruby
- 16. dépendance étrange comportement dans VS.NET 2005 (non nécessaire .CPP Compilation)
- 17. fonction php pour diviser un tableau à chaque ligne vide?
- 18. Pour chaque fonction en classe dans python
- 19. jquery chaque fonction et la file d'attente
- 20. Comment définir une fonction avec le même nom qui est présent dans un fichier différent
- 21. Comment utiliser le caractère d'échappement dans la fonction de remplacement lors du remplacement du point-virgule dans VB
- 22. Haxe - Génération d'Exe (cpp)
- 23. comment puis-je mettre un point d'arrêt sur "quelque chose est imprimé sur le terminal" dans gdb?
- 24. Comment mettre en cache un fichier WSDL avec Java-WS
- 25. Conversion CPP en Java
- 26. Comment centrer et mettre à l'échelle les fichiers SVG dans un autre fichier SVG
- 27. comment itérer chaque ligne d'un fichier ascii
- 28. Comment configurer point d'arrêt dans le fichier déployé ASPX
- 29. Comment forcer chaque page à charger un certain fichier javascript?
- 30. Mettre du caractère dans une chaîne java pour chaque N caractères
L'argument le plus fort que je l'ai vu aujourd'hui pour arrêter le développement sous Windows et utiliser Linux avec des outils comme gdb qui sera laissez-vous un point d'arrêt sur un fichier. – Owl