問題タブ [ndk-gdb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
9392 参照

android - APP_BUILD_SCRIPT が不明なファイルを指しています: ./jni/Android.mk

ndk-gdb を機能させようとしていますが、いくつか問題があります。

私のプロジェクト構造は次のようなものです:

質問 1: マニフェストが正しい場所にあるディレクトリから ndk-gdb を実行する必要があることを理解していますか? または、ndk-gdb コマンドに --project パラメーターを指定します。

したがって、次のように ndk-gdb を起動しようとすると:

この出力は、android_manifest ファイルが配置されているメイン プロジェクトのサブフォルダーで直接 Android.mk を見つけようとしていることを示していますが、間違っている可能性があります。

Application.mk の APP_BUILD_SCRIPT パスは次のようになります。

APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/jni/Android.mk

しかし、ここでは APP_PROJECT_PATH が何を指しているのかわかりません。/home/johan/projects/... などのように Android.mk ファイルへのフルパスをハードコーディングしようとしましたが、それでもエラーが発生します:

APP_BUILD_SCRIPT が不明なファイルを指しています: ./jni/Android.mk

私のApplication.mkを見ていないように、パスは変更されていないようです。

完全なトランク ディレクトリで APP_PROJECT_PATH への参照を検索しようとしましたが、このパラメーターはこの Application.mk のこのフォルダーでのみ定義されています。マニフェスト ファイルを含むフォルダーの直下に /jni フォルダーをサブフォルダーとして配置しなくても、プロジェクトを作成してデバッグできると思いますか?

デバッグを機能させる方法についてのヒントをいただければ幸いです。

0 投票する
4 に答える
7004 参照

android - ndk-gdb エラー: デバイスはアプリケーションのターゲット CPU ABI をサポートしていません

ndk-gdb を実行しようとすると、次のエラーが発生します。

Android NDK インストール パス: /Library/AndroidSDK/ndk/
特定の adb コマンドを使用: /Library/AndroidSDK/platform-tools/adb 検出された
ADB バージョン: Android Debug Bridge バージョン 1.0.31
ADB フラグ
を使用: 自動検出されたプロジェクト パスを使用: .
見つかったパッケージ名: com.dev.project
jni/Android.mk:18: * Android NDK: 中止します。. 止まる。
アプリケーションがターゲットとする ABI: Android NDK:
デバイス API レベル: 17
デバイス CPU ABI: armeabi-v7a armeabi
エラー: デバイスはアプリケーションのターゲット CPU ABI をサポートしていません!
デバイスのサポート: armeabi-v7a armeabi
パッケージのサポート: Android NDK:

jni/Android.mk の 18 行目はインポート モジュールの呼び出しです。

それは何を意味し、どのようにそれを修正するのですか?

アプリは ndk ドキュメントに従ってデバッグ可能です。私はマックを使用しています。アプリをビルドして実行できるので、ビルド スクリプトは問題ないはずです。


Android.mk

アプリケーション.mk

0 投票する
0 に答える
1499 参照

android - Eclipse Android ネイティブのデバッグが失敗する

Windows for Android で Eclipse プロジェクトのネイティブ デバッグ サポートを機能させるのに問題があります。残念ながら、Google は 1 日以上調査を行った後も役に立ちませんでした。

私は日食のほとんどの初心者なので、私が推測する非標準的なことも行うので、解決策は簡単かもしれません。

私の Android プロジェクトは、私のデバイス (Acer Iconia A500 Android 3.2.1、HTC Incredible S Android 4.0.4 など) で既に機能し、正常に動作しています。

ADT プラグイン ウィザードでプロジェクトを作成し、ADT によって追加されたプロジェクト コンテキスト メニュー エントリを使用してネイティブ サポートを追加しました。

次に、既に持っている Java ファイルを追加しました (以前は CMake と Android スタンドアロン ツールチェーンを使用してコンパイルしていましたが、この方法でリモート デバッグを試みたことはありませんでした)。それらをドロップした「com.xy」の新しいパッケージを作成しました(プロジェクトは商用製品の一部になるため、実際のパッケージ名は明らかにしたくありません)。

次に、ソースを jni フォルダーにドラッグして追加しました。ソースは jni フォルダー内にはありませんが、プロジェクトの下の場所「../../」にリンクされています (クロスプラットフォーム アプリケーションの一部であるため、さまざまなツールチェーンでソース ファイルを再利用できます)。

また、次のように Android.mk を調整して、製品に同梱される 4 つの静的ライブラリにもリンクします。

Application.mk もあります。

次に、デバッグ構成の下に、デフォルトのアクティビティを起動して使用する新しい「Android ネイティブ アプリケーション」を追加しました。

デバッガー「${NdkGdb}」

コマンドファイル "${NdkProject}\libs\${NdkCompatAbi}\gdb.setup"

共有ライブラリ (自動的に追加) ${NdkProject}/obj/local/$NdkCompatAbi}/

