我有一个普遍程序,其目标是10.5以及使用垃圾收集。我建设,ppc,i386和x86_64.

我没有接到一个物理支持的机器所以我试图利用塞塔,以确认支持部分中的程序能否正常工作。

然而,只要作为程序启动在罗塞塔,立即崩溃的以下崩溃的记录:

Process:         FooApp [91567]
Path:            /Users/rob/Development/src/FooApp/build/Release 64-bit/FooApp.app/Contents/MacOS/FooApp
Identifier:      com.companyX.FooApp
Version:         0.9 (build d540e05) (2)
Code Type:       PPC (Translated)
Parent Process:  launchd [708]

Date/Time:       2010-04-09 18:32:23.962 +1000
OS Version:      Mac OS X 10.6.3 (10D573)
Report Version:  6

Exception Type:  EXC_CRASH (SIGTRAP)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Crashed Thread:  5

...snip non-relevant threads...

Thread 5 Crashed:
0   libSystem.B.dylib               0x8023656a __pthread_kill + 10
1   libSystem.B.dylib               0x80235e17 pthread_kill + 95
2   com.companyX.FooApp         0xb80bfb30 0xb8000000 + 785200
3   com.companyX.FooApp         0xb80c0037 0xb8000000 + 786487
4   com.companyX.FooApp         0xb80dd8e8 0xb8000000 + 907496
5   com.companyX.FooApp         0xb8145397 spin_lock_wrapper + 1791
6   com.companyX.FooApp         0xb801ceb7 0xb8000000 + 118455

我用苹果文件在调试翻译的应用程序和信息 这页 附库的应用程序时,它的运行在罗塞塔。该应用程序,立即打破入调试器在启动:

Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to thread 15107]
0x9151fdd4 in auto_fatal ()
(gdb) bt
#0  0x9151fdd4 in auto_fatal ()
#1  0x91536d84 in Auto::Thread::get_register_state ()
#2  0x915372f8 in Auto::Thread::scan_other_thread ()
#3  0x91529be4 in Auto::Zone::scan_registered_threads ()
#4  0x91539114 in Auto::MemoryScanner::scan_thread_ranges ()
#5  0x9153b000 in Auto::MemoryScanner::scan ()
#6  0x9153049c in Auto::Zone::collect ()
#7  0x915198f4 in auto_collect_internal ()
#8  0x9151a094 in auto_collection_work ()
#9  0x96687434 in _dispatch_call_block_and_release ()
#10 0x9668912c in _dispatch_queue_drain ()
#11 0x96689350 in _dispatch_queue_invoke ()
#12 0x966895c0 in _dispatch_worker_thread2 ()
#13 0x966896fc in _dispatch_worker_thread ()
#14 0x965a97e8 in _pthread_body ()
(gdb) 

我没有想法从哪里开始与此有关。它看起来像垃圾的收集是失败的非常严重。是垃圾回收的支持应用程序不支持在罗塞塔?我看不到任何提及的这种限制在该文件如果是这样。

没有任何人有任何想法?

有帮助吗?

解决方案

我现在已经确定,垃圾收集到支持的应用程序无法运行所使用的罗塞塔。后挖掘在谷歌我发现一对夫妇的提及关于在可可豆-开发的邮件列表,虽然没有"正式"从苹果。

我已确认,即使是默认的可可应用程序模板应用程序会立即崩溃,如果编为ppc与垃圾收集,然后推出的在罗塞塔。

我必须说这是非常令人沮丧的是,没有提到这个限制在 普遍的二元方案拟订准则 (其中讨论塞塔), 垃圾收集编程指南 或豹AppKit或基金会发行说明。这也令人沮丧的是,运行不会产生某种有益的错误信息。

作为豹/Rosetta/支持现在是"传统技术"我不想申请一个错误对这一疏忽会做得很好,但希望这种答案将帮助那些遇到了相同的问题。

其他提示

您可以测试它的一种方法是禁用垃圾收集器当你的应用程序启动。

[[NSGarbageCollector defaultCollector] disable];

您会泄漏像疯了似的,但对于一个小测试这可能是工作好。与此有一点需要注意的是,你需要确保它是这种情况发生在你的应用程序的第一件事情之一。在main将是一个不错的地方,但如果你链接到该做的工作在+load方法(或有构造)的框架,你可能需要做的是在框架(或介库代替)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top