delphix / sdb

The Slick Debugger
Apache License 2.0
57 stars 20 forks source link

Support for function args + local variables #322

Open mmaybee opened 1 year ago

mmaybee commented 1 year ago

= Problem

Need a convenient way to see argument names and associated values when viewing call stacks.

= Solution

This PR introduces a new command stack_args that can be used to display detailed information (including values for local variables) for frames in a call stack. It takes one or more stack pointers as input. E.g.

    sdb> echo 0xffff96609b7d4680 | stack_args
    (struct task_struct *)0xffff96609b7d4680
    #0  struct rq *context_switch(struct rq *rq, struct task_struct *prev, struct task_struct *next, struct rq_flags *rf)
          rf = (struct rq_flags *)<absent>
          next = (struct task_struct *)<absent>
          prev = (struct task_struct *)<absent>
          rq = (struct rq *)<absent>
    #1  void __schedule(bool preempt)
          preempt = (bool)<absent>
          prev = (struct task_struct *)0xffff96609b7d4680
          next = (struct task_struct *)<absent>
          switch_count = (unsigned long *)<absent>
          rf = (struct rq_flags){ 0, {}, 4 }
          rq = (struct rq *)<absent>
          cpu = (int)<absent>
    #2  void schedule()
          tsk = (struct task_struct *)<absent>
    ...

The command accepts two arguments:

  1. -f <frame#> - will print only the requested frame of the stack, and provide more detail values provided for locals.
  2. -r - will print available register values for each stack frame.

Note that the syntax used here is still evolving and subject to change.