From: Med Ismail Bennani Date: Wed, 9 Mar 2022 00:34:31 +0000 (-0800) Subject: [lldb/crashlog] Make interactive mode display more user-friendly X-Git-Tag: upstream/15.0.7~14009 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d097a6b932c8eb0ee114282aa5456f1d0242d01;p=platform%2Fupstream%2Fllvm.git [lldb/crashlog] Make interactive mode display more user-friendly This patch makes the crashlog interactive mode show the scripted process status with the crashed scripted thread backtrace after launching it. rdar://89634338 Differential Revision: https://reviews.llvm.org/D121038 Signed-off-by: Med Ismail Bennani --- diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py index 9a669b5..50e1ebf 100755 --- a/lldb/examples/python/crashlog.py +++ b/lldb/examples/python/crashlog.py @@ -28,8 +28,10 @@ from __future__ import print_function import cmd +import contextlib import datetime import glob +import json import optparse import os import platform @@ -41,7 +43,6 @@ import subprocess import sys import time import uuid -import json try: # First try for LLDB in case PYTHONPATH is already correctly setup. @@ -1017,6 +1018,31 @@ def load_crashlog_in_scripted_process(debugger, crash_log_file): error = lldb.SBError() process = target.Launch(launch_info, error) + if not process or error.Fail(): + return + + @contextlib.contextmanager + def synchronous(debugger): + async_state = debugger.GetAsync() + debugger.SetAsync(False) + try: + yield + finally: + debugger.SetAsync(async_state) + + with synchronous(debugger): + run_options = lldb.SBCommandInterpreterRunOptions() + run_options.SetStopOnError(True) + run_options.SetStopOnCrash(True) + run_options.SetEchoCommands(True) + + commands_stream = lldb.SBStream() + commands_stream.Print("process status\n") + commands_stream.Print("thread backtrace\n") + error = debugger.SetInputString(commands_stream.GetData()) + if error.Success(): + debugger.RunCommandInterpreter(True, False, run_options, 0, False, True) + def CreateSymbolicateCrashLogOptions( command_name, description, diff --git a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test index c82c183..10ceb36 100644 --- a/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test +++ b/lldb/test/Shell/ScriptInterpreter/Python/Crashlog/scripted_crashlog_json.test @@ -4,9 +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":20, "bar":9, "foo":16}' --json -# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog -i %t.crash' -o 'process status' 2>&1 | FileCheck %s +# RUN: %lldb %t.out -o 'command script import lldb.macosx.crashlog' -o 'crashlog -i %t.crash' 2>&1 | FileCheck %s # CHECK: "crashlog" {{.*}} commands have been installed, use the "--help" options on these commands -# CHECK: Process 92190 stopped -# CHECK: * thread #1, name = 'CrashLogScriptedThread.thread-0', stop reason = EXC_BAD_ACCESS -# CHECK: frame #0: 0x0000000104a23f68 scripted_crashlog_json.test.tmp.out`foo at test.c:3:6 [artificial] +# CHECK: (lldb) process status +# CHECK-NEXT: Process 92190 stopped +# CHECK-NEXT: * thread #1, name = 'CrashLogScriptedThread.thread-0', stop reason = EXC_BAD_ACCESS +# CHECK-NEXT: frame #0: 0x0000000104a23f68 scripted_crashlog_json.test.tmp.out`foo at test.c:3:6 [artificial] + +# CHECK: (lldb) thread backtrace +# CHECK-NEXT: * thread #1, name = 'CrashLogScriptedThread.thread-0', stop reason = EXC_BAD_ACCESS +# CHECK-NEXT: * frame #0: 0x0000000104a23f68 scripted_crashlog_json.test.tmp.out`foo at test.c:3:6 [artificial] +# CHECK-NEXT: frame #1: 0x0000000104a23f80 scripted_crashlog_json.test.tmp.out`bar at test.c:6:21 [artificial] +# CHECK-NEXT: frame #2: 0x0000000104a23fa0 scripted_crashlog_json.test.tmp.out`main(argc=, argv=) at test.c:8:35 [artificial] +# CHECK-NEXT: frame #3: 0x0000000104a6108c dyld`start(kernArgs=) at dyldMain.cpp:879:18 [opt] [artificial]