Xcode 所有异常断点 - 忽略某些 C++ 异常
Xcode All Exceptions Breakpoint - Ignore Certain C++ Exception
我正在使用某些 iOS 框架(如 AVAudioPlayer)为 iOS 使用 C++ 进行编码。我知道这些可以在内部触发 C++ 异常并且它非常好,因为它们捕获并处理它们。
我想使用 Xcode 中的所有异常断点来解决我自己的 C++ 代码中的崩溃问题,但要忽略 AVAudioPlayer 的 C++ 异常(以及基本上所有其他捕获的异常)。
我怎样才能做到这一点?
无法使用 Xcode 断点设置来执行此操作。
您可以在 C++ 异常断点上使用 Python 断点命令在 lldb 中执行此操作。您的回调将在堆栈中查找异常被抛出的点,并检查抛出代码是否在您的共享库中,以及是否从断点处自动继续。
该部分位于:
http://lldb.llvm.org/python-reference.html
在遇到断点时在 运行 上运行脚本将为您提供有关如何执行此操作的一些详细信息。
例如,您可以输入:
module_name = "TheNameOfYourExecutableOrSharedLibrary"
def bkpt_cmd (frame, loc, dict):
global module_name
thread = frame.GetThread()
frame_1 = thread.GetFrameAtIndex(1)
module = frame_1.GetModule()
name = module.GetFileSpec().GetFilename()
if module_name in name:
return True
return False
在名为 ~/bkpt_cmd.py 的文件中。然后在 lldb 控制台中,执行:
(lldb) br s -E c++
Breakpoint 1: no locations (pending).
(lldb) command script import ~/bkpt_cmd.py
(lldb) br com add -F bkpt_cmd.bkpt_cmd
这将设置一个 C++ 异常断点,该断点仅在引发帧位于名为 "TheNameOfYourExecutableOrSharedLibrary"...
的共享库中时触发
顺便说一句,如果您将以下 def 放入您的 .py 文件中:
def __lldb_init_module(debugger, internal_dict):
执行command script import
命令时会得到运行,所以你可以用它来一次添加断点和命令到断点。我将把它留作 reader.
的练习
另请注意,当 运行 在 Xcode 中使用 lldb 时,这将起作用,但您需要创建自己的异常断点,如上所示,因为 Xcode 有一个不同的处理它管理的断点的命令的方式。
我正在使用某些 iOS 框架(如 AVAudioPlayer)为 iOS 使用 C++ 进行编码。我知道这些可以在内部触发 C++ 异常并且它非常好,因为它们捕获并处理它们。
我想使用 Xcode 中的所有异常断点来解决我自己的 C++ 代码中的崩溃问题,但要忽略 AVAudioPlayer 的 C++ 异常(以及基本上所有其他捕获的异常)。
我怎样才能做到这一点?
无法使用 Xcode 断点设置来执行此操作。
您可以在 C++ 异常断点上使用 Python 断点命令在 lldb 中执行此操作。您的回调将在堆栈中查找异常被抛出的点,并检查抛出代码是否在您的共享库中,以及是否从断点处自动继续。
该部分位于:
http://lldb.llvm.org/python-reference.html
在遇到断点时在 运行 上运行脚本将为您提供有关如何执行此操作的一些详细信息。
例如,您可以输入:
module_name = "TheNameOfYourExecutableOrSharedLibrary"
def bkpt_cmd (frame, loc, dict):
global module_name
thread = frame.GetThread()
frame_1 = thread.GetFrameAtIndex(1)
module = frame_1.GetModule()
name = module.GetFileSpec().GetFilename()
if module_name in name:
return True
return False
在名为 ~/bkpt_cmd.py 的文件中。然后在 lldb 控制台中,执行:
(lldb) br s -E c++
Breakpoint 1: no locations (pending).
(lldb) command script import ~/bkpt_cmd.py
(lldb) br com add -F bkpt_cmd.bkpt_cmd
这将设置一个 C++ 异常断点,该断点仅在引发帧位于名为 "TheNameOfYourExecutableOrSharedLibrary"...
的共享库中时触发顺便说一句,如果您将以下 def 放入您的 .py 文件中:
def __lldb_init_module(debugger, internal_dict):
执行command script import
命令时会得到运行,所以你可以用它来一次添加断点和命令到断点。我将把它留作 reader.
另请注意,当 运行 在 Xcode 中使用 lldb 时,这将起作用,但您需要创建自己的异常断点,如上所示,因为 Xcode 有一个不同的处理它管理的断点的命令的方式。