예제 #1
0
        private void SendMessage(string message, OutputMessage.Severity severity, bool isAsync)
        {
            try
            {
                // IDebugErrorEvent2 is used to report error messages to the user when something goes wrong in the debug engine.
                // The sample engine doesn't take advantage of this.

                AD7MessageEvent eventObject = new AD7MessageEvent(new OutputMessage(message, enum_MESSAGETYPE.MT_MESSAGEBOX, severity), isAsync);
                Send(eventObject, AD7MessageEvent.IID, null);
            }
            catch
            {
                // Since we are often trying to report an exception, if something goes wrong we don't want to take down the process,
                // so ignore the failure.
            }
        }
예제 #2
0
        private OutputMessage DecodeOutputEvent(Results results)
        {
            // NOTE: the message event is an MI Extension from clrdbg, though we could use in it the future for other debuggers
            string text = results.TryFindString("text");

            if (string.IsNullOrEmpty(text))
            {
                Debug.Fail("Bogus message event. Missing 'text' property.");
                return(null);
            }

            string sendTo = results.TryFindString("send-to");

            if (string.IsNullOrEmpty(sendTo))
            {
                Debug.Fail("Bogus message event, missing 'send-to' property");
                return(null);
            }

            enum_MESSAGETYPE messageType;

            switch (sendTo)
            {
            case "message-box":
                messageType = enum_MESSAGETYPE.MT_MESSAGEBOX;
                break;

            case "output-window":
                messageType = enum_MESSAGETYPE.MT_OUTPUTSTRING;
                break;

            default:
                Debug.Fail("Bogus message event. Unexpected 'send-to' property. Ignoring.");
                return(null);
            }

            OutputMessage.Severity severity = OutputMessage.Severity.Warning;
            switch (results.TryFindString("severity"))
            {
            case "error":
                severity = OutputMessage.Severity.Error;
                break;

            case "warning":
                severity = OutputMessage.Severity.Warning;
                break;
            }

            switch (results.TryFindString("source"))
            {
            case "target-exception":
                messageType |= enum_MESSAGETYPE.MT_REASON_EXCEPTION;
                break;

            case "jmc-prompt":
                messageType |= (enum_MESSAGETYPE)enum_MESSAGETYPE90.MT_REASON_JMC_PROMPT;
                break;

            case "step-filter":
                messageType |= (enum_MESSAGETYPE)enum_MESSAGETYPE90.MT_REASON_STEP_FILTER;
                break;

            case "fatal-error":
                messageType |= (enum_MESSAGETYPE)enum_MESSAGETYPE120.MT_FATAL_ERROR;
                break;
            }

            uint errorCode = results.TryFindUint("error-code") ?? 0;

            return(new OutputMessage(text, messageType, severity, errorCode));
        }