fiber = fiber_hook.cast(gdb.lookup_type("int64_t"))
fiber = fiber - gdb.parse_and_eval(
- "(int64_t)&folly::fibers::Fiber::globalListHook_")
+ "(int64_t)&'folly::fibers::Fiber'::globalListHook_")
fiber = fiber.cast(
gdb.lookup_type('folly::fibers::Fiber').pointer()).dereference()
def get_fiber_manager_map(evb_type):
- global_cache_type = gdb.lookup_type(
- "folly::fibers::(anonymous namespace)::GlobalCache<" + evb_type + ">")
+ try:
+ # Exception thrown if unable to find type
+ # Probably because of missing debug symbols
+ global_cache_type = gdb.lookup_type(
+ "folly::fibers::(anonymous namespace)::GlobalCache<" + evb_type + ">")
+ except gdb.error:
+ raise gdb.GdbError("Unable to find types. "
+ "Please make sure debug info is available for this binary.\n"
+ "Have you run 'fbload debuginfo_fbpkg'?")
+
global_cache_instance_ptr_ptr = gdb.parse_and_eval(
"&'" + global_cache_type.name + "::instance()::ret'")
- global_cache_instance = global_cache_instance_ptr_ptr.cast(
- global_cache_type.pointer().pointer()).dereference().dereference()
- return global_cache_instance['map_']
+ global_cache_instance_ptr = global_cache_instance_ptr_ptr.cast(
+ global_cache_type.pointer().pointer()).dereference()
+ if global_cache_instance_ptr == 0x0:
+ raise gdb.GdbError("FiberManager map is empty.")
+ global_cache_instance = global_cache_instance_ptr.dereference()
+ return global_cache_instance['map_']
def get_fiber_manager_map_evb():
return get_fiber_manager_map("folly::EventBase")