From 33e3b07af3ce9595f49c75a8af559bdec5cc19fa Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Mon, 7 Dec 2020 20:31:07 -0800 Subject: [PATCH] [lldb] Include thread id in the reproducer trace (NFC) Include the current thread ID in the reproducer trace during capture/recording. --- .../lldb/Utility/ReproducerInstrumentation.h | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lldb/include/lldb/Utility/ReproducerInstrumentation.h b/lldb/include/lldb/Utility/ReproducerInstrumentation.h index 5fc33ad..8e319d7 100644 --- a/lldb/include/lldb/Utility/ReproducerInstrumentation.h +++ b/lldb/include/lldb/Utility/ReproducerInstrumentation.h @@ -17,6 +17,7 @@ #include "llvm/Support/ErrorHandling.h" #include +#include #include template inline std::string stringify_args(const Ts &... ts) { // is initialized or enabled. // #define LLDB_REPRO_INSTR_TRACE +#ifdef LLDB_REPRO_INSTR_TRACE +inline llvm::raw_ostream &this_thread_id() { + size_t tid = std::hash{}(std::this_thread::get_id()); + return llvm::errs().write_hex(tid) << " :: "; +} +#endif + #define LLDB_REGISTER_CONSTRUCTOR(Class, Signature) \ R.Register(&construct::record, "", \ #Class, #Class, #Signature) @@ -600,8 +608,8 @@ private: /// objects (in which case we serialize their index). template void Serialize(T *t) { #ifdef LLDB_REPRO_INSTR_TRACE - llvm::errs() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " - << stringify_args(t) << "\n"; + this_thread_id() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " + << stringify_args(t) << "\n"; #endif if (std::is_fundamental::value) { Serialize(*t); @@ -616,8 +624,8 @@ private: /// to objects (in which case we serialize their index). template void Serialize(T &t) { #ifdef LLDB_REPRO_INSTR_TRACE - llvm::errs() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " - << stringify_args(t) << "\n"; + this_thread_id() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " + << stringify_args(t) << "\n"; #endif if (is_trivially_serializable::value) { m_stream.write(reinterpret_cast(&t), sizeof(T)); @@ -637,8 +645,8 @@ private: void Serialize(const char *t) { #ifdef LLDB_REPRO_INSTR_TRACE - llvm::errs() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " - << stringify_args(t) << "\n"; + this_thread_id() << "Serializing with " << LLVM_PRETTY_FUNCTION << " -> " + << stringify_args(t) << "\n"; #endif const size_t size = t ? strlen(t) : std::numeric_limits::max(); Serialize(size); @@ -842,8 +850,8 @@ private: #ifdef LLDB_REPRO_INSTR_TRACE void Log(unsigned id) { - llvm::errs() << "Recording " << id << ": " << m_pretty_func << " (" - << m_pretty_args << ")\n"; + this_thread_id() << "Recording " << id << ": " << m_pretty_func << " (" + << m_pretty_args << ")\n"; } #endif -- 2.7.4