2011-05-06 93 views

回答

4

在一個有根的設備或模擬器上,您可以將gdb附加到zygote,並將一個斷點放在新分叉的進程即將假定正在啓動的應用程序的標識的位置。

如果您修改了zygote來等待調試器附加,它可能會是最簡單的。我相信在Jdwp調試系統中有類似的東西,它可以讓你在代碼啓動的早期就進入Java調試器,但是我不知道有什麼與已經內置的gdb相媲美的東西。儘管我想你可以等待它對於jdwp,並在附加(然後分離)java調試器之前附加gdb。

更新:我試過這個,通過用gdb連接到zygote並修改一個單詞的代碼,這個代碼將會在孩子的早期被執行進入一個無限循環,然後從zygote分離。我想我會在新的孩子出現在'ps'後立即gdb並恢復它,以便它可以繼續。問題在於孩子被殺(大概是因爲沒有反應),比我輸入的所有命令都快。所以它必須由一個程序來完成。而且可能沒有那麼多,你可以在沒有停止的情況下早早看到它並殺死它 - 我的意思是你大概可以在那裏得到一個界限,但是你希望從中學到什麼你不能從閱讀源中學習?

2

OMAPpedia的Android Debugging頁面對使用gdbclient有很好的概述。

gdbclient <executable name> <port number> <task name> 
  • 可執行文件名:獲得:默認爲:5039(需要在號碼前加冒號)
  • 任務名稱系統/ bin目錄
  • 端口
  • 文件名通過在目標上運行「ps」。 GDB使用它來在內部識別PID。

您可能需要建立一個端口轉發與adb第一,像這樣:

adb forward tcp:5039 tcp:5039 
相關問題