5

ネイティブコードを呼び出してGLレンダリングを行うAndroidアプリをデバッグしようとしています。ネイティブコードは、私が移植しようとしている既存のコードです(そして、私はそれをよく知りません)。既存のコードを正しくコンパイル、リンク、およびインストールし、Javaコードから正しく呼び出されているそのコードを呼び出すネイティブ関数をいくつか持っています。追跡しようとしているセグメンテーション違反が発生し、gdbでプログラムにブレークポイントを設定する際に問題が発生します。これは、Cygwinを搭載したWindows XPで発生します。おそらく、まだgdbを学習していることをお伝えしておきます。

http://honeypod.blogspot.com/2008/01/debug-native-application-for-android.htmlの指示から始めました。これが私が現在行っていることです。

エミュレーターでアプリを起動します。

cmdプロンプトの場合:

> adb forward tcp:1234 tcp:1234
> adb shell
# gdbserver localhost:1234 --attach 2120
gdbserver localhost:1234 --attach 2120
Attached; pid = 2120
Listening on port 1234

cygwinシェルの場合:

arm-eabi-4.2.1/bin/arm-eabi-gdb.exe out/apps/app-android/libDM.so
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-cygwin --target=arm-elf-linux"...
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
warning: shared library handler failed to enable breakpoint
0xafe0da04 in AppRefCounted::unref () at ../../stlport/stl/_iosfwd.h:39
39      class basic_ostream;
Current language:  auto; currently c++
(gdb) b Java_com_app_AppRenderer_onCreate
Breakpoint 1 at 0xafff1b1a: file apps/app-android/../../../app-Android/jni/DMJNI/DMInterface.cpp, line 75.
(gdb) c
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0xafff1b1a: Input/Output error.

したがって、ブレークポイントは正常に設定され、シンボルは正常であるように見えますが、ブレークポイントを挿入しようとしたときにアドレスが間違っている可能性があります。上記のWebページからさまざまなコマンドのバリエーションをいくつか試しましたが、これまでのところうまくいきません。

何が起こっているのかアイデアはありますか?

ありがとう

4

1 に答える 1

1

基本的に、NDK 1.6のこの時点では、NDKを使用したこの種のデバッグは厳密にはサポートされていないことがわかりました。ただし、PDK(プラットフォーム開発キット)を使用している場合は、ネイティブコードを使用してこの種のデバッグを実行できます。マップファイルの生成は十分に機能したため(このSOの質問を参照)、PDKを試していませんが、その方法を使用する場合は、NDKgoogleグループで詳細を確認してください。

于 2010-02-25T18:47:32.023 に答える