在 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 和三星 Galaxy Note 3 中的 ADT:启用 logcat。调试禁用