查找Xcode调试信息的来源

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

非常感谢您的帮助。
Luke

1个回答

2
使用符号断点来在NSLogstd::cout处中断。如果你处理的是C++代码或Swift代码,你甚至可以在特定的错误或异常处中断。要向项目添加符号断点,必须按照以下步骤操作:
  • 通过单击导航区域上看起来像一个粗箭头的图标(在Xcode 8中,从编辑器左侧的面板中计算的第二个图标)进入断点导航器
  • 单击窗口左下角的+按钮
  • 在弹出菜单中选择Symbolic Breakpoint
  • 添加您想要中断的符号(例如:在C++中,std::cout;在Objective-C中:-[NSObject(NSObject) doesNotRecognizeSelector:];在C或Swift中,CGErrorBreakpoint() - 重要提示 - 避免插入任何空格;不幸的是,此处的格式设置将-symbol-放在不同的行中,但在ObjC符号中-和[之间不能有空格
  • 如果您知道引起问题的库,请填写module字段
  • 单击action按钮,并在弹出菜单中选择Debugger Command
  • 在下面的文本字段中,填写bt以在每次命中此类符号时获取回溯
  • 如果您不想在第一个断点处停止执行,则选中Automatically continue after evaluating actions复选框

如果您的库抛出C++异常,您也可以在此处中断。只需在单击+按钮时选择该选项即可。要了解有关如何在Xcode中设置断点的更多信息,请转到:

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

然后导航至:调试应用程序>设置断点>在事件发生时暂停执行


太棒了。这基本上让我走上了正确的轨道。我能够做到这一点,并将条件设置为[(NSString*) $r0 containsString:@"Generating"],这让我可以准确定位记录此消息并通过有问题的库获取堆栈跟踪。向这个答案(https://dev59.com/amQm5IYBdhLWcg3w6SdR#35012840)致敬,因为它帮助了我理解条件语法。 - mylogon
很高兴能帮助到你 :) - jvarela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接