[Lldb-commits] [lldb] ae016e4 - [lldb] Don't swallow crashlog exceptions
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Sat May 14 08:59:03 PDT 2022
Author: Jonas Devlieghere
Date: 2022-05-14T08:58:56-07:00
New Revision: ae016e4f7c856983420544794c48c4a2feb6c79a
URL: https://github.com/llvm/llvm-project/commit/ae016e4f7c856983420544794c48c4a2feb6c79a
DIFF: https://github.com/llvm/llvm-project/commit/ae016e4f7c856983420544794c48c4a2feb6c79a.diff
LOG: [lldb] Don't swallow crashlog exceptions
crashlog.py catches every exception in order to format them. This
results in both the exception name as well as the backtrace getting
swallowed.
Here's an example of the current output:
error: python exception: in method 'SBTarget_ResolveLoadAddress', argument 2 of type 'lldb::addr_t'
Compare this to the output without the custom exception handling:
Traceback (most recent call last):
File "[...]/site-packages/lldb/macosx/crashlog.py", line 929, in __call__
SymbolicateCrashLogs(debugger, shlex.split(command))
File "[...]/site-packages/lldb/macosx/crashlog.py", line 1239, in SymbolicateCrashLogs
SymbolicateCrashLog(crash_log, options)
File "[...]/site-packages/lldb/macosx/crashlog.py", line 1006, in SymbolicateCrashLog
thread.dump_symbolicated(crash_log, options)
File "[...]/site-packages/lldb/macosx/crashlog.py", line 124, in dump_symbolicated
symbolicated_frame_addresses = crash_log.symbolicate(
File "[...]/site-packages/lldb/utils/symbolication.py", line 540, in symbolicate
if symbolicated_address.symbolicate(verbose):
File "[...]/site-packages/lldb/utils/symbolication.py", line 98, in symbolicate
sym_ctx = self.get_symbol_context()
File "[...]/site-packages/lldb/utils/symbolication.py", line 77, in get_symbol_context
sb_addr = self.resolve_addr()
File "[...]/site-packages/lldb/utils/symbolication.py", line 69, in resolve_addr
self.so_addr = self.target.ResolveLoadAddress(self.load_addr)
File "[...]/site-packages/lldb/__init__.py", line 10675, in ResolveLoadAddress
return _lldb.SBTarget_ResolveLoadAddress(self, vm_addr)
OverflowError: in method 'SBTarget_ResolveLoadAddress', argument 2 of type 'lldb::addr_t'
This patch removes the custom exception handling and lets LLDB or the
default exception handler deal with it instead.
Differential revision: https://reviews.llvm.org/D125589
Added:
Modified:
lldb/examples/python/crashlog.py
Removed:
################################################################################
diff --git a/lldb/examples/python/crashlog.py b/lldb/examples/python/crashlog.py
index 33a64559d482..49c9a92497eb 100755
--- a/lldb/examples/python/crashlog.py
+++ b/lldb/examples/python/crashlog.py
@@ -925,10 +925,7 @@ def __init__(self, debugger, internal_dict):
pass
def __call__(self, debugger, command, exe_ctx, result):
- try:
- SymbolicateCrashLogs(debugger, shlex.split(command))
- except Exception as e:
- result.PutCString("error: python exception: %s" % e)
+ SymbolicateCrashLogs(debugger, shlex.split(command))
def get_short_help(self):
return "Symbolicate one or more darwin crash log files."
@@ -1020,11 +1017,7 @@ def load_crashlog_in_scripted_process(debugger, crash_log_file, options):
if not os.path.exists(crashlog_path):
result.PutCString("error: crashlog file %s does not exist" % crashlog_path)
- try:
- crashlog = CrashLogParser().parse(debugger, crashlog_path, False)
- except Exception as e:
- result.PutCString("error: python exception: %s" % e)
- return
+ crashlog = CrashLogParser().parse(debugger, crashlog_path, False)
if debugger.GetNumTargets() > 0:
target = debugger.GetTargetAtIndex(0)
More information about the lldb-commits
mailing list