2010-07-19 58 views
0

我正在研究一個iPhone應用程序,而且我遇到了一些編譯器問題。這是下拉菜單:用LLVM/Clang編譯會導致崩潰,而不是GCC 4.2

  1. 我正在編譯使用Xcode 3.2.3,目標iOS 4.0:我的設備是運行iOS 4.0的第二代iPod touch。
  2. 使用GCC 4.2進行編譯:可以在模擬器和設備上工作
  3. 使用LLVM編譯器1.5進行編譯:可以在模擬器上工作,但不能在設備上工作。
  4. 使用LLVM GCC 4.2編譯:與LLVM編譯器相同的問題1.5。

當它失敗時,應用程序甚至從未完成加載。這是什麼日誌看起來像:

run 
Running… 
[Switching to thread 11523] 
[Switching to thread 11523] 
sharedlibrary apply-load-rules all 
continue 
Program received signal: 「EXC_BAD_ACCESS」. 
warning: check_safe_call: could not restore current frame 

warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 
warning: Unable to restore previously selected frame. 

我不知道這是怎麼回事。我真的想更新我的代碼以使用WWDC上宣佈的最新功能(隱含的@synthesize,在類別中添加實例變量的能力等),但Clang對此非常必要。

+0

似乎它已經進一步縮小在這個問題上 - 不知道他們是否相關:http://stackoverflow.com/questions/5490432/building-with-llvm-and-any-optimization-causes-app-to -crash-on-startup – makdad 2011-04-04 05:01:40

+0

迷人。這個問題明確地決定開始發生;當我把所有東西都搬到一個新的項目時它就消失了。我和你一樣,想知道這兩者是否有關係。 – 2011-04-04 05:04:50

回答

3

看起來像內存上的東西。更具體地說,在堆棧上。

LLVM和GCC之間的代碼有一些相當顯着的,雖然完全微妙的差異。請記住,LLVM-GCC確實是GCC-> LLVM;也就是GCC解析器提供LLVM代碼生成引擎。

因此,我懷疑你打了一個可愛的邊緣情況。無論是LLVM的codegen中的錯誤還是程序中的錯誤都表現爲這種崩潰。

我可以想象一下,如果未能複製一個塊,然後在另一個線程上執行該塊,可能會像這樣崩潰。

無論如何,如果可以的話,請提交錯誤。

+0

感謝您的分析。問題是我的代碼實際上並沒有運行,所以我不認爲它可能是一個問題。它甚至沒有使它成爲-applicationDidFinishLaunching :. 是否有可能以某種方式讓我的devtools安裝了? – 2010-07-19 04:47:48

+0

可能。這聽起來像是一個dyld /鏈接器問題。重新安裝不會傷害。很奇怪。仍然;提交錯誤並提供二進制文件,如果可能的話。 – bbum 2010-07-19 05:13:39