Improve get_fiber_manager_map_*() error reporting
[folly.git] / folly / fibers / scripts / gdb.py
index a95870225be31cc9078a001468af248d8a00840d..a9c1e3a215b917908af059a6a127192b1aa93ca0 100644 (file)
@@ -79,7 +79,7 @@ class FiberManagerPrinter:
 
             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()
 
@@ -277,14 +277,25 @@ class Shortcut(gdb.Function):
 
 
 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")