Xcode 附加到进程不显示 NSLog

2024-04-24

我刚刚开始使用 Apple Watch。我找到了来自“五分钟观察套件 http://www.fiveminutewatchkit.com/blog/?category=Xcode”,让 iOS 应用程序和手表套件应用程序都在模拟器中运行,并且两个进程都附加到 LLDB 调试器。

我所做的就是启动并退出 iOS 应用程序以在 sim 中安装当前版本。然后我切换到 watchKit 方案并启动它,它会在手表模拟器上显示我的手表应用程序 UI。

然后,我在模拟器中启动相应的 iOS 应用程序,然后在 Xcode 菜单中使用“附加到进程”将调试器附加到正在运行的 iOS 应用程序。

这有效。我可以在手表套件 InterfaceController 或我的 iOS 应用程序中设置断点,调试器会在需要时在那里中断。

但是,我没有在 iOS 应用程序的调试控制台中看到 NSLog() 语句。 (我确实看到了 WatchKit 扩展代码中的日志语句。)如果我在 iOS 应用程序中设置了一个断点,它确实会在该断点处停止。我认为 NSLog 缺少控制台输出与附加到 sim 上正在运行的进程有关,而不是从 Xcode 启动它,但我不知道那是什么。

(顺便说一句,将操作附加到从断点调用 NSLog 的断点也不会显示,但“日志消息”调试器命令会显示。 有人有什么见解吗?)

编辑: iOS应用程序中的代码似乎并不重要。就我而言,这是一个极其简单的 IBAction,附加到 iOS 应用故事板中的按钮:

- (IBAction)buttonAction:(UIButton *)sender;
{
  NSLog(@"Button clicked on iPhone");
}

我可以在该 NSLog 语句上设置断点。调试器停在该行,但我在调试控制台中没有看到日志语句。


我可以使用一个简单的测试应用程序(没有 WatchKit)来重现这一点。该应用程序由一个 NSTimer 组成,每秒打印“计时器已触发”。 (此代码 100% 正确;)。我手动附加到进程后,日志中没有显示任何内容。
据我所知 NSLog 输出到 stderr,我猜附加调试器不会将 stderr 重定向到 Xcode 终端。

如果您可以使用控制台应用程序或终端来查看日志,则可以这样做。 iOS8存储模拟器登录信息~/Library/Logs/CoreSimulator/<Device-UUID>。在此目录中,您将找到一个 system.log,其中包含您的所有信息NSLog输出。

您可以在终端中查看它(cat, grep, tail),或在 Console.app 中打开它。


Apple 确认(至少对于 GDB 而言)技术说明 TN2239:iOS 调试魔法 https://developer.apple.com/library/ios/technotes/tn2239/_index.html.

控制台输出

很多程序,甚至很多系统框架,都会打印调试 发送至 stderr 的消息。该输出的最终目的地是 由程序控制:它可以将 stderr 重定向到任何内容 它选择的目的地。然而,在大多数情况下,程序并不 重定向 stderr,因此输出转到默认目的地 由程序从其启动环境继承。这是 通常是以下之一:

  • 如果您像普通程序一样启动 GUI 应用程序 用户,系统将 stderr 上打印的任何消息重定向到 系统日志。您可以使用所描述的技术查看这些消息 早些时候。
  • 如果您从 Xcode 中运行程序,您可以看到它的 Xcode 的调试器控制台窗口中的 stderr 输出(选择 Console 从“运行”菜单的菜单项可以看到此窗口)。

附加到一个 运行程序(使用 Xcode 的“附加到进程”菜单,或附加 GDB 中的命令)不会自动将程序的 stderr 连接到 你的 GDB 窗口。您可以使用以下技巧从 GDB 中执行此操作 在“附加后查看标准输出和标准错误”部分中描述 技术说明 TN2030,“MacsBug 老兵的 GDB”。

所提到的 TN2030 在其服务器上不再可用(mirror http://www.fenestrated.net/~macman/mirrors/Apple%20Technotes%20(As%20of%202002)/tn/tn2030.html)。它展示了如何将 stdout 和 stderr 重定向到 Xcode 控制台。然而,自从shell tty不是 LLDB 的有效命令,它没有多大帮助。但也许有一种不同的方式来访问 tty Xcodes 控制台使用,所以我附上了 TN 的重要部分。

连接后查看 stdout 和 stderr

如果将 GDB 附加到进程(而不是启动进程) 从 GDB 内部),您将无法看到该进程的任何内容 打印到 stdout 或 stderr。通常由 Finder 启动的程序 将 stdout 和 stderr 连接到“/dev/console”,因此信息 他们打印到控制台。您可以通过启动来查看此内容 然而,控制台应用程序(在实用程序文件夹中) 必须在单独的窗口中查看很不方便。另一种选择 是将进程的stdout或stderr连接到终端设备 用于 GDB 的终端窗口。清单 9 显示了如何做到这一点。

清单 9. 将 stdout 和 stderr 连接到 GDB 的终端设备。

(gdb) attach 795
[... output omitted ...]
(gdb) call (void) DebugPrintMenuList()
 No output )-:

 Close the stdout and stderr file descriptors.
(gdb) call (void) close(1)
(gdb) call (void) close(2)

 Determine the name of the terminal device for GDB itself.
(gdb) shell tty
/dev/ttyp1

 Reopen stdout and stderr, but connected to GDB's terminal.
 The function results should be 1 and 2; if not, something
 is horribly wrong.
(gdb) call (int) open("/dev/ttyp1", 2, 0)
$1 = 1
(gdb) call (int) open("/dev/ttyp1", 2, 0)
$2 = 2

 Try the DebugPrintMenuList again.
(gdb) call (void) DebugPrintMenuList()
 Yay output!
