[libcxx-commits] [PATCH] D110334: [libcxx][pretty printers] Check GDB Python scripting support

David Spickett via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Sep 24 01:32:19 PDT 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rG0a36c72dee61: [libcxx][pretty printers] Check GDB Python scripting support (authored by DavidSpickett).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110334/new/

https://reviews.llvm.org/D110334

Files:
  libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
  libcxx/utils/libcxx/test/features.py


Index: libcxx/utils/libcxx/test/features.py
===================================================================
--- libcxx/utils/libcxx/test/features.py
+++ libcxx/utils/libcxx/test/features.py
@@ -10,6 +10,7 @@
 import re
 import shutil
 import sys
+import subprocess
 
 _isClang      = lambda cfg: '__clang__' in compilerMacros(cfg) and '__apple_build_version__' not in compilerMacros(cfg)
 _isAppleClang = lambda cfg: '__apple_build_version__' in compilerMacros(cfg)
@@ -159,10 +160,37 @@
   Feature(name='buildhost=windows', when=lambda cfg: platform.system().lower().startswith('windows'))
 ]
 
-# Detect whether GDB is on the system, and if so add a substitution to access it.
+# Detect whether GDB is on the system, has Python scripting and supports
+# adding breakpoint commands. If so add a substitution to access it.
+def check_gdb(cfg):
+  gdb_path = shutil.which('gdb')
+  if gdb_path is None:
+    return False
+
+  # Check that we can set breakpoint commands, which was added in 8.3.
+  # Using the quit command here means that gdb itself exits, not just
+  # the "python <...>" command.
+  test_src = """\
+try:
+  gdb.Breakpoint(\"main\").commands=\"foo\"
+except AttributeError:
+  gdb.execute(\"quit 1\")
+gdb.execute(\"quit\")"""
+
+  try:
+    stdout = subprocess.check_output(
+              [gdb_path, "-ex", "python " + test_src, "--batch"],
+              stderr=subprocess.DEVNULL, universal_newlines=True)
+  except subprocess.CalledProcessError:
+    # We can't set breakpoint commands
+    return False
+
+  # Check we actually ran the Python
+  return not "Python scripting is not supported" in stdout
+
 DEFAULT_FEATURES += [
-  Feature(name='host-has-gdb',
-    when=lambda cfg: shutil.which('gdb') is not None,
+  Feature(name='host-has-gdb-with-python',
+    when=check_gdb,
     actions=[AddSubstitution('%{gdb}', lambda cfg: shutil.which('gdb'))]
   )
 ]
Index: libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
===================================================================
--- libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
+++ libcxx/test/libcxx/gdb/gdb_pretty_printer_test.sh.cpp
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
-// REQUIRES: host-has-gdb
+// REQUIRES: host-has-gdb-with-python
 // UNSUPPORTED: libcpp-has-no-localization
 // UNSUPPORTED: c++03
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D110334.374752.patch
Type: text/x-patch
Size: 2374 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210924/fbac75af/attachment.bin>


More information about the libcxx-commits mailing list