- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我刚刚开始使用 Apple Watch。我从“Five Minute Watchkit”中找到了有关让 iOS 应用程序和 watch 套件应用程序都在模拟器中运行以及将两个进程附加到 LLDB 调试器的说明。
我所做的是启动并退出 iOS 应用程序以在 sim 卡中安装当前版本。然后我切换到 watchKit 方案并启动它,它会在 watch 模拟器上显示我的 watch 应用程序 UI。
然后我在模拟器中启动相应的 iOS 应用程序,然后用户在 Xcode 菜单中“附加到进程”以将调试器附加到正在运行的 iOS 应用程序。
这行得通。我可以在 watch 套件 InterfaceController 或我的 iOS 应用程序中设置断点,调试器会在它应该中断的地方中断。
但是,我在我的 iOS 应用程序的调试控制台中没有看到 NSLog() 语句。 (我确实看到了来自 WatchKit 扩展代码的日志语句。)如果我在我的 iOS 应用程序中设置了一个断点,它会在它应该停止的时候停在那个断点处。我假设 NSLog 缺少控制台输出与附加到 sim 上正在运行的进程有关,而不是从 Xcode 启动它,但我不知道那是什么。
(顺便说一句,将操作附加到从断点调用 NSLog 的断点也不会显示,但会显示“日志消息”调试器命令。有人有任何见解吗?)
编辑:iOS 应用程序中的代码似乎并不重要。在我的例子中,它是一个非常简单的 IBAction,它附加到 iOS 应用 Storyboard中的一个按钮:
- (IBAction)buttonAction:(UIButton *)sender;
{
NSLog(@"Button clicked on iPhone");
}
我可以在该 NSLog 语句上设置断点。调试器在该行停止,但我没有在调试控制台中看到日志语句。
最佳答案
我可以用一个简单的测试应用重现它,没有 WatchKit。该应用程序包含一个 NSTimer,它每秒打印一次“Timer fired”。 (此代码 100% 正确;)。在我手动附加到进程后,日志中没有任何显示。
据我所知,NSLog 输出到 stderr,我想附加调试器不会将 stderr 重定向到 Xcode 终端。
如果您可以使用控制台应用程序或终端查看您的日志,则可以这样做。 iOS8存储模拟器登录~/Library/Logs/CoreSimulator/<Device-UUID>
.在此目录中,您会找到一个 system.log,其中包含您所有的 NSLog
输出。
您可以在终端( cat
、 grep
、 tail
)中查看它,或在 Console.app 中打开它。
Apple 在 Technical Note TN2239: iOS Debugging Magic 中确认(至少对于 GDB) .
Console Output
Many programs, and indeed many system frameworks, print debugging messages to stderr. The destination for this output is ultimately controlled by the program: it can redirect stderr to whatever destination it chooses. However, in most cases a program does not redirect stderr, so the output goes to the default destination inherited by the program from its launch environment. This is typically one of the following:
- If you launch a GUI application as it would be launched by a normal user, the system redirects any messages printed on stderr to the system log. You can view these messages using the techniques described earlier.
- If you run a program from within Xcode, you can see its stderr output in Xcode's debugger Console window (choose the Console menu item from the Run menu to see this window).
Attaching to a running program (using Xcode's Attach to Process menu, or the attach command in GDB) does not automatically connect the program's stderr to your GDB window. You can do this from within GDB using the trick described in the "Seeing stdout and stderr After Attaching" section of Technical Note TN2030, 'GDB for MacsBug Veterans'.
提到的 TN2030 在他们的服务器上不再可用 (mirror)。它展示了如何将 stdout 和 stderr 重定向到 Xcode 控制台。然而,由于 shell tty
不是 LLDB 的有效命令,它不会有太大帮助。但也许有不同的方式来访问 Xcodes 控制台使用的 tty,所以我附上了那个 TN 的重要部分。
Seeing stdout and stderr After Attaching
If you attach GDB to a process (as opposed to starting the process from within GDB), you won't be able to see anything that the process prints to stdout or stderr. Programs launched by the Finder typically have stdout and stderr connected to "/dev/console", so the information they print goes to the console. You can view this by launching the Console application (in the Utilities folder), however, it's inconvenient to have to look in a separate window. Another alternative is to connect the process's stdout or stderr to the terminal device for GDB's Terminal window. Listing 9 shows how to do this.
Listing 9. Connecting stdout and stderr to GDB's terminal device.
(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 ...]
关于ios - Xcode 附加到进程不显示 NSLog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106019/
我关注了 tutorial on creating a popup for an add-on在 Firefox 中,效果很好。 我现在遇到的问题是它创建的弹出窗口不会更改大小以适应我添加到其中的内容
我有一些视频,我需要连接一个标题并添加一些覆盖,问题是我需要先做覆盖,否则时间不正确,然后才将标题连接到视频的开头 ffmpeg -i talk.mp4 -i start_pancarte.png
我正在尝试附加一个 CSV 文件。这是我正在使用的线路。不幸的是,我找不到 export-csv 的附加选项。任何想法都有助于使其发挥作用。 Get-ADGroupMember "Domain Adm
我正在努力理解 Attach API (com.sun.tools.attach.*) 的用途。它的典型用途是什么?它是为了“模拟”JVM,以便您可以在不部署/启动代码的情况下测试您的代码吗?它是一个
我不明白为什么这不起作用。 soup_main = BeautifulSoup('FooBar') soup_append = BeautifulSoup('Meh') soup_main.body.
我有以下代码来返回我想要的字符串 $sql = " SELECT `description` FROM `auctions` WHERE `description` REGEX
我正在尝试从数组中附加具有多个值的元素,但我做错了。这是我的代码: for(var i=0; i ` + pricesArray[i].start_date ` ` + pricesArray[i
我正在尝试将图像链接添加到此 javascript 附加表中。使图像位于按钮上方 这是代码 $("#1").append(""+section+""+no+""+price+""+button+""
我有一个问题,我已经解决了,但它太烦人了。 我有一个 js 代码,当使用“追加”按下按钮时,它会放下一些 html 代码,并且通过该代码,我为 x 按钮提供了一个 id,并为容器元素提供了一个 id。
我想逐行读取文件,并且每一行可能都有很多字符。 这个版本的readline效果很好 func readLine(r *bufio.Reader) ([]byte, error) { var (
我有一个网站,每次用户登录或注销时,我都会将其保存到文本文件中。 如果不存在,我的代码在附加数据或创建文本文件时不起作用。这是示例代码 $myfile = fopen("logs.txt", "wr"
我正在尝试使用 typescript 和 Formik 创建一个自定义输入字段。我可以就完成以下代码的最佳方式获得一些帮助吗?我需要添加额外的 Prop 标签和名称......我已经坚持了一段时间,希
我有一个字符串 big_html,我想将它添加到某个 div 中。我观察到以下方面的性能差异: $('#some-div').append( big_html ); // takes about 10
如何使用 FormData 创建以下结果 ------WebKitFormBoundaryOmz20xyMCkE27rN7 Content-Disposition: form-data; name="
有没有办法附加 jQuery 事件处理程序,以便在任何先前附加的事件处理程序之前触发该处理程序?我遇到了this article ,但代码不起作用,因为事件处理程序不再存储在数组中,而这正是他的代码所
我正在开发一个需要网络登录的 iPhone 应用程序。像往常一样我打电话 [[UIApplication sharedApplication] openURL:loginURL]; 这将关闭应用程序并
我想开发一个仅针对特定域激活的扩展。 我不希望它在不浏览此特定域时出现在浏览器菜单中。 有可能这样做吗? 最佳答案 可能:对于菜单,您可以添加一个弹出窗口侦听器,用于检查当前加载的URL(docs f
这段 JavaScript 代码 function writeCookie(CookieName, CookieValue, CookieDuration) { var expiration
我正在使用 Handlebars 来渲染使用ajax从本地服务器获得的信息。我的 HTML 看起来像: {{#each Tabs}}
我尝试了以下代码,但当输入框中没有数据时它不会通知。当我直接添加此内容(不附加)时,它会起作用。我在这里做错了什么 var output = "\n"+ "\n"+
我是一名优秀的程序员,十分优秀!