2011-05-05 15 views
43

我已經在Eclipse中爲使用Android NDK(在Windows XP上,使用Cygwin)的本地代碼設置了調試,可以在Java和本機代碼中設置斷點,調試器將正確地斷開它們。我的問題是,在逐步完成本機代碼時,我經常會遇到在繼續經過斷點時不會發生的段錯誤/ SIGILL。在Eclipse中進行Android NDK調試 - 如何停止只在進入本機代碼時出現的segfaults/SIGILL

  • 我的應用程序調試的在AndroidManifest.xml中定義
  • 我已經改變時APP_OPTIM被定義爲調試(NDK)/build/core/build-binary.mk,以防止它剝離出來調試符號,它是在Application.mk文件中
  • 我在Android.mk文件中定義LOCAL_CFLAGS := -g -O0我JNI目錄,我也曾嘗試這些標誌分別

我看過這個問題與優化的代碼屬有關特德,但使用-O0關閉優化對我的問題沒有影響。我在編譯時也遇到過使用NDK_BUILD=1標誌,但在AndroidManifest.xml中定義debuggable=true顯然具有相同的效果。

我試着在模擬器(運行2.3.3)和設備上運行(運行2.2 - 這令人驚訝的沒有我期望的線程問題),具有類似的結果(儘管如果我沒記錯的話,代碼中的不同點發生故障)。

有沒有人對我可以嘗試的可能修復/步驟有所瞭解,並且/或者已經能夠成功地通過本地代碼而沒有問題?

非常感謝


編輯:這是從來沒有真正解決,但誰想要看看我的指南NDK調試,你可以找到它 here

編輯2:我得到這個問題的答案來了一旦NDK的新版本出來了,現在這個問題可能是多餘的。我的嚮導可能仍然有效,但我一直沒有使用NDK,所以我不能保證它的持續正確性。我已經接受了我的答案,因爲所有三個人基本上都說了同樣的事情,這是第一個要提交的。

+1

嗨。你是否曾經能夠使Native調試工作正常?出於某種原因,我無法步入(F5)任何本機功能。 – 2011-09-06 03:32:23

+1

@凱文嗨。我所鏈接的指南確實將NDK調試設置爲工作狀態。但是,正如你所說的那樣,它並沒有處理「通過」JNI。但是,由於它將處理在Java和C/C++中設置的斷點,因此可以通過在由NDK調用的C/C++函數的入口點處設置斷點來獲得相應的斷點,然後繼續(F8)到您想要的斷點介入本機代碼。希望有所幫助。 – 2011-09-06 08:54:36

+0

非常感謝!它的確如此。 – 2011-09-06 13:56:25

回答

2

如果它適用於armeabi而不適用於armeabi-v7a,這應該是一個構建問題。解壓bin文件夾中的apk文件,並檢查armeabi和armeabi-v7a中的庫文件是否相同。

0

我注意到的一件事是,armeabi-v7a在某些設備上調試本機代碼時效果不佳。嘗試只爲armeabi建設,看看是否有幫助。

0

編譯-march = C++源文件ARMV4

在構建/核心/組合/臂/ yourarch.mk放-march = ARMV4然後執行毫米-B showcommands來檢查是否使用它。

然後gdbserver可以處理它。

相關問題