tests: replace pycodestyle with black
[vpp.git] / test / debug.py
index 4516b8c..d77fd87 100644 (file)
@@ -2,11 +2,16 @@
 
 import os
 import pexpect
+import sys
 
-gdb_path = '/usr/bin/gdb'
+from sanity_run_vpp import SanityTestCase
+from shutil import rmtree
+from config import available_cpus
 
+gdb_path = "/usr/bin/gdb"
 
-def spawn_gdb(binary_path, core_path, logger):
+
+def spawn_gdb(binary_path, core_path):
     if os.path.isfile(gdb_path) and os.access(gdb_path, os.X_OK):
         # automatically attach gdb
         gdb_cmdline = "%s %s %s" % (gdb_path, binary_path, core_path)
@@ -19,5 +24,36 @@ def spawn_gdb(binary_path, core_path, logger):
         if gdb.isalive():
             raise Exception("GDB refused to die...")
     else:
-        logger.error("Debugger '%s' does not exist or is not an "
-                     "executable.." % gdb_path)
+        sys.stderr.write(
+            "Debugger '%s' does not exist or is not an executable..\n" % gdb_path
+        )
+
+
+def start_vpp_in_gdb():
+    # here we use SanityTestCase as a dummy to inherit functionality,
+    # but any test case class could be used ...
+    SanityTestCase.set_debug_flags("attach")
+    SanityTestCase.tempdir = SanityTestCase.get_tempdir()
+    SanityTestCase.assign_cpus(available_cpus[: SanityTestCase.get_cpus_required()])
+    SanityTestCase.setUpConstants()
+    vpp_cmdline = SanityTestCase.vpp_cmdline
+    print("Hacking cmdline to make VPP interactive.")
+    vpp_cmdline.insert(vpp_cmdline.index("nodaemon"), "interactive")
+    print("VPP cmdline is %s" % " ".join(vpp_cmdline))
+    print("Running GDB.")
+
+    if os.path.isfile(gdb_path) and os.access(gdb_path, os.X_OK):
+        gdb_cmdline = "%s --args %s " % (gdb_path, " ".join(vpp_cmdline))
+        print("GDB cmdline is %s" % gdb_cmdline)
+        gdb = pexpect.spawn(gdb_cmdline)
+        gdb.interact()
+        try:
+            gdb.terminate(True)
+        except:
+            pass
+        if gdb.isalive():
+            raise Exception("GDB refused to die...")
+    else:
+        sys.stderr.write(
+            "Debugger '%s' does not exist or is not an executable..\n" % gdb_path
+        )