// Enumerates all error breakpoints that resulted from this pending breakpoint.
 int IDebugPendingBreakpoint2.EnumErrorBreakpoints(enum_BP_ERROR_TYPE bpErrorType, out IEnumDebugErrorBreakpoints2 ppEnum)
 {
     // Called when a pending breakpoint could not be bound. This may occur for many reasons such as an invalid location, an invalid expression, etc...
     // The sample engine does not support this, but a real world engine will want to send an instance of IDebugBreakpointErrorEvent2 to the
     // UI and return a valid enumeration of IDebugErrorBreakpoint2 from IDebugPendingBreakpoint2::EnumErrorBreakpoints. The debugger will then
     // display information about why the breakpoint did not bind to the user.
     if ((_BPError != null) && ((bpErrorType & enum_BP_ERROR_TYPE.BPET_TYPE_ERROR) != 0))
     {
         IDebugErrorBreakpoint2[] errlist = new IDebugErrorBreakpoint2[1];
         errlist[0] = _BPError;
         ppEnum = new AD7ErrorBreakpointsEnum(errlist);
         return Constants.S_OK;
     }
     else
     {
         ppEnum = null;
         return Constants.S_FALSE;
     }
 }
        // Enumerates all error breakpoints that resulted from this pending breakpoint.
        int IDebugPendingBreakpoint2.EnumErrorBreakpoints(enum_BP_ERROR_TYPE bpErrorType, out IEnumDebugErrorBreakpoints2 ppEnum) {
            // Called when a pending breakpoint could not be bound. This may occur for many reasons such as an invalid location, an invalid expression, etc...
            // Return a valid enumeration of IDebugErrorBreakpoint2 from IDebugPendingBreakpoint2::EnumErrorBreakpoints, allowing the debugger to
            // display information about why the breakpoint did not bind to the user.
            lock (_breakpointErrors) {
                IDebugErrorBreakpoint2[] breakpointErrors = _breakpointErrors.Cast<IDebugErrorBreakpoint2>().ToArray();
                ppEnum = new AD7ErrorBreakpointsEnum(breakpointErrors);
            }

            return VSConstants.S_OK;
        }