<span class="o">}</span>
<span class="o">}</span></pre></div>
+<p><tt>fiber-print-limit</tt> command can be used to change the maximum number of fibers printed for a <tt>fibers::FiberManager</tt> (default value is 100).</p>
+
+<div class="remarkup-code-block" data-code-lang="php"><pre class="remarkup-code"><span class="o">(</span><span class="no">gdb</span><span class="o">)</span> <span class="no">fiber</span><span class="o">-</span><span class="no">print</span><span class="o">-</span><span class="no">limit</span> <span class="mi">10</span>
+<span class="k">New</span> <span class="nc" data-symbol-name="fiber">fiber</span> <span class="no">limit</span> <span class="k">for</span> <span class="no">FiberManager</span> <span class="no">printer</span> <span class="no">set</span> <span class="no">to</span> <span class="mi">10</span></pre></div>
+
<h3 id="printing-a-fiber-task">Printing a fiber-task <a href="#printing-a-fiber-task" class="headerLink">#</a></h3>
<p>Given a pointer to a <tt>fibers::Fiber</tt>, which is running some fiber-task, you can get its current state:</p>
class FiberManagerPrinter:
"""Print a folly::fibers::Fiber"""
+ fiber_print_limit = 100
+
def __init__(self, fm):
self.fm = fm
active_fibers = collections.OrderedDict()
+ fiber_count = 0
+
while fiber_hook != all_fibers.address:
+ if fiber_count == FiberManagerPrinter.fiber_print_limit:
+ active_fibers["..."] = "..."
+ break
+
fiber = fiber_hook.cast(gdb.lookup_type("int64_t"))
fiber = fiber - gdb.parse_and_eval(
"(int64_t)&folly::fibers::Fiber::globalListHook_")
fiber_hook = fiber_hook.dereference()['next_']
+ fiber_count = fiber_count + 1
+
return active_fibers.items()
def to_string(self):
return "folly::fibers::FiberManager"
+class FiberPrintLimitCommand(gdb.Command):
+ def __init__(self):
+ super(FiberPrintLimitCommand, self).__init__(
+ "fiber-print-limit", gdb.COMMAND_USER)
+
+ def invoke(self, arg, from_tty):
+ if not arg:
+ print("New limit has to be passed to 'fiber_print_limit' command")
+ return
+ FiberManagerPrinter.fiber_print_limit = int(arg)
+ print("New fiber limit for FiberManager printer set to " +
+ str(FiberManagerPrinter.fiber_print_limit))
+
+
class FrameId(object):
def __init__(self, sp, pc):
self.sp = sp
def load():
gdb.printing.register_pretty_printer(gdb, build_pretty_printer())
gdb.xmethod.register_xmethod_matcher(gdb, FiberXMethodMatcher())
+ FiberPrintLimitCommand()
FiberActivateCommand()
FiberDeactivateCommand()
Shortcut("get_fiber_manager_map_evb", get_fiber_manager_map_evb)