7
7
// ===----------------------------------------------------------------------===//
8
8
9
9
#include " DAP.h"
10
+ #include " Handler/ResponseHandler.h"
10
11
#include " JSONUtils.h"
11
12
#include " LLDBUtils.h"
12
13
#include " OutputRedirector.h"
34
35
#include < cstdarg>
35
36
#include < cstdio>
36
37
#include < fstream>
38
+ #include < memory>
37
39
#include < mutex>
38
40
#include < utility>
39
41
@@ -769,10 +771,8 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
769
771
770
772
if (packet_type == " response" ) {
771
773
auto id = GetSigned (object, " request_seq" , 0 );
772
- ResponseCallback response_handler = [](llvm::Expected<llvm::json::Value>) {
773
- llvm::errs () << " Unhandled response\n " ;
774
- };
775
774
775
+ std::unique_ptr<ResponseHandler> response_handler;
776
776
{
777
777
std::lock_guard<std::mutex> locker (call_mutex);
778
778
auto inflight = inflight_reverse_requests.find (id);
@@ -782,19 +782,22 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
782
782
}
783
783
}
784
784
785
+ if (!response_handler)
786
+ response_handler = std::make_unique<UnknownResponseHandler>(" " , id);
787
+
785
788
// Result should be given, use null if not.
786
789
if (GetBoolean (object, " success" , false )) {
787
790
llvm::json::Value Result = nullptr ;
788
791
if (auto *B = object.get (" body" )) {
789
792
Result = std::move (*B);
790
793
}
791
- response_handler (Result);
794
+ (* response_handler) (Result);
792
795
} else {
793
796
llvm::StringRef message = GetString (object, " message" );
794
797
if (message.empty ()) {
795
798
message = " Unknown error, response failed" ;
796
799
}
797
- response_handler (llvm::createStringError (
800
+ (* response_handler) (llvm::createStringError (
798
801
std::error_code (-1 , std::generic_category ()), message));
799
802
}
800
803
@@ -875,24 +878,6 @@ llvm::Error DAP::Loop() {
875
878
return llvm::Error::success ();
876
879
}
877
880
878
- void DAP::SendReverseRequest (llvm::StringRef command,
879
- llvm::json::Value arguments,
880
- ResponseCallback callback) {
881
- int64_t id;
882
- {
883
- std::lock_guard<std::mutex> locker (call_mutex);
884
- id = ++reverse_request_seq;
885
- inflight_reverse_requests.emplace (id, std::move (callback));
886
- }
887
-
888
- SendJSON (llvm::json::Object{
889
- {" type" , " request" },
890
- {" seq" , id},
891
- {" command" , command},
892
- {" arguments" , std::move (arguments)},
893
- });
894
- }
895
-
896
881
lldb::SBError DAP::WaitForProcessToStop (uint32_t seconds) {
897
882
lldb::SBError error;
898
883
lldb::SBProcess process = target.GetProcess ();
@@ -1007,17 +992,10 @@ bool StartDebuggingRequestHandler::DoExecute(
1007
992
return false ;
1008
993
}
1009
994
1010
- dap.SendReverseRequest (
995
+ dap.SendReverseRequest <LogFailureResponseHandler> (
1011
996
" startDebugging" ,
1012
997
llvm::json::Object{{" request" , request},
1013
- {" configuration" , std::move (*configuration)}},
1014
- [](llvm::Expected<llvm::json::Value> value) {
1015
- if (!value) {
1016
- llvm::Error err = value.takeError ();
1017
- llvm::errs () << " reverse start debugging request failed: "
1018
- << llvm::toString (std::move (err)) << " \n " ;
1019
- }
1020
- });
998
+ {" configuration" , std::move (*configuration)}});
1021
999
1022
1000
result.SetStatus (lldb::eReturnStatusSuccessFinishNoResult);
1023
1001
0 commit comments