Cython/Debugger/Cygdb.py: Add debug logging with `logging` module
authorMarc Abramowitz <marc@marc-abramowitz.com>
Sat, 12 Oct 2013 17:17:35 +0000 (10:17 -0700)
committerMarc Abramowitz <marc@marc-abramowitz.com>
Sun, 13 Oct 2013 10:03:31 +0000 (03:03 -0700)
Cython/Debugger/Cygdb.py

index 54577eb..8b7a937 100644 (file)
@@ -18,6 +18,9 @@ import tempfile
 import textwrap
 import subprocess
 import optparse
+import logging
+
+logger = logging.getLogger(__name__)
 
 def make_command_file(path_to_debug_info, prefix_code='', no_import=False):
     if not no_import:
@@ -78,6 +81,9 @@ def main(path_to_debug_info=None, gdb_argv=None, no_import=False):
     parser.add_option("--gdb-executable",
         dest="gdb", default='gdb',
         help="gdb executable to use [default: gdb]")
+    parser.add_option("--verbose", "-v",
+        dest="verbosity", action="count", default=0,
+        help="Verbose mode. Multiple -v options increase the verbosity")
 
     (options, args) = parser.parse_args()
     if path_to_debug_info is None:
@@ -92,13 +98,34 @@ def main(path_to_debug_info=None, gdb_argv=None, no_import=False):
     if path_to_debug_info == '--':
         no_import = True
 
+    logging_level = logging.WARN
+    if options.verbosity == 1:
+        logging_level = logging.INFO
+    if options.verbosity == 2:
+        logging_level = logging.DEBUG
+    logging.basicConfig(level=logging_level)
+
+    logger.info("verbosity = %r", options.verbosity)
+    logger.debug("options = %r; args = %r", options, args)
+    logger.debug("Done parsing command-line options. path_to_debug_info = %r, gdb_argv = %r",
+        path_to_debug_info, gdb_argv)
+
     tempfilename = make_command_file(path_to_debug_info, no_import=no_import)
+    logger.info("Launching %s with command file: %s and gdb_argv: %s",
+        options.gdb, tempfilename, gdb_argv)
+    logger.debug('Command file (%s) contains: """\n%s"""', tempfilename, open(tempfilename).read())
+    logger.info("Spawning %s...", options.gdb)
     p = subprocess.Popen([options.gdb, '-command', tempfilename] + gdb_argv)
+    logger.info("Spawned %s (pid %d)", options.gdb, p.pid)
     while True:
         try:
-            p.wait()
+            logger.debug("Waiting for gdb (pid %d) to exit...", p.pid)
+            ret = p.wait()
+            logger.debug("Wait for gdb (pid %d) to exit is done. Returned: %r", p.pid, ret)
         except KeyboardInterrupt:
             pass
         else:
             break
+    logger.debug("Removing temp command file: %s", tempfilename)
     os.remove(tempfilename)
+    logger.debug("Removed temp command file: %s", tempfilename)