2016-09-27 47 views
0

只是一個小問題:調試器在事件觸發時是否可以休息一下?只要在Visual Studio中觸發事件就打破調試器

非常感謝。

+3

哪個事件?訂閱它,把斷點,瞧.. – Sinatr

+0

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

+0

讓我解釋一下: 我處於調試器模式。只要代碼中的任何現有事件觸發,我都想要休息一下。我有100000行代碼和200個事件。我只是想在任何現有事件正在發射時看到一個突破。 我希望你現在明白。 – TheOnionMaster

回答

0

你不能註冊上的應用提高了全體事件的全局處理程序,但實際上你可以註冊自己的處理程序進行靜態事件,反思的幫助:

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!"); 
    } 

的支持靜態事件並不是那麼多。

16實際上

  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
相關問題