MCPcopy Create free account
hub / github.com/apache/brpc / BthreadRegsCmd

Class BthreadRegsCmd

tools/gdb_bthread_stack.py:176–207  ·  view source on GitHub ↗

bthread_regs , print bthread registers

Source from the content-addressed store, hash-verified

174 pass
175
176class BthreadRegsCmd(gdb.Command):
177 """bthread_regs <id>, print bthread registers"""
178 def __init__(self):
179 gdb.Command.__init__(self, "bthread_regs", gdb.COMMAND_STACK, gdb.COMPLETE_NONE)
180
181 def invoke(self, arg, tty):
182 global status
183 global bthreads
184 if not status:
185 print("Not in bthread debug mode")
186 return
187 if not arg:
188 print("bthread_regs <id>, see 'bthread_list'")
189 return
190 bthread_id = int(arg)
191 if bthread_id >= len(bthreads):
192 print("id {} exceeds max bthread nums {}".format(bthread_id, len(bthreads)))
193 return
194 stack = bthreads[bthread_id]["stack"]
195 if str(stack) == "0x0":
196 print("this bthread has no stack")
197 return
198 context = gdb.parse_and_eval("(*(('bthread::ContextualStack' *){})).context".format(stack))
199 rip = int(gdb.parse_and_eval("*(uint64_t*)({}+7*8)".format(context)))
200 rbp = int(gdb.parse_and_eval("*(uint64_t*)({}+6*8)".format(context)))
201 rbx = int(gdb.parse_and_eval("*(uint64_t*)({}+5*8)".format(context)))
202 r15 = int(gdb.parse_and_eval("*(uint64_t*)({}+4*8)".format(context)))
203 r14 = int(gdb.parse_and_eval("*(uint64_t*)({}+3*8)".format(context)))
204 r13 = int(gdb.parse_and_eval("*(uint64_t*)({}+2*8)".format(context)))
205 r12 = int(gdb.parse_and_eval("*(uint64_t*)({}+1*8)".format(context)))
206 rsp = int(gdb.parse_and_eval("{}+8*8".format(context)))
207 print("rip: 0x{:x}\nrsp: 0x{:x}\nrbp: 0x{:x}\nrbx: 0x{:x}\nr15: 0x{:x}\nr14: 0x{:x}\nr13: 0x{:x}\nr12: 0x{:x}".format(rip, rsp, rbp, rbx, r15, r14, r13, r12))
208
209class BthreadMetaCmd(gdb.Command):
210 """bthread_meta <id>, print task meta by id"""

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected