在 Mac OS X 上调试和杀死应用程序?

Posted

技术标签:

【中文标题】在 Mac OS X 上调试和杀死应用程序?【英文标题】:Debugging and killing apps on Mac OS X? 【发布时间】:2011-01-15 19:35:30 【问题描述】:

大家好,我正在调试 mac os 10.5 上的 C++ 应用程序。偶尔,我会做一些坏事并导致段错误或其他非法操作。这导致应用程序挂起一段时间,并最终出现一个系统对话框通知我崩溃。 “挂起”和对话之间的等待时间很长;几分钟。如果我尝试从命令行强制退出应用程序或kill -9 它,则不会发生任何事情。如果我从调试器 (gdb) 启动应用程序,则在崩溃时我会返回 gdb 提示符并可以干净地退出进程。这并不理想,因为 gdb 加载速度很慢。

不管怎样,你们能推荐一些东西吗?有没有办法在 OS X 中禁用崩溃报告机制?

谢谢。

更新 1: 这是执行 XCode 后遗留下来的僵尸。显然 xcode 也无法正确阻止它们。

 1 个八位八位@八位八位-MacBook-Pro:~$ ps auxw|grep -i 阅读器
  2 88 28639 0.0 0.0 599828 504 s004 R+ 2:54pm 0:00.00 grep -i reader
  3 八八 28288 0.0 1.1 1049324 45032 ?? UE 2:46pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader
  4 八八 28271 0.0 1.1 1049324 45036 ?? UEs 2:45pm 0:00.89 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader
  5 八八 28146 0.0 1.1 1049324 44996 ?? UE 下午 2:39 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader
  6 八八 27421 0.0 1.1 1049328 45024 ?? UEs 2:29pm 0:00.88 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader
  7 八八 27398 0.0 1.1 1049324 45044 ?? UE 2:28pm 0:00.90 /Users/eightieight/workspace/spark/spark/reader/browser/build/Debug/Reader.app/Contents/MacOS/Reader

【问题讨论】:

你在使用 XCode 吗?如果是这样,您应该不会看到 Crash Reporter 对话框。另外,您是在构建基于 GUI 的应用程序还是只是一个控制台应用程序?编辑:顺便说一句,如果您使用 XCode,如果在 XCode 中运行 GUI 应用程序时遇到 EXEC_BAD_ACCESS 错误,您只需按停止图标即可立即终止正在运行的应用程序。 是的,如果我在 XCode 或 gdb 中运行我的应用程序,一切正常。当我遇到段错误时,应用程序会退回到调试器中,一切都很好。但是,如果我从控制台运行该应用程序,它似乎永远挂起。 你是如何调用应用程序的?通常,如果一个应用程序出现故障,游戏结束,这个过程就死了。但是,如果您设法从其他环境中调用它,则该进程的某些资源可能处于打开状态,并且它还不能放开,您正在等待父进程先做某事(它可能检测出问题时遇到问题)。 我从命令行调用它。这是一个与 Qt 链接的单元测试套件 (gtest)。这是一个控制台应用程序,所以我像一个控制台应用程序一样运行它。 尝试使用“活动监视器”工具对其进行分析。也许您会发现一旦您的崩溃,其他一些进程就会变得疯狂? 【参考方案1】:

XCode 附带 CrashReporterPrefs app(使用 Spotlight 搜索它;应该在 /Developer/Applications/Utilities 中)。也可以设置为服务器模式以禁用应用程序“意外退出”对话框。

这里是another suggestion:

sudo chmod 000 /System/Library/CoreServices/Problem\ Reporter.app

要重新启用,请执行以下操作:

sudo chmod 755 /System/Library/CoreServices/Problem\ Reporter.app

可能是应用程序正在转储一个大型核心文件 - 不过您可能会注意到对可用磁盘空间的影响。您可以使用

关闭核心转储
sudo sysctl -w kern.coredump=0

通过设置=1重新激活。

【讨论】:

是的,我已经试过了。对话框不再弹出,但仍有延迟.. 我不建议使用chmod 方法。修改系统文件或权限是自找麻烦。 Prefs 应用程序会按照您的要求执行。 @gavinb - 同意;重新排序的建议。【参考方案2】:

来自 osxdaily.com 的This article 说你只需要输入:

defaults write com.apple.CrashReporter DialogType none

在终端中。不知道这是否能解决延迟问题。

【讨论】:

【参考方案3】:

我终于明白了。

在 /System/Library/CoreServices 中:

---------- 1 根轮 56752 2009 年 8 月 11 日 ReportPanic

这一定是因为我之前尝试禁用烦人的报告对话框。活到老,学到老。 :]

【讨论】:

以上是关于在 Mac OS X 上调试和杀死应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何调试旧版Mac OS X的应用程序?

sh 如何杀死mac os x终端上的端口

sh 如何杀死mac os x终端上的端口

MAC OS X 和三星 Galaxy Note 3 中的 ADT:启用 logcat。调试禁用

串行 Mac OS X 不断冻结/锁定/消失 USB 到 Arduino

对 Mac OS X 应用程序进行代码签名以进行 Ad-Hoc Beta 分发(使用 HockeyApp)