[tools] Add error handling to no_arg_cmd

Currently, it can be little difficult to understand why a command in
lldb-commands.py stops working. For example, at the moment running the
jlh command results in an empty line:

$ lldb --one-line "command script import ../../tools/lldb_commands.py" \
     v8_hello_world
(lldb) br s -f hello-world.cc -l 49
(lldb) jlh script

(lldb)

With this commit this would instead display the following error message:

(lldb) jlh script
Failed to evaluate command
_v8_internal_Print_Object(*(v8::internal::Object**)(*(void*)(script))) :
error: cannot cast from type 'v8::Local<v8::Script>' to pointer type
'void *'

The output is really only two lines but I've wrapped the lines here so
they don't exceed the 72 column width. I'll follow up with a commit to
fix the issue reported.

Change-Id: I634a412b616dad7cadd74dce36418d27c1997777
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2083477
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Commit-Queue: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#68093}
This commit is contained in:
Daniel Bevenius 2020-03-16 05:54:24 +01:00 committed by Commit Bot
parent 1f5842ad7a
commit fcac59ad8a

View File

@ -21,8 +21,17 @@ def current_frame(debugger):
return current_thread(debugger).GetSelectedFrame()
def no_arg_cmd(debugger, cmd):
current_frame(debugger).EvaluateExpression(cmd)
print("")
evaluate_result = current_frame(debugger).EvaluateExpression(cmd)
# When a void function is called the return value type is 0x1001 which
# is specified in http://tiny.cc/bigskz. This does not indicate
# an error so we check for that value below.
kNoResult = 0x1001
error = evaluate_result.GetError()
if error.fail and error.value != kNoResult:
print("Failed to evaluate command {} :".format(cmd))
print(error.description)
else:
print("")
def ptr_arg_cmd(debugger, name, param, cmd):
if not param:
@ -41,7 +50,7 @@ def job(debugger, param, *args):
def jlh(debugger, param, *args):
"""Print v8::Local handle value"""
ptr_arg_cmd(debugger, 'jlh', param,
"_v8_internal_Print_Object(*(v8::internal::Object**)(*{}))")
"_v8_internal_Print_Object(*(v8::internal::Object**)({}.val_))")
def jco(debugger, param, *args):
"""Print the code object at the given pc (default: current pc)"""