2016-09-27 5 views
0

nur eine kleine Frage: Ist es möglich für den Debugger eine Pause zu machen, wenn ein Ereignis ausgelöst wird?Break-Debugger, wann immer Ereignis in Visual Studio ausgelöst wird

Vielen Dank.

+3

Welches Ereignis? Abonnieren Sie es, setzen Sie Haltepunkt, voila .. – Sinatr

+0

https://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx – apocalypse

+0

Lassen Sie mich erklären: Ich bin im Debugger-Modus. Ich möchte eine Pause, wenn ein vorhandenes Ereignis im Code ausgelöst wird. Ich habe 100000 Zeilen Code mit 200 Ereignissen. Ich möchte nur eine Pause haben, um zu sehen, wann immer ein existierendes Ereignis abfeuert. Ich hoffe, Sie verstehen jetzt. – TheOnionMaster

Antwort

0

Sie können einen globalen Handler für alle Ereignisse nicht registrieren, die auf einer Anwendung erhöhen, aber Sie können Ihre eigenen Handler für statische Ereignisse tatsächlich registrieren, mit Hilfe der Reflexion:

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     MethodInfo handler = typeof(Program).GetMethod("GlobalEventHandler"); 
     IEnumerable<EventInfo> events = AppDomain.CurrentDomain 
      .GetAssemblies() 
      .Select(a => a.GetTypes() 
          .Select(t => t.GetEvents(
              BindingFlags.Public | 
              BindingFlags.NonPublic | 
              BindingFlags.Static) 
             .Where(e => typeof(EventHandler) 
                .IsAssignableFrom(e.EventHandlerType)))) 
      .SelectMany(e => e) 
      .SelectMany(e => e); 

     foreach (EventInfo evt in events) 
      evt.GetAddMethod(true).Invoke(null, new object[] 
      { 
       Delegate.CreateDelegate(evt.EventHandlerType, null, handler) 
      }); 
    } 

    public static void GlobalEventHandler(object sender, EventArgs args) 
    { 
     Debugger.Break(); // <-- When a static event is fired, the application will break here 
     Console.WriteLine("An event was fired!"); 
    } 

Die unterstützten statische Ereignisse sind nicht so viele.

16 tatsächlich:

  1. Application.ApplicationExit
  2. Application.Idle
  3. Application.EnterThreadModal
  4. Application.LeaveThreadModal
  5. Application.ThreadExit
  6. ToolStripManager.RendererChanged
  7. SystemEvents.DisplaySettingsChanging
  8. SystemEvents.DisplaySettingsChanged
  9. SystemEvents.EventsThreadShutdown
  10. SystemEvents.InstalledFontsChanged
  11. SystemEvents.LowMemory
  12. SystemEvents.PaletteChanged
  13. SystemEvents.TimeChanged
  14. ComponentDispatcher.ThreadIdle
  15. ComponentDispatcher.EnterThreadModal
  16. ComponentDispatcher.LeaveThreadModal
Verwandte Themen