mib created this revision. mib added a reviewer: JDevlieghere. Herald added a project: All. mib requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Previously, the ScriptedThread used the thread index as the thread id. This patch parses the crashlog json to extract the actual thread "id" value, and passes this information to the Crashlog ScriptedProcess blueprint, to create a higher fidelity ScriptedThreaad. It also updates the blueprint to return the thread queue, and removes the thread placeholder name. Finally, this patch updates the interactive crashlog test to reflect these changes. Signed-off-by: Med Ismail Bennani <medismail.benn...@gmail.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D122422 Files: lldb/examples/python/crashlog.py lldb/examples/python/scripted_process/crashlog_scripted_process.py lldb/examples/python/scripted_process/scripted_process.py lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test
Index: lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test =================================================================== --- lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test +++ lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test @@ -4,17 +4,17 @@ # RUN: cp %S/Inputs/scripted_crashlog.ips %t.crash # RUN: %python %S/patch-crashlog.py --binary %t.out --crashlog %t.crash --offsets '{"main":160, "bar":20, "foo":24}' --json -# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog -a -i %t.crash' 2>&1 -o "bt all" | FileCheck %s +# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog -a -i %t.crash' 2>&1 -o "thread list" -o "bt all" | FileCheck %s # CHECK: "crashlog" {{.*}} commands have been installed, use the "--help" options on these commands # CHECK: (lldb) process status # CHECK-NEXT: Process 24991 stopped -# CHECK-NEXT: * thread #3, name = 'CrashLogScriptedThread.thread-2', stop reason = EXC_BAD_ACCESS +# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS # CHECK-NEXT: frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar # CHECK: (lldb) thread backtrace -# CHECK-NEXT: * thread #3, name = 'CrashLogScriptedThread.thread-2', stop reason = EXC_BAD_ACCESS +# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS # CHECK-NEXT: * frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar # CHECK-NEXT: frame #1: 0x00000001047f5998 scripted_crashlog_json.test.tmp.out`foo # CHECK-NEXT: frame #2: 0x00000001047f5b04 scripted_crashlog_json.test.tmp.out`compute_pow @@ -24,14 +24,21 @@ # CHECK-NEXT: frame #6: 0x000000018bf5326c libsystem_pthread.dylib`_pthread_start # CHECK-NEXT: frame #7: 0x000000018bf4e08c libsystem_pthread.dylib`thread_start +# CHECK: (lldb) thread list +# CHECK-NEXT: Process 24991 stopped +# CHECK-NEXT: thread #1: tid = 0x4ea840, 0x000000018bf17854 libsystem_kernel.dylib`__ulock_wait{{.*}}, queue = 'com.apple.main-thread' +# CHECK-NEXT: thread #2: tid = 0x4ea850, 0x00000001047f59e8 scripted_crashlog_json.test.tmp.out`call_and_wait +# CHECK-NEXT: * thread #3: tid = 0x4ea851, 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar{{.*}}, stop reason = EXC_BAD_ACCESS + + # CHECK: (lldb) bt all -# CHECK-NEXT: thread #1, name = 'CrashLogScriptedThread.thread-0' +# CHECK-NEXT: thread #1 # CHECK-NEXT: frame #0: 0x000000018bf17854 libsystem_kernel.dylib`__ulock_wait # CHECK-NEXT: frame #1: 0x000000018bf555a0 libsystem_pthread.dylib`_pthread_join # CHECK-NEXT: frame #2: 0x000000018beae9c0 libc++.1.dylib`std::__1::thread::join # CHECK-NEXT: frame #3: 0x00000001047f5bb8 scripted_crashlog_json.test.tmp.out`main # CHECK-NEXT: frame #4: 0x0000000104ae5088 dyld`start -# CHECK-NEXT: thread #2, name = 'CrashLogScriptedThread.thread-1' +# CHECK-NEXT: thread #2 # CHECK-NEXT: frame #0: 0x00000001047f59e8 scripted_crashlog_json.test.tmp.out`call_and_wait # CHECK-NEXT: frame #1: 0x00000001047f59d4 scripted_crashlog_json.test.tmp.out`call_and_wait # CHECK-NEXT: frame #2: 0x00000001047f7690 scripted_crashlog_json.test.tmp.out`decltype @@ -39,7 +46,7 @@ # CHECK-NEXT: frame #4: 0x00000001047f6d58 scripted_crashlog_json.test.tmp.out`void* std::__1::__thread_proxy # CHECK-NEXT: frame #5: 0x000000018bf5326c libsystem_pthread.dylib`_pthread_start # CHECK-NEXT: frame #6: 0x000000018bf4e08c libsystem_pthread.dylib`thread_start -# CHECK-NEXT: * thread #3, name = 'CrashLogScriptedThread.thread-2', stop reason = EXC_BAD_ACCESS +# CHECK-NEXT: * thread #3, stop reason = EXC_BAD_ACCESS # CHECK-NEXT: * frame #0: 0x00000001047f5970 scripted_crashlog_json.test.tmp.out`bar # CHECK-NEXT: frame #1: 0x00000001047f5998 scripted_crashlog_json.test.tmp.out`foo # CHECK-NEXT: frame #2: 0x00000001047f5b04 scripted_crashlog_json.test.tmp.out`compute_pow Index: lldb/examples/python/scripted_process/scripted_process.py =================================================================== --- lldb/examples/python/scripted_process/scripted_process.py +++ lldb/examples/python/scripted_process/scripted_process.py @@ -220,7 +220,7 @@ self.process = None self.args = None - self.id = None + self.tid = None self.idx = None self.name = None self.queue = None Index: lldb/examples/python/scripted_process/crashlog_scripted_process.py =================================================================== --- lldb/examples/python/scripted_process/crashlog_scripted_process.py +++ lldb/examples/python/scripted_process/crashlog_scripted_process.py @@ -135,14 +135,19 @@ self.backing_thread = crashlog_thread self.idx = self.backing_thread.index + self.tid = self.backing_thread.id + self.queue = self.backing_thread.queue self.has_crashed = (self.scripted_process.crashed_thread_idx == self.idx) self.create_stackframes() def get_thread_id(self) -> int: - return self.idx + return self.tid def get_name(self) -> str: - return CrashLogScriptedThread.__name__ + ".thread-" + str(self.idx) + return self.name + + def get_queue(self) -> str: + return self.queue def get_state(self): if not self.has_crashed: Index: lldb/examples/python/crashlog.py =================================================================== --- lldb/examples/python/crashlog.py +++ lldb/examples/python/crashlog.py @@ -76,6 +76,7 @@ def __init__(self, index, app_specific_backtrace): self.index = index + self.id = index self.frames = list() self.idents = list() self.registers = dict() @@ -522,13 +523,16 @@ thread = self.crashlog.Thread(idx, False) if 'name' in json_thread: thread.reason = json_thread['name'] + if 'id' in json_thread: + thread.id = int(json_thread['id']) if json_thread.get('triggered', False): self.crashlog.crashed_thread_idx = idx thread.crashed = True if 'threadState' in json_thread: thread.registers = self.parse_thread_registers( json_thread['threadState']) - thread.queue = json_thread.get('queue') + if 'queue' in json_thread: + thread.queue = json_thread.get('queue') self.parse_frames(thread, json_thread.get('frames', [])) self.crashlog.threads.append(thread) idx += 1
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits