【问题标题】:Xcode All Exceptions Breakpoint - Ignore Certain C++ ExceptionXcode All Exceptions Breakpoint - 忽略某些 C++ 异常
【发布时间】:2017-02-22 19:09:01
【问题描述】:

我正在使用某些 iOS 框架(如 AVAudioPlayer)在 C++ 中为 iOS 编写代码。我知道这些可以在内部触发 C++ 异常,这很好,因为它们会捕获并处理它们。

我想使用 Xcode 中的所有异常断点来解决我自己的 C++ 代码中的崩溃问题,但要忽略 AVAudioPlayer 的 C++ 异常(以及基本上所有其他捕获的异常)。

我怎样才能做到这一点?

【问题讨论】:

    标签: c++ ios xcode exception lldb


    【解决方案1】:

    没有办法使用 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”的共享库中时触发...

    顺便说一句,如果您将以下定义放入您的 .py 文件中:

    def __lldb_init_module(debugger, internal_dict):
    

    它会在执行command script import 命令时运行,因此您可以使用它一次性将断点和命令添加到断点。我将把它作为练习留给读者。

    另请注意,这在 Xcode 中运行 lldb 时会起作用,但您需要创建自己的异常断点,如上所示,因为 Xcode 有不同的方式来处理它管理的断点的命令。

    【讨论】:

    • 哇,这听起来棒极了。可能通过这个技巧,我还可以找出导致问题的 AVAudioPlayer 的模块名称,然后手动禁用这个单一的东西....我从来没有在 Python 脚本中使用过 lldb,所以我会花一些时间来摆弄这个并尝试让它运行...
    • 我搞定了。我在这篇文章中使用了您的解决方案和解决方案的混合:stackoverflow.com/questions/14370632/… 我使用 debugger.SetAsync(True) debugger.HandleCommand("continue") 跳过断点。不太确定这是否比您建议的更糟糕;)但是可以像其他人建议的那样在 Xcode 中添加脚本。
    • 我已将其设置为跳过由“AudioToolbox”引起的任何断点。是否有可能变得更具体,只跳过这个特定的问题?是否有可能找出当前的功能或类似的东西?
    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多