Index MenuRef     ID  Title
----- ---------- ---- -----
<regular menus>
00001 0x767725D3 -21629 Ed
00002 0x76772627 1128 <Apple>
00003 0x767726CF 1129 File
00004 0x76772567 1130 Edit
[... remaining output omitted ...]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 附加到进程不显示 NSLog 的相关文章

随机推荐

  • 如何实现 hamcrest 匹配器

    我想运行这行代码 assertThat contextPin get equalTo pinPage getPinObjFromUi 但我想打印到日志中以提供信息 这意味着我可以知道哪些字段不相等 所以我想到了实现一个匹配器 我用谷歌搜索过
  • 如何更改默认的 javadoc 样式表?

    是否有命令行选项来更改 javadoc 创建的样式表文件 我想使用我自己的 css 文件 默认的蓝色很无聊 我尝试了 stylesheet 选项 但不支持它 是的 这是可能的 而且实际上非常简单 例如 如果您查看 Mockito 的 jav
  • Markdown 所见即所得编辑器和预览在同一文本区域中[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我寻找一个编辑器来编写 Markdown 语法并在同一文本区域中预览 例如引导所见即所得HTML5 ht
  • Django Crispy-forms - 自定义按钮

    我的 django crispy form 中有两个按钮 self helper add input Submit submit Submit self helper add input Button cancel Cancel 提交按钮工
  • !r 在 str() 和 repr() 中做什么?

    根据Python 2 7 12 文档 https docs python org 2 tutorial inputoutput html fancier output formatting s apply str and r apply r
  • 预加载背景图像

    我正在构建一个循环显示 3 个不同背景的页面 每 750 毫秒更改一次 为此 我在主体中添加了一个带有相关背景图像的类 并使用 JS 进行了更改 对于第一次循环 它们会闪烁 因为图像必须加载 所以它不会立即出现 因此 我可以使用任何方法来预
  • 使用#selector 传递参数

    我是 Swift 的初学者 我正在尝试通过通知中心启动一个功能 ViewController swift 中的观察者调用函数reload override func viewDidLoad super viewDidLoad Notific
  • 使用 Gson 反序列化 JSON 时引用父对象

    给定以下 JSON authors name Stephen King books title Carrie title The Shining title Christine title Pet Sematary 这个对象结构 publi
  • Tymon\JWTAuth::toUser 错误:需要令牌

    我有一个 Larvel API 它使用 Tymon JWTAuth 来验证用户身份 它运行良好 由于某些原因 我还有一条不受保护的路线web php Route get myroute MyController mymethod MyCon
  • 如何在flutter中解析没有key的JSON

    我想解析一个 JSON 但这个 JSON 没有键值 仅仅是价值 我尝试创建课程但不起作用 错误是类型 List 不是类型 Map 的子类型 我尝试解析它们在 json 中占据的位置 例如 json 0 但我对此不确定 提前致谢 Json P
  • 定义具有多种消息类型的消息传递域

    到目前为止 我见过的大多数 F 消息传递示例都使用 2 4 种消息类型 并且能够利用模式匹配将每条消息定向到其正确的处理函数 对于我的应用程序 由于处理和所需参数的不同性质 我需要数百种独特的消息类型 到目前为止 每个消息类型都是其自己的记
  • 单击“保存”按钮后的 WPF 数据绑定

    我有一个应用程序和一个设置窗口 其中 TabControl 包含几个 TabItems 它们每个都有一些字段 文本框 这些字段数据绑定到同一个 Singleton 对象 仅在单击 保存 按钮后 是否有任何优雅且类似 WPF 的数据绑定方式
  • iOS 7 - 呈现模式视图控制器时收到警告消息

    使用 iOS 7 编译和运行 在呈现模式视图控制器时 我收到警告消息 不鼓励在分离视图控制器上呈现视图控制器 我在使用 iOS 6 或更早版本时从未遇到过问题 任何人都可以显示在呈现模式视图控制器时是否有任何更改吗 SearchViewCo
  • 如何向打开 Chrome 控制台的用户显示警告,就像 Facebook 和 Blockchain 那样?

    当我在 Facebook 和 Blockchain 等网站上打开控制台时 我收到如下警告 我想知道如何在我的网站上执行此操作 显示警告 告诉用户这很危险 他不应该在那里粘贴任何内容 您可以设置 console log 消息的样式 conso
  • 当我尝试移动 Pygame 时,玩家回到初始位置

    当我移动玩家时 当我按住右箭头时 他会移动 10 个像素 当我释放按键时 他会返回到初始位置 顺便说一句 你不需要告诉我当我按右时他会向左移动 我知道 这是代码 import pygame pygame init WIDTH 1000 HE
  • 为什么 Java 中不能抛出和捕获对象? [复制]

    这个问题在这里已经有答案了 可能的重复 你可以在 Java 中添加什么 https stackoverflow com questions 5749898 what can you throw in java 为什么我不能在 Object
  • 如何将音频从浏览器流式传输到 WebRTC 本机 C++ 应用程序

    到目前为止 我已成功运行以下示例 WebRTC 原生 C 到浏览器视频流示例 http sourcey com webrtc native to browser video streaming example 该示例展示了如何将视频从本机
  • React Native - 如何查看 AsyncStorage 中存储的内容?

    我将一些项目保存到AsyncStorage在 React Native 中 我使用 chrome 调试器和 iOS 模拟器 不使用 React Native 使用常规 Web 开发localStorage 我能够看到存储的localStor
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • Xcode 附加到进程不显示 NSLog

    我刚刚开始使用 Apple Watch 我找到了来自 五分钟观察套件 http www fiveminutewatchkit com blog category Xcode 让 iOS 应用程序和手表套件应用程序都在模拟器中运行 并且两个进