【问题标题】:Finding the origin of Xcode debug message查找 Xcode 调试消息的来源
【发布时间】:2016-12-22 11:01:42
【问题描述】:

我正在与许多第三方供应商合作,他们为我提供了全面的 .lib 文件。正在运行的处理程序之一正在向控制台记录一条消息,该消息有点令人担忧,需要向供应商提出。
问题是,我不确定消息来自哪里,并且由于项目的复杂性,几乎不可能看到消息来自哪里。我的意思是,一些库相互交互,如果没有其他库,项目将无法运行。如果我要注释掉某些类的初始化,这可能是一个红鲱鱼,因为它可能正在调用另一个库中的函数。
我的问题是,Xcode 断点(或我可能使用的其他工具)中是否有一个功能可以显示某个控制台日志(无论是 NSLog 还是可能是 std::cout 等)的来源?

非常感谢,提前。
卢克

【问题讨论】:

    标签: xcode


    【解决方案1】:

    是的,使用符号断点在NSLogstd::cout 上中断。如果您正在处理 C++ 代码或 Swift,您甚至可以中断特定的错误或异常。要将符号断点添加到项目中,您必须执行以下操作:

    • 通过单击看起来像的图标转到 断点导航器 就像导航区域上的胖右箭头(在 Xcode 8 中,第二个图标 从面板右侧数到编辑器左侧)
    • 点击窗口左下角的+按钮
    • 在弹出菜单中选择符号断点
    • 添加要中断的符号(例如:在 C++ 中,std::cout;在目标 C 中:-[NSObject(NSObject) doesNotRecognizeSelector:];在 C 或 Swift 中,CGErrorBreakpoint() - 重要提示 - 避免插入任何空格;不幸的是,这里的格式将 -[symbol] 放在不同的行中,但在 ObjC 符号中 - 和 [ 之间不能有空格
    • 如果您知道让您感到痛苦的图书馆是什么,请填写模块字段
    • 点击action按钮,在弹出的菜单中选择Debugger Command
    • 在下面的文本字段中,填写bt,以便每次点击此类符号时获得回溯
    • 如果您不想在遇到第一个断点后停止执行,请选中在评估操作后自动继续复选框

    如果你的库抛出了 C++ 异常,你也可以打破它。只需在单击 + 按钮时选择该选项。要了解更多如何在 Xcode 中设置断点,请访问:

    http://help.apple.com/xcode/

    然后导航到:调试您的应用 > 设置断点 > 发生事件时暂停执行

    【讨论】:

    • 太棒了。这几乎让我走上了正轨。我能够做到这一点并将条件设置为[(NSString*) $r0 containsString:@"Generating"],这让我可以确定记录此消息的位置,然后通过有问题的库获取堆栈跟踪。大声喊出这个 (stackoverflow.com/a/35012840/1197723) 答案以帮助处理条件的语法。
    • 很高兴我能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 2013-08-14
    相关资源
    最近更新 更多