สภาพแวดล้อม: NDK ล่าสุด + Eclipse Juno + ADT + CDT ทุกอย่างเป็นข้อมูลล่าสุด
เมื่อฉันพยายามดีบักแอปพลิเคชัน Android ของฉัน ฉันได้รับข้อผิดพลาดต่อไปนี้:
warning: Unable to find dynamic linker breakpoint function.
GDB will retry eventurally. Meanwhile, it is likely
that GDB is unable to debug shared library initializers
or resolve pending breakpoints after dlopen().
เพื่อให้แน่ใจว่าไม่ใช่แอปพลิเคชันเฉพาะของฉัน ฉันจึงสร้างแอปพลิเคชันจำลองแบบง่ายๆ นี่คือขั้นตอนที่ฉันทำ
- จาก Eclipse สร้างโครงการแอปพลิเคชัน Android ใหม่ (ด้วย min-sdk 16 และ target-sdk 21)
- เพิ่มคลาส:
package com.test.mytest1;
public class MyNative {
static {
android.os.Debug.waitForDebugger();
System.loadLibrary("mytest1");
}
native public static void init();
}
โปรดทราบว่าฉันได้เพิ่มบรรทัดเพื่อรอให้ดีบักเกอร์เริ่มต้น
เรียกว่า MyNative.init() จากเมธอด onCreate() ของ MainActivity
จากการตั้งค่า แก้ไข NDK ให้ชี้ไปที่ไดเร็กทอรี C:\adt\ndk
จากเมนูโปรเจ็กต์ ให้เลือกเครื่องมือ Android-->เพิ่มการสนับสนุนแบบเนทีฟ
จาก Properties->C++ Build ให้ตั้งค่าคำสั่ง build เป็น "ndk-build NDK_DEBUG=1"
นี่คือโค้ดใน mytest1.cpp:
static int x = 0;
JNIEXPORT void JNICALL Java_com_test_mytest1_MyNative_init(JNIEnv *, jclass)
{
x++;
}
- เพิ่ม Application.mk ในไดเร็กทอรี jni:
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
ตอนนี้ เมื่อฉันพยายามเรียกใช้แอปแบบเนทิฟแอปพลิเคชัน มันล้มเหลวโดยมีข้อความที่กล่าวมาข้างต้น
เมื่อฉันดูไฟล์ APK lib/armeabi-v7a มีไฟล์ gdbserver และ libmytest1.so
แอปใช้งานได้ หากฉันเพิ่มคำสั่ง log() ในวิธีดั้งเดิมของฉัน ข้อความนั้นจะแสดงใน LogCat
ฉันสับสนและเหนื่อย สิ่งง่ายๆ เช่น สิ่งควรจะได้ผล สงสัยว่าคุณสามารถแบ่งปันสิ่งที่คุณทำแตกต่างออกไปเพื่อให้มันได้ผลได้ไหม ความนับถือ.
android.os.Debug.waitForDebugger();
ในเครื่องมือเริ่มต้นแบบคงที่ เมื่อจำเป็น ฉันมักจะวางไว้ในonCreate
ฉันไม่แน่ใจว่ามันสำคัญสำหรับปัญหาของคุณหรือเปล่า - person jww   schedule 13.09.2014