@@ -28,11 +28,11 @@ use crate::task;
2828use crate :: task:: {
2929 Action , Breakpoint , Call , CallArgsUpdateResults , CallLine , CallSearchArg , CalltraceLoadArgs ,
3030 CalltraceNonExpandedKind , CollapseCallsArgs , CoreTrace , CtLoadFlowArguments , DbEventKind , FlowMode , FlowUpdate ,
31- FrameInfo , FunctionLocation , HistoryResult , HistoryUpdate , Instruction , Instructions , LoadHistoryArg ,
32- LoadStepLinesArg , LoadStepLinesUpdate , LocalStepJump , Location , MoveState , Notification , NotificationKind ,
33- ProgramEvent , RRGDBStopSignal , RRTicks , RegisterEventsArg , RunTracepointsArg , SourceCallJumpTarget , SourceLocation ,
34- StepArg , Stop , StopType , StringAndValueTuple , Task , TraceKind , TraceUpdate , TracepointId , TracepointResults ,
35- UpdateTableArgs , Variable , NO_INDEX , NO_PATH , NO_POSITION , NO_STEP_ID ,
31+ FrameInfo , FunctionLocation , GlobalCallLineIndex , HistoryResult , HistoryUpdate , Instruction , Instructions ,
32+ LoadHistoryArg , LoadStepLinesArg , LoadStepLinesUpdate , LocalStepJump , Location , MoveState , Notification ,
33+ NotificationKind , ProgramEvent , RRGDBStopSignal , RRTicks , RegisterEventsArg , RunTracepointsArg ,
34+ SourceCallJumpTarget , SourceLocation , StepArg , Stop , StopType , StringAndValueTuple , Task , TraceKind , TraceUpdate ,
35+ TracepointId , TracepointResults , UpdateTableArgs , Variable , NO_INDEX , NO_PATH , NO_POSITION , NO_STEP_ID ,
3636} ;
3737use crate :: tracepoint_interpreter:: TracepointInterpreter ;
3838use crate :: value:: { to_ct_value, Type , Value } ;
@@ -433,24 +433,39 @@ impl Handler {
433433 args : CalltraceLoadArgs ,
434434 ) -> Result < ( ) , Box < dyn Error > > {
435435 if self . trace_kind == TraceKind :: RR {
436- warn ! ( "load_calltrace_section not implemented for rr" ) ;
437- return Ok ( ( ) ) ;
438- }
439-
440- let start_call_line_index = args. start_call_line_index ;
441- let call_lines = self . load_local_calltrace ( args) ?;
442- let total_count = self . calc_total_calls ( ) ;
443- let position = self . calltrace . calc_scroll_position ( ) ;
444- let update = CallArgsUpdateResults :: finished_update_call_lines (
445- call_lines,
446- start_call_line_index,
447- total_count,
448- position,
449- self . calltrace . depth_offset ,
450- ) ;
451- // self.return_task((task, VOID_RESULT.to_string()))?;
452- let raw_event = self . dap_client . updated_calltrace_event ( & update) ?;
453- self . send_dap ( & raw_event) ?;
436+ // TODO: calltrace? eventually in the future
437+ // for now callstack!
438+
439+ let start_call_line_index = GlobalCallLineIndex ( 0 ) ;
440+ let callstack_lines = self . replay . load_callstack ( ) ?;
441+ let total_count = callstack_lines. len ( ) ;
442+ let position = 0 ;
443+ let update = CallArgsUpdateResults :: finished_update_call_lines (
444+ callstack_lines,
445+ start_call_line_index,
446+ total_count,
447+ position,
448+ self . calltrace . depth_offset ,
449+ ) ;
450+ let raw_event = self . dap_client . updated_calltrace_event ( & update) ?;
451+ self . send_dap ( & raw_event) ?;
452+ // warn!("load_calltrace_section not implemented for rr");
453+ } else {
454+ let start_call_line_index = args. start_call_line_index ;
455+ let call_lines = self . load_local_calltrace ( args) ?;
456+ let total_count = self . calc_total_calls ( ) ;
457+ let position = self . calltrace . calc_scroll_position ( ) ;
458+ let update = CallArgsUpdateResults :: finished_update_call_lines (
459+ call_lines,
460+ start_call_line_index,
461+ total_count,
462+ position,
463+ self . calltrace . depth_offset ,
464+ ) ;
465+ // self.return_task((task, VOID_RESULT.to_string()))?;
466+ let raw_event = self . dap_client . updated_calltrace_event ( & update) ?;
467+ self . send_dap ( & raw_event) ?;
468+ }
454469 Ok ( ( ) )
455470 }
456471
@@ -662,10 +677,18 @@ impl Handler {
662677 }
663678
664679 pub fn calltrace_jump ( & mut self , _req : dap:: Request , location : Location ) -> Result < ( ) , Box < dyn Error > > {
665- let step_id = StepId ( location. rr_ticks . 0 ) ; // using this field
666- // for compat with rr/gdb core support
667- self . replay . jump_to ( step_id) ?;
668- self . step_id = self . replay . current_step_id ( ) ;
680+ if self . trace_kind == TraceKind :: DB {
681+ let step_id = StepId ( location. rr_ticks . 0 ) ; // using this field
682+ // for compat with rr/gdb core support
683+ self . replay . jump_to ( step_id) ?;
684+ self . step_id = self . replay . current_step_id ( ) ;
685+ } else {
686+ // TODO: eventually calltrace in the future
687+ // for now support only callstack-mode
688+ self . replay . callstack_jump ( location. callstack_depth ) ?;
689+ let _ = self . replay . load_location ( & mut self . expr_loader ) ?;
690+ self . step_id = self . replay . current_step_id ( ) ;
691+ }
669692 self . complete_move ( false ) ?;
670693
671694 Ok ( ( ) )
0 commit comments