Xcode中的LLDB Python脚本 - python

我刚刚发现了LLDB的this方便功能,该功能使我可以编写Python脚本,当我在LLDB的断点时可以访问框架中的变量。但是,在Xcode(v4.5.2)中使用它时遇到一些问题。首先,我找不到任何地方说应该保留这些Python脚本,以便可以从LLDB中的命令行导入它们。其次,在LLDB中键入script后,键盘输入会出现一些错误:退格键不会删除屏幕上的字符,而是会从命令中有效删除它。因此,有效地输入primt<bsp><bsp><bsp>int表示print,但在终端上仍显示为primtint。这只是美学,但很烦人!

谁能指出我一些将Python与LLDB结合使用的Xcode特定资源?

编辑:Here是另一个有趣的链接,它说您可以使用Python使用Python为变量创建自定义摘要,但是我找不到与此相关的任何内容。

参考方案

不幸的是,在Xcode,lldb和Python解释器之间,交互式控制台存在一些问题。请在http://bugreport.apple.com/上提交错误报告-我不知道是否已经有关于此特定问题的错误报告,尽管一般来说这里的问题是已知的。如果您正在探索交互式python脚本界面,则可能需要使用命令行lldb工具。效果更好。

我将lldb的所有python脚本都放在了~/lldb中。在我的~/.lldbinit文件中,将它们作为来源。例如,我有~/lldb/stopifcaller.py

import lldb

# Use this like
# (lldb) command script import ~/lldb/stopifcaller.py
# (lldb) br s -n bar
# (lldb) br comm add --script-type python -o "stopifcaller.stop_if_caller(frame, 'foo')" 1

def stop_if_caller(current_frame, function_of_interest):
  thread = current_frame.GetThread()
  if thread.GetNumFrames() > 1:
    if thread.GetFrameAtIndex(1).GetFunctionName() != function_of_interest:
      thread.GetProcess().Continue()

如果需要的话,我会将command script import放入我的~/.lldbinit文件中以自动加载它。这个特定的示例向断点1添加了一条python命令-当lldb在断点处停止时,它将查看调用函数。如果调用函数不是foo,它将自动恢复执行。本质上,只有foo()调用bar()时,断点1才会停止。请注意,在执行command script import ~/...时Xcode 4.5 lldb可能存在问题-您可能需要键入主目录的完整路径(/Users/benwad/或其他内容)。我不能肯定地记得-Xcode 4.5出现了一些波浪线扩展问题,已经修复了一段时间。

您可以将简单类型摘要直接添加到~/.lldbinit中。例如,如果我要调试lldb本身,则ConstString对象通常只有我感兴趣的一个字段,即m_string ivar。所以我有

type summary add -w lldb lldb_private::ConstString -s "${var.m_string}"

或者,如果它是addr_t类型,我总是希望将其格式化为十六进制,所以我有

type format add -f x lldb::addr_t

如果您要向lldb添加新命令,则会有一个~/lldb/sayhello.py这样的python文件,

import lldb

def say_hello(debugger, command, result, dict):
  print 'hello'

def __lldb_init_module (debugger, dict):
  debugger.HandleCommand('command script add -f sayhello.say_hello hello')

然后将其加载到lldb中

(lldb) comma script import  ~/lldb/sayhello.py
(lldb) hello
hello
(lldb)

在大多数情况下,当您添加以python编写的命令时,将使用shlexoptparse库,以便该命令可以进行选项解析,并添加__doc__字符串-我省略了这些内容为了使示例简单。

crontab tee命令不会将stdout写入txt文件,而是将其清除[python脚本] - python

                                                                                                                    我有一个用于python脚本的crontab命令,该命令可打印出匹配目录中某些条件的文件。该脚本在for循环中打印出文件。然后,…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

python:ConfigParser对象,然后再阅读一次 - python

场景:我有一个配置文件,其中包含要执行的自动化测试的列表。这些测试是长期循环执行的。   配置文件的设计方式使ConfigParser可以读取它。由于有两个三个参数,因此我需要通过每个测试。现在,此配置文件由script(s1)调用,并且按照配置文件中的列表执行测试。Script(s1)第一次读取配置,并且在每次测试完成后都会执行。阅读两次的要求:由于可能会…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…