visual ver studio simbolo que puntos punto programacion ningun modo interrupción interrupcion genero fuente encuentra diferente desde codigo cargado archivo aplicacion actualmente activará debugging visual-c++ visual-studio-2005 macros envdte

debugging - ver - que es un punto de interrupcion en programacion



¿Cómo poner un punto de interrupción en cada función del archivo.cpp? (8)

¿Hay una macro que lo hace? ¿Qué objetos DTE usar?


No sé qué funciones DTE usar, pero podría simplemente grabar una macro que prácticamente podría hacerlo:

  1. Ve a la cima del archivo
  2. ctrl - shift - R (iniciar grabación)
  3. ctrl - I (búsqueda incremental)
  4. {(busca el primer {personaje).
  5. F9 (establecer punto de interrupción)
  6. ctrl -] (ir a coincidencia} carácter)
  7. ctrl - shift - R (detener la grabación)

Ahora ejecute esto una y otra vez (ctrl - shift P repetidamente) hasta que llegue al final del archivo.

Si tiene espacios de nombres, cambie 4. a:

  1. ((busque "(" al comienzo de la definición de la función)
  2. esc (detener la búsqueda incremental)
  3. ctrl - I (búsqueda incremental de nuevo)
  4. {(inicio del cuerpo de la función)

Este tipo de cosas se pueden modificar infinitamente para adaptarse a su base de código


Pon esto en la parte superior del archivo:

#define WANT_BREAK_IN_EVERY_FUNCTION #ifdef WANT_BREAK_IN_EVERY_FUNCTION #define DEBUG_BREAK DebugBreak(); #else #define DEBUG_BREAK #endif

luego inserte DEBUG_BREAK al comienzo de cada función, como esta:

void function1() { DEBUG_BREAK // the rest of the function } void function2() { DEBUG_BREAK // the rest of the function }

Cuando ya no quiera las interrupciones de depuración, comente la línea

// #define WANT_BREAK_IN_EVERY_FUNCTION

en la parte superior del archivo.


Así es como se podría lograr algo similar en WinDbg:

bm mymodule!CSpam::*

Esto pone el punto de corte en cada método de clase (o espacio de nombres) CSpam en módulo mymodule .

Todavía estoy buscando algo cercano a esta funcionalidad en Visual Studio.


Aquí hay una implementación rápida de la idea 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


Como el método de Constantin ... Esto parece territorio windbg.

Como tienes el cpp, (incluso si no lo hicieras, podrías crear un script para resolverlo), no debería ser un problema usar logger como parte de las herramientas de depuración para Windows ... es una herramienta muy útil, es una pena que haya poca gente usarlo

logger C / COM / C ++ de depuración fácil, con gran cantidad de información simbólica, ganchos / perfilado / instrumentación flexible;

Una forma de activar Logger es iniciar CDB o WinDbg y adjuntarlo a una aplicación de destino de modo de usuario como de costumbre. Luego, use el comando de extensión! Logexts.logi o! Logexts.loge. Esto insertará el código en el punto de interrupción actual que saltará a una rutina que carga e inicializa Logexts.dll en el proceso de aplicación de destino. Esto se conoce como "Inyectar Logger en la aplicación de destino".



Hay una macro, pero la probé solo con 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


Aquí hay una manera de hacerlo (te advierto que es 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); }