残りも自動的に追加され、このように動作するはずです。

私が奇妙だと思うことの1つは、コンソール出力を取得することです

[2013-03-08 10:50:36 - cygpath を起動できません。] java.io.IOException: プログラム "cygpath" を実行できません: CreateProcess エラー = 2、指定されたファイルが見つかりません

しかし、この方法でプロジェクトをうまくビルドでき、後で gdb を接続しようとしても警告が表示されません (私は Msys を使用していますが、cygwin もインストールされているため、Eclipse がここで不平を言っている理由がわかりません)。

アプリケーションを起動すると、デバイスで起動し、次のコンソール出力 ([Android ネイティブ アプリケーション] gdb) が表示されます。

私は間違いなく NDK_DEBUG=1 でビルドします。静的 .a ライブラリは -g でビルドされます AndroidManifest.xml にはエントリ android:debuggable="true" があります。

(Msys を使用して) Eclipse プロジェクト ディレクトリで "sh /ndk-gdb --verbose" を実行すると、次の出力が得られます。

Android NDK インストール パス: /c/SDK/android-ndk-r7 デフォルトの adb コマンドを使用: /c/SDK/android-sdks/platform-tools/adb.exe 検出された ADB バージョン: Android Debug Bridge バージョン 1.0.31 最終的な ADB を使用コマンド: '/c/SDK/android-sdks/platform-tools/adb.exe' 自動検出されたプロジェクト パスを使用: . 検出されたパッケージ名: com.xy アプリケーションによってターゲットにされた ABI: armeabi-v7a デバイス API レベル: 13 デバイス CPU ABI: armeabi-v7a armeabi 互換性のあるデバイス ABI: armeabi-v7a 検出されたデバッグ可能なフラグ: true エラー: ターゲットにインストールされたデバッグ不可能なアプリケーションデバイス。デバッグ可能なバージョンを再インストールしてください!

このプロジェクトのネイティブ デバッグ サポートが本当に必要です。だから私は本当に助けていただければ幸いです。

cygwin を使わなければならないというのは本当ですか? デバッガーをアタッチしようとしているときに、妥当なエラー メッセージが表示されません。

0 投票する
0 に答える
95 参照

android-ndk - ndk-gdb の vi バインディング

C+M+jgdbでviモードに入ることは知っています。Cygwin-gdb は私のシェル設定 ( set -o vi) に従っているようで、自動的に vi モードになります。ただし、ndk-gdb を vi モードにすることはできないようです。誰も方法を知っていますか?

0 投票する
1 に答える
6981 参照

android - Android NDK + GDB

ndk-gdb の使用を手伝ってください!

StackOverflow やその他のインターネットを検索しました =) が、まだ何か問題があります。

構成: MacOSX 64 + 最新の SDK + 最新の NDK + 最新の IDEA + Nexus 7 + 巨大な C++ プロジェクト。

