.NET - First chance exception listener for intensive debugging?

前端 未结 2 1346
太阳男子
太阳男子 2021-01-02 12:02

This is probably unrealistic, but would it be possible to enable a component to be notified of all first chance exceptions occuring in its process?

We have some thir

2条回答
  •  旧巷少年郎
    2021-01-02 12:26

    You can use the .net profiling API to get notifications of exceptions at all sorts of states, these are the available methods:

    ExceptionThrown
    ExceptionSearchFunctionEnter
    ExceptionSearchFunctionLeave
    ExceptionSearchFilterEnter
    ExceptionSearchFilterLeave
    ExceptionSearchCatcherFound
    ExceptionOSHandlerEnter
    ExceptionOSHandlerLeave
    ExceptionUnwindFunctionEnter
    ExceptionUnwindFunctionLeave
    ExceptionUnwindFinallyEnter
    ExceptionUnwindFinallyLeave
    ExceptionCatcherEnter
    ExceptionCatcherLeave
    ExceptionCLRCatcherFound
    ExceptionCLRCatcherExecute
    

    Using the profiling api is not entirely for the faint of heart; have a look at http://msdn.microsoft.com/en-us/library/ms404386.aspx as an entry point for your research and http://msdn.microsoft.com/en-us/library/bb384687.aspx for exception handling specifically.

    I'm not aware of a simple way to do it within your managed code such as

    AppDomain.FirstChanceException += new EventHandler...
    

    event or similar.

    EDIT: A possibly better alternative is using the unamanaged debugging API instead.

    Basically you can set a ICorManagedCallback/ICorManagedCallback2 callback using ICorDebug::SetManagedHandler and get callbacks when exceptions occur.

    I'm not experienced enough in this area to know what the advantages/disadvantages are over the profiling api.

    I just had a look at the mdgb sample which uses the ICorDebug APIs and it seems to get quite enough notifications from exceptions (to quickly see what events occur, set a breakpoint in the HandleEvent method in corapi/Debugger.cs:406)

提交回复
热议问题