2012-07-09 33 views
1

我知道有一些方法使用「dalvik.vm.stack追蹤文件」得到內核線程的堆棧,以獲得調用堆棧如何獲取在android中的用戶空間上運行的指定進程的調用堆棧?

  1. 或使用原路返回獲取堆棧當前流程

但現在我需要跟蹤用戶空間過程中,有許多子進程(線程)只有在一些特殊的事件發生,由另一個進程(我們可以把它當作一個臨時的調試器)。有沒有辦法做這樣的事情?

ptrace(http://linux.die.net/man/2/ptrace)是一個很好的建議,但似乎沒有辦法跟蹤線程?

更新

  1. http://man7.org/linux/man-pages/man2/ptrace.2.html這似乎 「每一個線程可以被單獨附接至一個(可能不同的)示蹤劑」!?

  2. 我試圖用ptrace來獲取進程的堆棧。但我發現我沒有權限?我使用

    ptrace(PTRACE_ATTACH,tid2,NULL,NULL);

    但-1是返回,並且errno爲1(操作不允許

    難道我錯過了什麼?

  3. 我在android平臺上工作。看來我沒有權限附加一些過程? (GDB工具是根,但我的應用程序是沒有的。)

+0

這隻會真正適用於您自己的代碼或植根設備。 – 2012-07-09 11:56:33

+0

是的。它是。我可以編譯代碼。 – carl 2012-07-09 12:23:29

回答

1

如果要附加到一個進程,必須有一個父/子關係之間你處理並進行連接,或者你的進程運行作爲根。

相關問題