私はすべての一般的な取り決めをしました:

  • -g -ggdb -O0LOCAL_CFLAGS(これも試しただけ-g
  • APP_OPTIM := debug
  • debuggable=«true»マニフェストで
  • ndk-build NDK_DEBUG=1

gdb.setup および gdbserver ファイルが期待どおりに取得されますが、nmコマンドを実行すると *.so ファイルに何も出力されません。

プロジェクトのルート フォルダーで実行ndk-gdbし、GDB を動作させます。たとえば、アプリを一時停止して再開したり、アドレスで ASM コードを取得したりできます。でブレークポイントを設定してもbreak Class::method、gdb は正しいファイル名と行番号を教えてくれます。

しかしブレークポイントは 99% でヒットしません。バックスタックは常に明らかに間違っています (メソッド名が間違っています)。すべてのシンボリック名とアドレスが間違ってマッピングされているようです。

私は何を逃したのですか?

アップデート。2 つのコマンドinfo sharedlibraryC.

あなたはそれを見ることができます

  • lib3.so (メイン ライブラリ) が最も正しくロードされます (またはロードされない?)
  • ブレークポイントアドレスの調整 (どういう意味ですか?)
0 投票する
2 に答える
3189 参照

bash - gdb から実行されるシェル コマンドに gdb 変数を渡す

gdb からシェル コマンドを実行したいのですが、このシェル コマンドには引数が必要で、この引数は gdb 変数です。コマンドと引数をシェル インタープリターに渡す前に、gdb にこの変数を解釈させるにはどうすればよいですか?

たとえば、gdb プロンプトでは次のようになります。

2これを に印刷したいのですstdoutが、実際には空白行が印刷されます。

編集: Python スクリプトをサポートしていない ndk-gdb を使用しています。

0 投票する
4 に答える
24346 参照

android - run-as パッケージ 'abc' が不明 - Galaxy S4 Jellybean または Android 4.3

Jellybean 4.2.2 を実行している Galaxy S4 で run-as (または ndk-gdb) を実行できません。

ICS 以前のデバイスに関するこの問題には複数の回答がありますが、それらは ICS で修正されているようです。

更新 - 2013 年 8 月: Jellybean 4.2.2 を搭載した Galaxy S4 で最初に発生した後、run-as の問題はすべての 4.3 デバイスで発生しているようです。このAndroid バグを参照してください。

確認済みの Android の問題については、こちらを参照してください。

更新 - 2013 年 11 月: Googleは Android 4.4 の run-as を修正するパッチを投稿しました。

0 投票する
2 に答える
1581 参照

android - ndk-gdb を使用した Android ネイティブ アプリケーションのデバッグ

Eclipse で ndk-gdb を使用してネイティブ (c++) コードを持つ Android アプリケーションをデバッグしようとしています。しかし、Eclipseでは、このエラーが表示されています:デバイスcom.android.ddmlib.SyncExceptionからファイルを取得中にエラーが発生しました:ローカルファイルの書き込みに失敗しました

誰でも私を助けてください。

0 投票する
3 に答える
3671 参照

android-ndk - r9 を使用した NDK のデバッグは W7/64 では機能しますが、XP では問題が発生します

最近、新しい Android 開発ツール、SDK 20130717 および NDK r9 をロードしました。

これまで、XP と W7/64 の両方のシステムで、Eclipse 内からの作業とデバッグに問題なく以前のバージョンを使用していました。

現在、新しいツールをインストールした W7/64 は機能し、新しいツールのインストールと必要なパス環境の変更後にアプリを正常にデバッグします。

「Debug As」+「Android Native Application」を選択すると問題なく動作します。

まだXPは、フォルダー/ cygwinなどに関して正確な構成を持っていますが、新しいツールがインストールされ、必要なパスenvが変更された後、ndk-dbgを開始できず、決定的に待機しているようです。 「MyApp の起動 (1): (100%)」で。これは、「Debug As」+「Android Native Application」を選択した後に発生します。

何が原因である可能性があるかについてのヒントはありますか?または、XP と r9 のデバッグで見逃している既知の問題はありますか?

ありがとう、クリストス

*編集

ndk-gdb を手動で開始しようとしましたが、これが得られたものです。ヒントは大歓迎です

引用符

$ ndk-gdb --start --verbose --force

Android NDK インストール パス: /cygdrive/e/android-ndk-r9

デフォルトの adb コマンドを使用: /cygdrive/e/adt-bundle-windows-x86-20130717/sdk/platform-tools/adb

ADB のバージョンが見つかりました: Android Debug Bridge バージョン 1.0.31

ADB フラグの使用:

JDB コマンドの使用: /cygdrive/e/Android/Java/jdk1.7.0_21/bin/jdb

自動検出されたプロジェクト パスを使用: .

見つかったパッケージ名: myndkpackage

アプリケーションが対象とする ABI: armeabi-v7a

デバイス API レベル: 17

デバイス CPU ABI: armeabi-v7a armeabi

互換性のあるデバイス ABI: armeabi-v7a

gdb セットアップ初期化の使用: ./libs/armeabi-v7a/gdb.setup

ツールチェーン プレフィックスの使用: /cygdrive/e/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-

アプリ出力ディレクトリの使用: ./obj/local/armeabi-v7a

デバッグ可能なフラグが見つかりました: true

デバイス gdbserver が見つかりました: /data/data/myndkpackage/lib/gdbserver

見つかったデータ ディレクトリ: '/data/data/myndkpackage'

最初の起動可能なアクティビティが見つかりました: myndkpackage.MainActivity

起動アクティビティ: myndkpackage/myndkpackage.MainActivity

コマンド: adb_cmd shell am start -D -n myndkpackage/myndkpackage.MainActivity

開始: 意図 { cmp=myndkpackage/.MainActivity }

コマンド: adb_cmd シェル スリープ 2

実行中の PID が見つかりました: 2787

既存のデバッグ セッションを強制終了しています

コマンド: adb_cmd shell kill -9 2753

gdbserver を正常に起動しました。

ネットワーク リダイレクトのセットアップ

コマンド: adb_cmd shell run-as myndkpackage lib/gdbserver +debug-socket --attach 2787

コマンド: adb_cmd forward tcp:5039 localfilesystem:/data/data/myndkpackage/debug-socket

添付; ピッド = 2787

Unix ソケットでリッスンする debug-socket

コマンド: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process

599 KB/秒 (0.015 秒で 9588 バイト)

デバイス/エミュレーターから app_process をプルしました。

コマンド: adb_cmd pull /system/bin/linker obj/local/armeabi-v7a/linker

658 KB/秒 (0.093 秒で 63244 バイト)

デバイス/エミュレーターからリンカーをプルしました。

コマンド: adb_cmd pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so

744 KB/秒 (0.390 秒で 297608 バイト)

デバイス/エミュレーターから libc.so をプルしました。

JDB 接続のセットアップ

コマンド: adb_cmd forward tcp:65534 jdwp:2787

java.io.IOException: ハンドシェイクに失敗しました - 接続が途中で閉じられました

com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:136) で

