Fixed MacOS generated coredumps process 0 bug (#2111)
authorMike McLaughlin <mikem@microsoft.com>
Tue, 23 Mar 2021 02:43:52 +0000 (19:43 -0700)
committerGitHub <noreply@github.com>
Tue, 23 Mar 2021 02:43:52 +0000 (19:43 -0700)
src/SOS/SOS.Extensions/HostServices.cs
src/SOS/Strike/dbgengservices.cpp
src/SOS/extensions/extensions.cpp
src/SOS/lldbplugin/services.cpp

index 885e452d668c2a98adc3e33f0cb031bdbc7053dd..e8b93fe74f9ed5b1984089b7eb554200a79b26f4 100644 (file)
@@ -235,21 +235,14 @@ namespace SOS.Extensions
             uint processId)
         {
             Trace.TraceInformation($"HostServices.UpdateTarget {processId}");
-            if (processId == 0)
+            if (_target == null)
             {
-                DestroyTarget(self);
+                return CreateTarget(self);
             }
-            else
+            else if (_target.ProcessId.GetValueOrDefault() != processId)
             {
-                if (_target == null)
-                {
-                    return CreateTarget(self);
-                }
-                else if (_target.ProcessId.GetValueOrDefault() != processId)
-                {
-                    DestroyTarget(self);
-                    return CreateTarget(self);
-                }
+                DestroyTarget(self);
+                return CreateTarget(self);
             }
             return HResult.S_OK;
         }
index 0c398b39ab0c0916a34712242927bd0f853a19ee..bd11981aeebfabd206d9ae2a4c58c16e2e01a3ab 100644 (file)
@@ -503,14 +503,21 @@ HRESULT DbgEngServices::ChangeEngineState(
         if (((Argument & DEBUG_STATUS_MASK) == DEBUG_STATUS_BREAK) && ((Argument & DEBUG_STATUS_INSIDE_WAIT) == 0))
         {
             ULONG processId = 0;
-            m_system->GetCurrentProcessSystemId(&processId);
-            m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: processId %d\n", processId);
+            if (FAILED(m_system->GetCurrentProcessSystemId(&processId)))
+            {
+                m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: DestroyTarget\n");
+                Extensions::GetInstance()->DestroyTarget();
+            }
+            else 
+            {
+                m_control->Output(DEBUG_OUTPUT_NORMAL, "ChangeEngineState: processId %d\n", processId);
 
-            // Has the process changed since the last commmand?
-            Extensions::GetInstance()->UpdateTarget(processId);
+                // Has the process changed since the last commmand?
+                Extensions::GetInstance()->UpdateTarget(processId);
 
-            // Flush the target when the debugger target breaks
-            Extensions::GetInstance()->FlushTarget();
+                // Flush the target when the debugger target breaks
+                Extensions::GetInstance()->FlushTarget();
+            }
         }
     }
     return DEBUG_STATUS_NO_CHANGE;
index 410c8e89eb0e24a6959c32f719e79ed7fd967bce..0a5ca791f7bed71e0405c7cb6a29e59ceb7c2b9d 100644 (file)
@@ -100,7 +100,11 @@ HRESULT Extensions::InitializeHostServices(
         return hr;
     }
     ULONG processId = 0;
-    m_pDebuggerServices->GetCurrentProcessSystemId(&processId);
+    if (FAILED(m_pDebuggerServices->GetCurrentProcessSystemId(&processId)))
+    {
+        m_pHostServices->DestroyTarget();
+        return S_OK;
+    }
     return m_pHostServices->UpdateTarget(processId);
 }
 
index 20256653a0693b0b7b6e45d75a3690d67214744e..c9a584952d0ee83c8b68661f873055f994847fd1 100644 (file)
@@ -2578,7 +2578,7 @@ LLDBServices::FlushCheck()
     }
     else 
     {
-        Extensions::GetInstance()->UpdateTarget(0);
+        Extensions::GetInstance()->DestroyTarget();
     }
 }