bool ShouldBreak(DbgException exception) { if (exception.IsUnhandled) { return(!debuggerSettings.IgnoreUnhandledExceptions); } var settings = dbgExceptionSettingsService.Value.GetSettings(exception.Id); if (!CheckBreakFlags(settings.Flags, exception.Flags)) { return(false); } if (!CheckConditions(settings.Conditions, exception)) { return(false); } return(true); }
bool CheckConditions(DbgExceptionConditionSettings settings, DbgException exception) { Debug.Assert(settings.Condition != null); if (settings.Condition == null) { return(false); } switch (settings.ConditionType) { case DbgExceptionConditionType.ModuleNameEquals: return(ModuleNameEquals(settings, exception)); case DbgExceptionConditionType.ModuleNameNotEquals: return(!ModuleNameEquals(settings, exception)); default: Debug.Fail($"Unknown condition type: {settings.ConditionType}"); return(false); } }
bool CheckConditions(ReadOnlyCollection <DbgExceptionConditionSettings> conditions, DbgException exception) { if (conditions.Count != 0) { foreach (var condition in conditions) { if (!CheckConditions(condition, exception)) { return(false); } } } return(true); }
bool ModuleNameEquals(DbgExceptionConditionSettings settings, DbgException exception) => CompareStrings(exception.Module?.Name, settings.Condition);