Add gchist SOS commands for Unix (#5127)
authorJan Vorlicek <janvorli@microsoft.com>
Fri, 20 May 2016 16:49:48 +0000 (18:49 +0200)
committerJan Vorlicek <janvorli@microsoft.com>
Fri, 20 May 2016 16:49:48 +0000 (18:49 +0200)
This change adds HistClear, HistInit, HistObj, HistObjFind and HistRoot
commands to SOS on Unix

src/ToolBox/SOS/Strike/CMakeLists.txt
src/ToolBox/SOS/Strike/gchist.cpp
src/ToolBox/SOS/Strike/stressLogDump.cpp
src/ToolBox/SOS/lldbplugin/soscommand.cpp

index 88089c6193566ebad0ebcff6d890d9e018b762e3..f832e764fc16c5abffdb57a77b670c8367a03090 100644 (file)
@@ -114,6 +114,7 @@ else(WIN32)
     datatarget.cpp
     eeheap.cpp
     exts.cpp
+    gchist.cpp
     gcroot.cpp
     metadata.cpp
     sildasm.cpp
index 162580d7e23dc2226f4642f056a7f19f506c8b60..ee9d5b4033f9da2cb361c8f7756935d5d542af97 100644 (file)
 #include <string.h>
 #include <stddef.h>
 
+#include "strike.h"
 // We need to define the target address type.  This will be used in the 
 // functions that read directly from the debuggee address space, vs. using 
 // the DAC tgo read the DAC-ized data structures.
 #include "daccess.h"
 //#include "dbgeng.h"
 
-#include "strike.h"
 
 #ifndef STRESS_LOG
 #define STRESS_LOG
index 45a4343263de06890698dfeabf7b7c0c5164e9de..f277f9243491fad9b99bfe845cece578fd457a5e 100644 (file)
 #include "stresslog.h"
 
 
-#ifndef FEATURE_PAL
 void GcHistClear();
 void GcHistAddLog(LPCSTR msg, StressMsg* stressMsg);
-#endif
 
 
 /*********************************************************************************/
@@ -334,12 +332,7 @@ HRESULT StressLog::Dump(ULONG64 outProcLog, const char* fileName, struct IDebugD
 
     if (bDoGcHist)
     {
-#ifdef FEATURE_PAL
-        ExtOut ("GC history not supported\n");
-        return S_FALSE;
-#else
         GcHistClear();
-#endif
     }
     else
     {
@@ -496,13 +489,11 @@ HRESULT StressLog::Dump(ULONG64 outProcLog, const char* fileName, struct IDebugD
             double deltaTime = ((double) (latestMsg->timeStamp - inProcLog.startTimeStamp)) / inProcLog.tickFrequency;
             if (bDoGcHist)
             {
-#ifndef FEATURE_PAL
                 if (strcmp(format, ThreadStressLog::TaskSwitchMsg()) == 0)
                 {
                     latestLog->threadId = (unsigned)(size_t)latestMsg->args[0];
                 }
                 GcHistAddLog(format, latestMsg);                                
-#endif // FEATURE_PAL
             }
             else
             {
index 888cae416cf78b4725f02877a2d18b7127a4f55d..4ca7ce37f3fe293890394f65977e7acdf44df31b 100644 (file)
@@ -142,6 +142,11 @@ sosCommandInitialize(lldb::SBDebugger debugger)
     interpreter.AddCommand("ip2md", new sosCommand("IP2MD"), "Displays the MethodDesc structure at the specified address in code that has been JIT-compiled.");
     interpreter.AddCommand("name2ee", new sosCommand("Name2EE"), "Displays the MethodTable structure and EEClass structure for the specified type or method in the specified module.");
     interpreter.AddCommand("pe", new sosCommand("PrintException"), "Displays and formats fields of any object derived from the Exception class at the specified address.");
+    interpreter.AddCommand("histclear", new sosCommand("HistClear"), "Releases any resources used by the family of Hist commands.");
+    interpreter.AddCommand("histinit", new sosCommand("HistInit"), "Initializes the SOS structures from the stress log saved in the debuggee.");
+    interpreter.AddCommand("histobj", new sosCommand("HistObj"), "Examines all stress log relocation records and displays the chain of garbage collection relocations that may have led to the address passed in as an argument.");
+    interpreter.AddCommand("histobjfind", new sosCommand("HistObjFind"), "Displays all the log entries that reference an object at the specified address.");
+    interpreter.AddCommand("histroot", new sosCommand("HistRoot"), "Displays information related to both promotions and relocations of the specified root.");
     interpreter.AddCommand("soshelp", new sosCommand("Help"), "Displays all available commands when no parameter is specified, or displays detailed help information about the specified command. soshelp <command>");
     return true;
 }