在 Python 脚本中使用 LLDB 命令
Using LLDB Commands in Python Script
我正在编写 Python 脚本以用于 Xcode 的 LLDB。我有这个简单的脚本 运行:
import lldb
def say_hello(debugger, command, result, dict):
print command
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f sayhello.say_hello hello')
我想要做的是能够在 Python 脚本中使用 LLDB 的 XCUIApplication().debugDescription 函数的输出。那么有没有办法:
a) 在 python 脚本中访问 XCUIApplication()。
b) 将 XCUIApplication().debugDescription 作为输入传递给 Python 脚本中的 say_hello 函数。
IIRC XCUIApplication是XCTest框架提供的一个函数,所以它是你调试的程序中的一个函数。因此,您可以像调用任何其他函数一样调用它,在 SBTarget 或 SBFrame 上使用 "EvaluateExpression" API。计算表达式的结果将在 SBValue 中返回给你,你可以打印它或任何你需要的东西。
注意,除非你需要支持一个非常老的Xcode (6.x)否则使用新形式的python命令会更方便:
def command_function(debugger, command, exe_ctx, result, internal_dict):
exe_ctx 是命令为 运行 的 SBExecutionContext。如果你这样做,那么你可以这样做:
def command_function(debugger, command, exe_ctx, result, internal_dict):
options = lldb.SBExpressionOptions()
thread = exe_ctx.GetThread()
if thread.IsValid():
value = thread.GetFrameAtIndex(0).EvaluateExpression("XCUIApplication().debugDescription", options)
if value.GetError().Success():
# Do whatever you want with the result of the expression
我正在编写 Python 脚本以用于 Xcode 的 LLDB。我有这个简单的脚本 运行:
import lldb
def say_hello(debugger, command, result, dict):
print command
def __lldb_init_module (debugger, dict):
debugger.HandleCommand('command script add -f sayhello.say_hello hello')
我想要做的是能够在 Python 脚本中使用 LLDB 的 XCUIApplication().debugDescription 函数的输出。那么有没有办法:
a) 在 python 脚本中访问 XCUIApplication()。
b) 将 XCUIApplication().debugDescription 作为输入传递给 Python 脚本中的 say_hello 函数。
IIRC XCUIApplication是XCTest框架提供的一个函数,所以它是你调试的程序中的一个函数。因此,您可以像调用任何其他函数一样调用它,在 SBTarget 或 SBFrame 上使用 "EvaluateExpression" API。计算表达式的结果将在 SBValue 中返回给你,你可以打印它或任何你需要的东西。
注意,除非你需要支持一个非常老的Xcode (6.x)否则使用新形式的python命令会更方便:
def command_function(debugger, command, exe_ctx, result, internal_dict):
exe_ctx 是命令为 运行 的 SBExecutionContext。如果你这样做,那么你可以这样做:
def command_function(debugger, command, exe_ctx, result, internal_dict):
options = lldb.SBExpressionOptions()
thread = exe_ctx.GetThread()
if thread.IsValid():
value = thread.GetFrameAtIndex(0).EvaluateExpression("XCUIApplication().debugDescription", options)
if value.GetError().Success():
# Do whatever you want with the result of the expression