在 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