Author: jdevlieghere
Date: Fri Sep 13 12:08:10 2019
New Revision: 371885

URL: http://llvm.org/viewvc/llvm-project?rev=371885&view=rev
Log:
[Reproducer] Include the this pointer in the API log.

The new centralized way of doing API logging through the reproducer
macros is lacking a way to easily correlate instances of API objects.
Logging the this pointer makes that significantly easier. For methods
this is now always passed as the first argument, similar to the self
argument in Python.

This patch also adds a test case for API logging, which uncovered that
we were not quoting strings.

Differential revision: https://reviews.llvm.org/D67538

Added:
    lldb/trunk/packages/Python/lldbsuite/test/api/log/
    lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py
Modified:
    lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h

Modified: lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h?rev=371885&r1=371884&r2=371885&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h (original)
+++ lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h Fri Sep 13 
12:08:10 2019
@@ -40,7 +40,7 @@ inline void stringify_append(llvm::raw_s
 template <>
 inline void stringify_append<char>(llvm::raw_string_ostream &ss,
                                    const char *t) {
-  ss << t;
+  ss << '\"' << t << '\"';
 }
 
 template <typename Head>
@@ -105,8 +105,8 @@ template <typename... Ts> inline std::st
   }
 
 #define LLDB_RECORD_METHOD(Result, Class, Method, Signature, ...)              
\
-  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              
\
-                                            stringify_args(__VA_ARGS__));      
\
+  lldb_private::repro::Recorder sb_recorder(                                   
\
+      LLVM_PRETTY_FUNCTION, stringify_args(*this, __VA_ARGS__));               
\
   if (lldb_private::repro::InstrumentationData data =                          
\
           LLDB_GET_INSTRUMENTATION_DATA()) {                                   
\
     sb_recorder.Record(                                                        
\
@@ -117,8 +117,8 @@ template <typename... Ts> inline std::st
   }
 
 #define LLDB_RECORD_METHOD_CONST(Result, Class, Method, Signature, ...)        
\
-  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              
\
-                                            stringify_args(__VA_ARGS__));      
\
+  lldb_private::repro::Recorder sb_recorder(                                   
\
+      LLVM_PRETTY_FUNCTION, stringify_args(*this, __VA_ARGS__));               
\
   if (lldb_private::repro::InstrumentationData data =                          
\
           LLDB_GET_INSTRUMENTATION_DATA()) {                                   
\
     sb_recorder.Record(                                                        
\
@@ -129,7 +129,8 @@ template <typename... Ts> inline std::st
   }
 
 #define LLDB_RECORD_METHOD_NO_ARGS(Result, Class, Method)                      
\
-  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             
\
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              
\
+                                            stringify_args(*this));            
\
   if (lldb_private::repro::InstrumentationData data =                          
\
           LLDB_GET_INSTRUMENTATION_DATA()) {                                   
\
     sb_recorder.Record(data.GetSerializer(), data.GetRegistry(),               
\
@@ -139,7 +140,8 @@ template <typename... Ts> inline std::st
   }
 
 #define LLDB_RECORD_METHOD_CONST_NO_ARGS(Result, Class, Method)                
\
-  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION);             
\
+  lldb_private::repro::Recorder sb_recorder(LLVM_PRETTY_FUNCTION,              
\
+                                            stringify_args(*this));            
\
   if (lldb_private::repro::InstrumentationData data =                          
\
           LLDB_GET_INSTRUMENTATION_DATA()) {                                   
\
     sb_recorder.Record(                                                        
\
@@ -542,9 +544,7 @@ public:
     SerializeAll(tail...);
   }
 
-  void SerializeAll() {
-    m_stream.flush();
-  }
+  void SerializeAll() { m_stream.flush(); }
 
 private:
   /// Serialize pointers. We need to differentiate between pointers to

Added: lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py?rev=371885&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py Fri Sep 13 
12:08:10 2019
@@ -0,0 +1,48 @@
+"""
+Test API logging.
+"""
+
+import re
+
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class APILogTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    NO_DEBUG_INFO_TESTCASE = True
+
+    def test_api_log(self):
+        """Test API logging"""
+        logfile = os.path.join(self.getBuildDir(), "api-log.txt")
+
+        def cleanup():
+            if os.path.exists(logfile):
+                os.unlink(logfile)
+
+        self.addTearDownHook(cleanup)
+        self.expect("log enable lldb api -f {}".format(logfile))
+
+        self.dbg.SetDefaultArchitecture(None)
+        self.dbg.GetScriptingLanguage(None)
+        target = self.dbg.CreateTarget(None)
+
+        print(logfile)
+        with open(logfile, 'r') as f:
+            log = f.read()
+
+        # Find the debugger addr.
+        debugger_addr = re.findall(
+            r"lldb::SBDebugger::GetScriptingLanguage\(const char \*\) 
\(0x([0-9a-fA-F]+),",
+            log)[0]
+
+        get_scripting_language = 'lldb::ScriptLanguage 
lldb::SBDebugger::GetScriptingLanguage(const char *) (0x{}, "")'.format(
+            debugger_addr)
+        create_target = 'lldb::SBTarget lldb::SBDebugger::CreateTarget(const 
char *) (0x{}, "")'.format(
+            debugger_addr)
+
+        self.assertTrue(get_scripting_language in log)
+        self.assertTrue(create_target in log)


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to