14

私はしばらくの間jdbをandroidエミュレーターに接続しようとしてきましたが、次のように繰り返し遭遇しました。

jdb -sourcepath ./src -attach localhost:8700

java.io.IOException:shmemBase_attachが失敗しました:システムは指定されたファイルを見つけることができません
        com.sun.tools.jdi.SharedMemoryTransportService.attach0(ネイティブメソッド)で
        com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:90)で
        com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98)で
        com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:45)で
        com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358)で
        com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168)で
        com.sun.tools.example.debug.tty.Env.init(Env.java:64)で
        com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010)で

致命的な誤り:
ターゲットVMに接続できません。

それほど素晴らしいではありません。これを回避するための最良の方法は何ですか?私はWindows764ビットで実行しています。

4

4 に答える 4

18

現在、これは私のために働いています-共有メモリ接続ではなくソケットを作成します。

> jdb –sourcepath。\ src -connect com.sun.jdi.SocketAttach:hostname = localhost、port = 8700

事前にいくつかのセットアップを行う必要があります。たとえば、非Eclipseデバッガーのセットアップに関するこの一連の役立つ詳細を参照してください。これには、最初のブレークポイントを設定するための優れたヒントが含まれています。ホームディレクトリに次のようなコンテンツを含むjdb.iniファイルを作成または編集します。

com.mine.of.package.some.AClassIn:14で停止します

そして、それらは接続されるまでロードされ、延期されます。

編集:HerongYangのページを参照するのを忘れました。

于 2010-11-19T22:04:16.407 に答える
1

AndroidStudioを終了してみてください。

ADBデーモンがすでに実行されているため、Macでも同様の問題が発生しました。実行中のデーモンを終了すると、次のような出力が表示されます。

$ adb -d jdwp
28462
1939
^C
$ adb -d forward tcp:7777 jdwp:1939
$ jdb -attach localhost:7777 -sourcepath ./src
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
> 

詳細とデーモンの起動/停止方法については、同様の質問に対する他の回答を参照してください。

于 2017-09-22T20:56:02.817 に答える
0

回答#1:以前にリンクしたように、hostsファイルにローカルホストをマップします。念のために。

回答#2:共有メモリを使用している場合、ビットサイズが簡単に問題になる可能性があります。どこでも同じ単語幅を使用していることを確認してください。

于 2010-11-19T19:38:42.763 に答える
0

アプリケーションをデバッグするには、次の手順に従います。

デバイスでアプリケーションを開きます。

jdwpでPIDを見つけます(マニフェストで「android:debuggable」がtrueに設定されていることを確認してください):

adb jdwp

次のパラメータを使用してJVMを起動します。

java -agentlib:jdwp=transport=dt_shmem,server=y,address=<port> <class>

このコマンドの期待される出力:

Listening for transport dt_shmem at address: <port>

jdbを使用してアプリケーションを接続します。

jdb -attach <port>

jdbが正常に接続されると、jdbcliが表示されます。

例:

> adb jdwp
  12300
> java -agentlib:jdwp=transport=dt_shmem,server=y,address=8700 com.app.app
  Listening for transport dt_shmem at address: 8700
> jdb -attach 8700
  main[1]
于 2018-04-10T09:16:32.027 に答える