2

PCでビデオストリーマー(C++)を作成し、Androidで同じクロスプラットフォームセクションを実装しようとしています。私は十分に「遊んで」 、コードをコンパイルしてAndroid(別名JNI)NDKと統合する方法について少し知っています。C

問題は、アプリケーションがクラッシュすることがあり、ご存知のように、Androidがコードが失敗した場所(C / C ++部分)を示さないことです。

ビデオストリーマーのコードには多くのライブラリがあり、たとえば、ログを残すために使用したオープンソースの部分はお勧めできません。Eclipseを使用していますが、 C ++コードをデバッグするにはどうすればよいですか、またはEclipseにデバッグ用のプラグインがありますか?

どうもありがとう、

4

2 に答える 2

3

ものをログに記録し、Androidのlogcatで確認するために、そのための簡単なクラスがあります。

#ifndef LOG_H_
#define LOG_H_

#include <android/log.h>

#define LOGD(LOG_TAG, ...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(LOG_TAG, ...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGV(LOG_TAG, ...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
#define LOGW(LOG_TAG, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(LOG_TAG, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)

#endif /* LOG_H_ */

次のように使用できます。

LOGI("YourClassTag","let's print some stuff: %i, %s", 4, "I'm a string");

一部のクラッシュに関する詳細情報を取得するには、adbを使用してJNICheckを有効にしてみてください。

通常のデバイスを使用している場合は、次のコマンドを使用できます。

adb shell setprop debug.checkjni 1

これはすでに実行中のアプリには影響しませんが、それ以降に起動されるアプリではCheckJNIが有効になります。(プロパティを他の値に変更するか、単に再起動すると、CheckJNIが再び無効になります。)この場合、次にアプリを起動したときに、logcat出力に次のようなものが表示されます。

D遅延対応CheckJNI

于 2013-03-11T21:14:31.190 に答える
3

ネイティブコード用のGDB(GNU Debugger)は、Android 2.2(SDKレベル8)以降で使用できます。

NDK_DEBUG=1コマンドラインのオプションを使用してNDKコードを再構築します。アプリを起動します。次に、プロジェクトの下のjniフォルダーが現在のものであるときに、WindowsまたはCygwinコマンドラインから「ndk-gdb」コマンドを呼び出します。GDBコンソールが表示されます。入力してEntercキーを押すと、プログラムの実行が続行されます(GDBが接続すると一時停止します)。

しかし、それは精神の弱い人のためではありません。GDBは、その厳格なインターフェイスで知られています。ただし、少なくともbt、クラッシュが発生したときのクラッシュ(コマンド)のスタックバックトレースが提供されます。

以前のバージョンのAndroidで実行されているプロセスにGDBを接続することもできますが、手順はかなり複雑です。

GDBリファレンスはこちらです。

于 2013-03-12T14:25:52.950 に答える