class RbBCC::StackTrace

Constants

BPF_F_STACK_BUILD_ID
BPF_STACK_BUILD_ID_EMPTY
BPF_STACK_BUILD_ID_IP
BPF_STACK_BUILD_ID_VALID
MAX_DEPTH

Public Instance Methods

get_stack(stack_id) click to toggle source
# File lib/rbbcc/table.rb, line 392
def get_stack(stack_id)
  key = stack_id.is_a?(Fiddle::Pointer) ? stack_id : byref(stack_id, @keysize)
  leaftype.new(self[stack_id])
end
walk(stack_id, resolve: nil, &blk) click to toggle source
# File lib/rbbcc/table.rb, line 397
def walk(stack_id, resolve: nil, &blk)
  addrs = if (flags & BPF_F_STACK_BUILD_ID).nonzero?
            get_stack(stack_id).trace[0..MAX_DEPTH]
          else
            get_stack(stack_id).ip[0..MAX_DEPTH]
          end
  addrs.each do |addr|
    break if addr.zero?
    if resolve
      blk.call(resolve.call(addr))
    else
      blk.call(addr)
    end
  end
end