2012-01-19 5 views
15

Tôi đang cố gắng gỡ lỗi và bước qua ứng dụng Android tách biệt. Tôi đã thử ndk-gdb, nhưng với chút may mắn. Tôi cũng đã gọi đến số Android NDK Debugging mà không thể gỡ lỗi ứng dụng của mình.Gỡ lỗi ứng dụng gốc của Android NDK

Khi tôi cố gắng ndk-gdb --start, và tôi nhận được:

$ ndk-gdb --start --verbose 
Android NDK installation path: /opt/android-ndk-r7 
Using default adb command: /opt/android-sdk-linux/platform-tools/adb 
ADB version found: Android Debug Bridge version 1.0.29 
Using final ADB command: '/opt/android-sdk-linux/platform-tools/adb' 
Using auto-detected project path: . 
Found package name: com.example.native_plasma 
ABIs targetted by application: armeabi armeabi-v7a 
Device API Level: 10 
Device CPU ABIs: armeabi-v7a armeabi 
Compatible device ABI: armeabi-v7a 
Found debuggable flag: true 
Found device gdbserver: /data/data/com.example.native_plasma/lib/gdbserver 
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup 
Using toolchain prefix: /opt/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi- 
Using app out directory: ./obj/local/armeabi-v7a 
Found data directory: '/data/data/com.example.native_plasma' 
Found first launchable activity: android.app.NativeActivity 
Launching activity: com.example.native_plasma/android.app.NativeActivity 
## COMMAND: /opt/android-sdk-linux/platform-tools/adb shell am start -n com.example.native_plasma/android.app.NativeActivity 
Starting: Intent { cmp=com.example.native_plasma/android.app.NativeActivity } 
## COMMAND: /opt/android-sdk-linux/platform-tools/adb shell sleep 2 
Found running PID: 0 
ERROR: Could not extract PID of application on device/emulator. 
     Weird, this probably means one of these: 

     - The installed package does not match your current manifest. 
     - The application process was terminated. 

     Try using the --verbose option and look at its output for details. 

Điều này cho thấy rằng việc áp dụng segfaulted ít hơn, nhưng tôi không biết làm thế nào để thiết lập một breakpoint ở đây từ gdb không bao giờ thực sự mang đến một dấu nhắc.

Tôi cũng đã cố gắng lệnh này:

$ ../../toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-addr2line -f -e libs/armeabi/libnative-plasma.so 
bedb2330 
?? 
??:0 

Tôi có ký hiệu gỡ lỗi tôi tin.

  • ndk-build -B V=1 APP_OPTIM=debug
  • Android.mk trong jni/LOCAL_CFLAGS := -g
  • ant debug

Tôi cũng đã ndk-build NDK_DEBUG=1 nhưng tôi vẫn nhận được nơi có vẻ như tôi không có ký hiệu gỡ lỗi.

Đây là hình ảnh theo dõi ngăn xếp. Nó không nhận được bất kỳ thông tin mới hơn:

Traceback

+0

Tôi không biết nếu nó sẽ giúp đỡ, nhưng nếu bạn đang tìm kiếm một số tài liệu (đó là hết hạn, đầu óc , khi nó nói về NDK r5b), sau đó tôi đã viết một hướng dẫn cách đây vài tháng mà bạn có thể tìm thấy [ở đây] (http://www.doc.ic.ac.uk/~cb908/AndroidNDK.html).Tôi sợ rằng tôi không thể cung cấp thêm thông tin chi tiết về vấn đề, ngoại trừ việc kiểm tra tên gói được xuất trong nhật ký đó giống như trong tệp kê khai (nhưng tôi tưởng tượng nó là vì nó tìm thấy thư mục dữ liệu và nội dung) –

+0

Cảm ơn. Có vẻ như bạn đã sử dụng Eclipse. Tôi đang sử dụng dòng lệnh. Tôi hy vọng tôi không phải sử dụng Eclipse. : \ – Scott

+0

Ah, vâng, tôi không nghĩ về điều đó. Các nguyên tắc phải giống nhau - theo như tôi biết Eclipse chỉ hiển thị đầu ra gdb và cung cấp cho gdb các lệnh đúng (ví dụ khi bạn nhấp vào nút bước) - vì vậy không, bạn không cần sử dụng nó. Bạn có thể thử tắt tối ưu hóa trong 'LOCAL_CFLAGS' (-O0 tôi nghĩ), nhưng tôi nghi ngờ nó sẽ làm nhiều. Cách xa ứng dụng là điểm dừng đầu tiên của bạn? –

Trả lời

11

Vâng NDK_DEBUG = 1 và cờ debuggable trong bộ manifest true được yêu cầu. Khi bạn xây dựng ứng dụng, trong dự án/libs/armeabi của bạn, sẽ có một tệp gdb.setup. Có đường dẫn tìm kiếm biểu tượng ở đó, kiểm tra xem nó có hợp lệ hay không. Và bạn đã thử điều này:

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

Và có vẻ như bạn đang nhận được ngoại lệ con trỏ null.

+0

đã dành gần một nửa ngày nắng đẹp francisco, tôi cuối cùng đã đi qua câu trả lời của bạn và thì đấy, điểm ngắt của tôi hiện đang bị ảnh hưởng bởi juno sau khi bắt đầu gdb theo quy định của bạn. Rất rất cảm ơn!! – Viren

7

Trong các phiên bản mới nhất của NDK và Eclipse plug-in, bạn có thể nhấp chuột phải vào gói và chọn gỡ lỗi như ->Android Native Application

1

Hãy chắc chắn rằng bạn tải thư viện mẹ đẻ của bạn trong hoặc một hoạt động launchable hoặc trong lớp Ứng dụng của bạn. Nếu không, nó sẽ không hoạt động và bạn sẽ nhận được lỗi sau đây No symbol table is loaded. Use the "file" command..

Ví dụ trong lớp Application:

import android.app.Application; 

public class MyApp extends Application { 

    static { 
     System.loadLibrary("Name"); 
    } 

    public static native int doSomething(); 
} 

Tên là tên của thư viện của bạn (.so tập tin) mà không cần phần lib.

+0

Cảm ơn rất nhiều, điều đó đã xảy ra sau 4h! – marcus

0

tôi giải quyết việc đưa --nowait tùy chọn để lệnh shell:

ndk-gdb --start --verbose --nowait