JDevlieghere created this revision. JDevlieghere added reviewers: jasonmolenda, jingham. Herald added a project: All. JDevlieghere requested review of this revision.
Jason noted that the stop message we print for a memory high water mark notification (EXC_RESOURCE) could be clearer. Currently, the stop message looks like this: * thread #3, queue = 'com.apple.CFNetwork.LoaderQ', stop reason = EXC_RESOURCE RESOURCE_TYPE_MEMORY (limit=14 MB, unused=0x0) frame #0: 0x00000001f6a8c09c dyld`dyld4::APIs::dyld_shared_cache_some_image_overridden() dyld`dyld4::APIs::dyld_shared_cache_some_image_overridden: -> 0x1f6a8c09c <+0>: pacibsp 0x1f6a8c0a0 <+4>: sub sp, sp, #0x30 0x1f6a8c0a4 <+8>: stp x20, x19, [sp, #0x10] 0x1f6a8c0a8 <+12>: stp x29, x30, [sp, #0x20] It's hard to read the message because the exception and the types (EXC_RESOURCE RESOURCE_TYPE_MEMORY) blend together. Additionally, the "observed=0x0" should not be printed for memory limit exceptions. I wanted to continue to include the resource type from `<kern/exc_resource.h>` while also explaining what it actually is. With this path, the stop reason now looks like this: * thread #5, stop reason = EXC_RESOURCE (RESOURCE_TYPE_MEMORY: high watermark memory limit exceeded) (limit=14 MB) frame #0: 0x000000022500bb90 libsystem_pthread.dylib`start_wqthread libsystem_pthread.dylib`start_wqthread: -> 0x22500bb90 <+0>: stp xzr, xzr, [sp, #-0x10]! 0x22500bb94 <+4>: bl 0x22500bcd8 ; _pthread_wqthread 0x22500bb98 <+8>: brk #0x1 rdar://40466897 https://reviews.llvm.org/D131130 Files: lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp Index: lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp =================================================================== --- lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp +++ lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp @@ -410,7 +410,7 @@ switch (resource_type) { case RESOURCE_TYPE_CPU: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_CPU"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_CPU: CPU usage monitor tripped)"; snprintf(code_desc_buf, sizeof(code_desc_buf), "%d%%", (int)EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE(m_exc_code)); snprintf(subcode_desc_buf, sizeof(subcode_desc_buf), "%d%%", @@ -418,7 +418,7 @@ m_exc_subcode)); break; case RESOURCE_TYPE_WAKEUPS: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_WAKEUPS"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_WAKEUPS: idle wakeups monitor tripped)"; snprintf( code_desc_buf, sizeof(code_desc_buf), "%d w/s", (int)EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_PERMITTED(m_exc_code)); @@ -427,11 +427,11 @@ m_exc_subcode)); break; case RESOURCE_TYPE_MEMORY: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_MEMORY"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_MEMORY: high watermark memory limit exceeded)"; snprintf(code_desc_buf, sizeof(code_desc_buf), "%d MB", (int)EXC_RESOURCE_HWM_DECODE_LIMIT(m_exc_code)); subcode_desc = nullptr; - subcode_label = "unused"; + subcode_label = nullptr; break; #if defined(RESOURCE_TYPE_IO) // RESOURCE_TYPE_IO is introduced in macOS SDK 10.12. @@ -470,7 +470,7 @@ if (m_exc_data_count >= 2) { if (subcode_desc) strm.Printf(", %s=%s", subcode_label, subcode_desc); - else + else if (subcode_label) strm.Printf(", %s=0x%" PRIx64, subcode_label, m_exc_subcode); }
Index: lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp =================================================================== --- lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp +++ lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp @@ -410,7 +410,7 @@ switch (resource_type) { case RESOURCE_TYPE_CPU: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_CPU"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_CPU: CPU usage monitor tripped)"; snprintf(code_desc_buf, sizeof(code_desc_buf), "%d%%", (int)EXC_RESOURCE_CPUMONITOR_DECODE_PERCENTAGE(m_exc_code)); snprintf(subcode_desc_buf, sizeof(subcode_desc_buf), "%d%%", @@ -418,7 +418,7 @@ m_exc_subcode)); break; case RESOURCE_TYPE_WAKEUPS: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_WAKEUPS"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_WAKEUPS: idle wakeups monitor tripped)"; snprintf( code_desc_buf, sizeof(code_desc_buf), "%d w/s", (int)EXC_RESOURCE_CPUMONITOR_DECODE_WAKEUPS_PERMITTED(m_exc_code)); @@ -427,11 +427,11 @@ m_exc_subcode)); break; case RESOURCE_TYPE_MEMORY: - exc_desc = "EXC_RESOURCE RESOURCE_TYPE_MEMORY"; + exc_desc = "EXC_RESOURCE (RESOURCE_TYPE_MEMORY: high watermark memory limit exceeded)"; snprintf(code_desc_buf, sizeof(code_desc_buf), "%d MB", (int)EXC_RESOURCE_HWM_DECODE_LIMIT(m_exc_code)); subcode_desc = nullptr; - subcode_label = "unused"; + subcode_label = nullptr; break; #if defined(RESOURCE_TYPE_IO) // RESOURCE_TYPE_IO is introduced in macOS SDK 10.12. @@ -470,7 +470,7 @@ if (m_exc_data_count >= 2) { if (subcode_desc) strm.Printf(", %s=%s", subcode_label, subcode_desc); - else + else if (subcode_label) strm.Printf(", %s=0x%" PRIx64, subcode_label, m_exc_subcode); }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits