[Lldb-commits] [lldb] r271312 - Implement ProcessInfo::Dump(), log gdb-remote stub launch

Todd Fiala via lldb-commits lldb-commits at lists.llvm.org
Tue May 31 11:32:21 PDT 2016


Author: tfiala
Date: Tue May 31 13:32:20 2016
New Revision: 271312

URL: http://llvm.org/viewvc/llvm-project?rev=271312&view=rev
Log:
Implement ProcessInfo::Dump(), log gdb-remote stub launch

This change implements dumping the executable, triple,
args and environment when using ProcessInfo::Dump().

It also tweaks the way Args::Dump() works so that it prints
a configurable label rather than argv[{index}]={value}. By
default it behaves the same, but if the Dump() method with
the additional arg is provided, it can be overridden. The
environment variables dumped as part of ProcessInfo::Dump()
make use of that.

lldb-server has been modified to dump the gdb-remote stub's
ProcessInfo before launching if the "gdb-remote process" channel
is logged.

Modified:
    lldb/trunk/include/lldb/Interpreter/Args.h
    lldb/trunk/source/Interpreter/Args.cpp
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
    lldb/trunk/source/Target/ProcessInfo.cpp

Modified: lldb/trunk/include/lldb/Interpreter/Args.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Interpreter/Args.h?rev=271312&r1=271311&r2=271312&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Interpreter/Args.h (original)
+++ lldb/trunk/include/lldb/Interpreter/Args.h Tue May 31 13:32:20 2016
@@ -91,14 +91,20 @@ public:
     ~Args();
 
     //------------------------------------------------------------------
-    /// Dump all arguments to the stream \a s.
+    /// Dump all entries to the stream \a s using label \a label_name.
+    ///
+    /// If label_name is nullptr, the dump operation is skipped.
     ///
     /// @param[in] s
     ///     The stream to which to dump all arguments in the argument
     ///     vector.
+    /// @param[in] label_name
+    ///     The label_name to use as the label printed for each
+    ///     entry of the args like so:
+    ///       {label_name}[{index}]={value}
     //------------------------------------------------------------------
     void
-    Dump (Stream *s);
+    Dump (Stream &s, const char *label_name = "argv") const;
 
     //------------------------------------------------------------------
     /// Sets the command string contained by this object.

Modified: lldb/trunk/source/Interpreter/Args.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Args.cpp?rev=271312&r1=271311&r2=271312&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/Args.cpp (original)
+++ lldb/trunk/source/Interpreter/Args.cpp Tue May 31 13:32:20 2016
@@ -83,19 +83,22 @@ Args::~Args ()
 }
 
 void
-Args::Dump (Stream *s)
+Args::Dump (Stream &s, const char *label_name) const
 {
+    if (!label_name)
+        return;
+
     const size_t argc = m_argv.size();
     for (size_t i=0; i<argc; ++i)
     {
-        s->Indent();
+        s.Indent();
         const char *arg_cstr = m_argv[i];
         if (arg_cstr)
-            s->Printf("argv[%zi]=\"%s\"\n", i, arg_cstr);
+            s.Printf("%s[%zi]=\"%s\"\n", label_name, i, arg_cstr);
         else
-            s->Printf("argv[%zi]=NULL\n", i);
+            s.Printf("%s[%zi]=NULL\n", label_name, i);
     }
-    s->EOL();
+    s.EOL();
 }
 
 bool

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp?rev=271312&r1=271311&r2=271312&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp Tue May 31 13:32:20 2016
@@ -1120,7 +1120,7 @@ GDBRemoteCommunication::StartDebugserver
 {
     Log *log (ProcessGDBRemoteLog::GetLogIfAllCategoriesSet (GDBR_LOG_PROCESS));
     if (log)
-        log->Printf ("GDBRemoteCommunication::%s(url=%s, port=%" PRIu16, __FUNCTION__, url ? url : "<empty>", port ? *port : uint16_t(0));
+        log->Printf ("GDBRemoteCommunication::%s(url=%s, port=%" PRIu16 ")", __FUNCTION__, url ? url : "<empty>", port ? *port : uint16_t(0));
 
     Error error;
     // If we locate debugserver, keep that located version around
@@ -1352,7 +1352,14 @@ GDBRemoteCommunication::StartDebugserver
         launch_info.AppendSuppressFileAction (STDIN_FILENO, true, false);
         launch_info.AppendSuppressFileAction (STDOUT_FILENO, false, true);
         launch_info.AppendSuppressFileAction (STDERR_FILENO, false, true);
-        
+
+        if (log)
+        {
+            StreamString string_stream;
+            Platform *const platform = nullptr;
+            launch_info.Dump(string_stream, platform);
+            log->Printf("launch info for gdb-remote stub:\n%s", string_stream.GetString().c_str());
+        }
         error = Host::LaunchProcess(launch_info);
         
         if (error.Success() &&

Modified: lldb/trunk/source/Target/ProcessInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ProcessInfo.cpp?rev=271312&r1=271311&r2=271312&view=diff
==============================================================================
--- lldb/trunk/source/Target/ProcessInfo.cpp (original)
+++ lldb/trunk/source/Target/ProcessInfo.cpp Tue May 31 13:32:20 2016
@@ -15,6 +15,8 @@
 // Project includes
 #include "lldb/Target/ProcessInfo.h"
 
+#include "lldb/Core/Stream.h"
+
 using namespace lldb;
 using namespace lldb_private;
 
@@ -65,6 +67,21 @@ ProcessInfo::GetNameLength() const
 }
 
 void
+ProcessInfo::Dump (Stream &s, Platform *platform) const
+{
+    s << "Executable: " << GetName() << "\n";
+    s << "Triple: ";
+    m_arch.DumpTriple(s);
+    s << "\n";
+
+    s << "Arguments:\n";
+    m_arguments.Dump(s);
+
+    s << "Environment:\n";
+    m_environment.Dump(s, "env");
+}
+
+void
 ProcessInfo::SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg)
 {
     if (exe_file)




More information about the lldb-commits mailing list