com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:232) で

com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:116) で

com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:90) で

com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:519) で

com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:328) で

com.sun.tools.example.debug.tty.Env.init(Env.java:63) で

com.sun.tools.example.debug.tty.TTY.main(TTY.java:1066) で

致命的な誤り:

ターゲット VM に接続できません。

/cygdrive/e/android-ndk-r9/ndk-gdb: 742 行目: 4636 セグメンテーション違反 $GDBCLIENT -xnative_path $GDBSETUP

引用符

0 投票する
0 に答える
1554 参照

android - ndk-gdb を Android プロセスにアタッチできません

Android アプリケーションには、メイン アプリケーション プロセスとリモート サービス プロセスの 2 つのプロセスがあります。ネイティブ ライブラリは、リモート サービス プロセスからロードされます。

ネイティブ ライブラリ コードをデバッグしたい。アプリケーションはデバッグ可能です。ネイティブ ライブラリは、ndk-build を使用して Windows コマンドラインからビルドされました。Android.mk では、このライブラリに -g -ggdb フラグが使用されていました。Cygwin から ndk-gdb を実行しています。

テストデバイス: Android 4.2.2 を実行する Galaxy Nexus

エラー行: 共有ライブラリの読み込み中にエラーが発生しました: ?: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

詳細情報では、gdbserver がメイン アプリケーション プロセスのプロセス ID にアタッチしようとしていることがわかります。ライブラリがこのアプリケーション内のリモート プロセスから読み込まれることが重要です。

詳細な ndk-gdb 実行情報- $ ndk-gdb --verbose --force
Android NDK インストール パス: /cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9
Using default adb コマンド: /cygdrive/c/work/android/sdk/android-sdk_r10-windows/android-sdk-windows/platform-tools/adb
見つかった ADB バージョン: Android Debug Bridge バージョン 1.0.31
ADB フラグの
使用: JDB コマンドの使用: /cygdrive/c/program files (x86)/java/jdk1.6.0_25/bin/jdb
自動検出されたプロジェクト パスを使用: .
見つかったパッケージ名: [application-pkg-name]
アプリケーションが対象とする ABI: armeabi
デバイス API レベル: 17
デバイス CPU ABI: armeabi-v7a armeabi
互換性のあるデバイス ABI: armeabi
gdb セットアップ init を使用: ./libs/armeabi/gdb.setup
ツールチェーン プレフィックスを使用: /cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux -androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-
アプリ出力ディレクトリの使用: ./obj/local/armeabi 検出
されたデバッグ可能フラグ: true
検出されたデバイス gdbserver: /data/data/[applcation-pkg-name] /lib/gdbserver 検出
されたデータ ディレクトリ: '/data/data/[applcation-pkg-name]'
実行中の PID が検出されました: 17890
gdbserver が正常に起動されました。
ネットワークリダイレクトのセットアップ
## コマンド: adb_cmd shell run-as [applcation-pkg-name] lib/gdbserver +debug-socket --attach 17890
## コマンド: adb_cmd forward tcp:5039 localfilesystem:/data/data/[applcation-pkg-name]/debug-socket Attached; pid = 17890 [コメント: この pid はメイン アプリケーション プロセス用です]
Unix ソケットをリッスンする debug-socket
## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi/app_process
493 KB/s (0.019 で 9592 バイト) s)
デバイス/エミュレーターから app_process をプルしました。
## コマンド: adb_cmd pull /system/bin/linker obj/local/armeabi/linker
1165 KB/s (0.053 秒で 63244 バイト)
デバイス/エミュレーターからリンカーをプルしました。
## コマンド: adb_cmd pull /system/lib/libc.so obj/local/armeabi/libc.so
2442 KB/s (0.119 秒で 297608 バイト)
デバイス/エミュレーターから libc.so をプルしました。
/cygdrive/c/work/android/ndk/android-ndk-r9-windows-x86/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-gdb .exe: 共有ライブラリの読み込み中にエラーが発生しました: ?: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

役立つ可能性のあるいくつかの補足事項-
1) --force を指定せずに ndk-gdb コマンドを実行すると、別のデバッグ セッションが実行されているというエラーが表示されます。前回の実行中に gdb プロンプトが出ましたが。2) Android 4.3 で、同じアプリケーションとセットアップを使用すると、「パッケージのデータ ディレクトリを抽出できませんでした」というエラーが表示されます。