@@ -545,165 +545,6 @@ bool FillStackFrames(DAP &dap, lldb::SBThread &thread,
545
545
return reached_end_of_stack;
546
546
}
547
547
548
- // "ExceptionInfoRequest": {
549
- // "allOf": [ { "$ref": "#/definitions/Request" }, {
550
- // "type": "object",
551
- // "description": "Retrieves the details of the exception that
552
- // caused this event to be raised. Clients should only call this request if
553
- // the corresponding capability `supportsExceptionInfoRequest` is true.",
554
- // "properties": {
555
- // "command": {
556
- // "type": "string",
557
- // "enum": [ "exceptionInfo" ]
558
- // },
559
- // "arguments": {
560
- // "$ref": "#/definitions/ExceptionInfoArguments"
561
- // }
562
- // },
563
- // "required": [ "command", "arguments" ]
564
- // }]
565
- // },
566
- // "ExceptionInfoArguments": {
567
- // "type": "object",
568
- // "description": "Arguments for `exceptionInfo` request.",
569
- // "properties": {
570
- // "threadId": {
571
- // "type": "integer",
572
- // "description": "Thread for which exception information should be
573
- // retrieved."
574
- // }
575
- // },
576
- // "required": [ "threadId" ]
577
- // },
578
- // "ExceptionInfoResponse": {
579
- // "allOf": [ { "$ref": "#/definitions/Response" }, {
580
- // "type": "object",
581
- // "description": "Response to `exceptionInfo` request.",
582
- // "properties": {
583
- // "body": {
584
- // "type": "object",
585
- // "properties": {
586
- // "exceptionId": {
587
- // "type": "string",
588
- // "description": "ID of the exception that was thrown."
589
- // },
590
- // "description": {
591
- // "type": "string",
592
- // "description": "Descriptive text for the exception."
593
- // },
594
- // "breakMode": {
595
- // "$ref": "#/definitions/ExceptionBreakMode",
596
- // "description": "Mode that caused the exception notification to
597
- // be raised."
598
- // },
599
- // "details": {
600
- // "$ref": "#/definitions/ExceptionDetails",
601
- // "description": "Detailed information about the exception."
602
- // }
603
- // },
604
- // "required": [ "exceptionId", "breakMode" ]
605
- // }
606
- // },
607
- // "required": [ "body" ]
608
- // }]
609
- // }
610
- // "ExceptionDetails": {
611
- // "type": "object",
612
- // "description": "Detailed information about an exception that has
613
- // occurred.", "properties": {
614
- // "message": {
615
- // "type": "string",
616
- // "description": "Message contained in the exception."
617
- // },
618
- // "typeName": {
619
- // "type": "string",
620
- // "description": "Short type name of the exception object."
621
- // },
622
- // "fullTypeName": {
623
- // "type": "string",
624
- // "description": "Fully-qualified type name of the exception object."
625
- // },
626
- // "evaluateName": {
627
- // "type": "string",
628
- // "description": "An expression that can be evaluated in the current
629
- // scope to obtain the exception object."
630
- // },
631
- // "stackTrace": {
632
- // "type": "string",
633
- // "description": "Stack trace at the time the exception was thrown."
634
- // },
635
- // "innerException": {
636
- // "type": "array",
637
- // "items": {
638
- // "$ref": "#/definitions/ExceptionDetails"
639
- // },
640
- // "description": "Details of the exception contained by this exception,
641
- // if any."
642
- // }
643
- // }
644
- // },
645
- void request_exceptionInfo (DAP &dap, const llvm::json::Object &request) {
646
- llvm::json::Object response;
647
- FillResponse (request, response);
648
- const auto *arguments = request.getObject (" arguments" );
649
- llvm::json::Object body;
650
- lldb::SBThread thread = dap.GetLLDBThread (*arguments);
651
- if (thread.IsValid ()) {
652
- auto stopReason = thread.GetStopReason ();
653
- if (stopReason == lldb::eStopReasonSignal)
654
- body.try_emplace (" exceptionId" , " signal" );
655
- else if (stopReason == lldb::eStopReasonBreakpoint) {
656
- ExceptionBreakpoint *exc_bp = dap.GetExceptionBPFromStopReason (thread);
657
- if (exc_bp) {
658
- EmplaceSafeString (body, " exceptionId" , exc_bp->filter );
659
- EmplaceSafeString (body, " description" , exc_bp->label );
660
- } else {
661
- body.try_emplace (" exceptionId" , " exception" );
662
- }
663
- } else {
664
- body.try_emplace (" exceptionId" , " exception" );
665
- }
666
- if (!ObjectContainsKey (body, " description" )) {
667
- char description[1024 ];
668
- if (thread.GetStopDescription (description, sizeof (description))) {
669
- EmplaceSafeString (body, " description" , std::string (description));
670
- }
671
- }
672
- body.try_emplace (" breakMode" , " always" );
673
- auto exception = thread.GetCurrentException ();
674
- if (exception.IsValid ()) {
675
- llvm::json::Object details;
676
- lldb::SBStream stream;
677
- if (exception.GetDescription (stream)) {
678
- EmplaceSafeString (details, " message" , stream.GetData ());
679
- }
680
-
681
- auto exceptionBacktrace = thread.GetCurrentExceptionBacktrace ();
682
- if (exceptionBacktrace.IsValid ()) {
683
- lldb::SBStream stream;
684
- exceptionBacktrace.GetDescription (stream);
685
- for (uint32_t i = 0 ; i < exceptionBacktrace.GetNumFrames (); i++) {
686
- lldb::SBFrame frame = exceptionBacktrace.GetFrameAtIndex (i);
687
- frame.GetDescription (stream);
688
- }
689
- EmplaceSafeString (details, " stackTrace" , stream.GetData ());
690
- }
691
-
692
- body.try_emplace (" details" , std::move (details));
693
- }
694
- // auto excInfoCount = thread.GetStopReasonDataCount();
695
- // for (auto i=0; i<excInfoCount; ++i) {
696
- // uint64_t exc_data = thread.GetStopReasonDataAtIndex(i);
697
- // }
698
- } else {
699
- response[" success" ] = llvm::json::Value (false );
700
- }
701
- response.try_emplace (" body" , std::move (body));
702
- dap.SendJSON (llvm::json::Value (std::move (response)));
703
- }
704
-
705
-
706
-
707
548
// "compileUnitsRequest": {
708
549
// "allOf": [ { "$ref": "#/definitions/Request" }, {
709
550
// "type": "object",
@@ -3838,8 +3679,8 @@ void RegisterRequestCallbacks(DAP &dap) {
3838
3679
dap.RegisterRequest <ConfigurationDoneRequestHandler>();
3839
3680
dap.RegisterRequest <DisconnectRequestHandler>();
3840
3681
dap.RegisterRequest <EvaluateRequestHandler>();
3682
+ dap.RegisterRequest <ExceptionInfoRequestHandler>();
3841
3683
3842
- dap.RegisterRequestCallback (" exceptionInfo" , request_exceptionInfo);
3843
3684
dap.RegisterRequestCallback (" initialize" , request_initialize);
3844
3685
dap.RegisterRequestCallback (" launch" , request_launch);
3845
3686
dap.RegisterRequestCallback (" next" , request_next);
0 commit comments