Index: lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h =================================================================== --- lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h +++ lldb/trunk/include/lldb/Utility/ReproducerInstrumentation.h @@ -40,7 +40,7 @@ template <> inline void stringify_append(llvm::raw_string_ostream &ss, const char *t) { - ss << t; + ss << '\"' << t << '\"'; } template @@ -105,8 +105,8 @@ } #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 @@ } #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 @@ } #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 @@ } #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 @@ SerializeAll(tail...); } - void SerializeAll() { - m_stream.flush(); - } + void SerializeAll() { m_stream.flush(); } private: /// Serialize pointers. We need to differentiate between pointers to Index: lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py +++ lldb/trunk/packages/Python/lldbsuite/test/api/log/TestAPILog.py @@ -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)