2015-02-19 26 views
16

Tôi đang phát triển ứng dụng Android bằng NDK. Tôi có hai dự án. Một là cho thư viện bản địa của tôi sử dụng NDK và tạo tệp .so.Cách nhận điểm ngắt trong mã gốc NDK và gỡ lỗi mã gốc trong Android Studio?

Tôi đang sử dụng Android Studio nhưng tắt tính năng tạo tự động và xây dựng được bật bằng cách sử dụng ndk-build. Tôi đang sử dụng Windows 7.

Bây giờ sau khi tạo .so, tôi sao chép chúng trong dự án ứng dụng chính của tôi cũng sử dụng ndk-build để biên dịch các hàm JNI mà tôi đang gọi hàm của thư viện. Tôi hy vọng tôi sạch sẽ cho đến thời điểm này. Nếu không thì tôi sẽ cung cấp thêm chi tiết theo yêu cầu.

Bây giờ tôi đang chạy ứng dụng của mình trong thiết bị bằng Android Studio và tôi có thể đặt điểm ngắt trong mã java và gỡ lỗi mã đó nhưng tôi không thể gỡ lỗi cuộc gọi JNI và mã gốc mà tôi có trong dự án riêng biệt. Tôi cần gỡ lỗi bên trong mã thư viện của mình. Vậy có cách nào để đạt được điều này không?

Tôi đã xem VisualGDB nhưng được thanh toán. Vì vậy, hãy cho tôi biết nếu có bất kỳ thay thế nào để điền đầy đủ các yêu cầu gỡ lỗi của tôi. Tôi đã tìm kiếm rất nhiều nhưng không nhận được bất kỳ giải pháp cụ thể nào.

Tôi có thể thấy tùy chọn trong Android Studio để đính kèm vào quá trình Android, nơi tôi có thể thấy thiết bị đang chạy của mình nhưng tôi không chắc chắn cách sử dụng nó để tôi có thể gỡ lỗi bằng mã thư viện gốc (trong dự án riêng mà không có bất kỳ hoạt động nào) .

Hãy cho tôi biết nếu cần thêm chi tiết

+0

AFAIK, không thể gỡ lỗi gốc trong studio android. BTW, nếu bạn thêm một số định dạng cho câu hỏi của bạn và làm cho nó ít 'dày đặc', nhiều người sẽ đọc nó. – JonasCz

+0

@JonasCz Trên thực tế, bây giờ, hãy xem câu trả lời của Sistr dưới đây – Shlublu

+0

@Premal, tôi thấy không có câu trả lời được chấp nhận, đã làm bất kỳ giải pháp được đề xuất nào hoạt động khi gỡ lỗi một .so từ một dự án trong dự án thứ 2? – Deemoe

Trả lời

4

Android Studio 1.3+ hỗ trợ gỡ lỗi gốc.

Để thiết lập nó, hãy làm theo các bước sau:

  1. Sửa gradle-wrapper.properties, local.properties, và cả file build.gradle của bạn như thể hiện trong this guide
  2. Sync gradle
  3. Tạo và chọn cấu hình bản dựng mới:

    Nhấp vào thả xuống bên cạnh nút chạy) -> Chỉnh sửa cấu hình, nhấp vào dấu cộng, chọn Android Native, f bị bệnh trong các tùy chọn bên phải (tôi đã sử dụng LLDB trong tab trình gỡ lỗi gốc), và bạn nên được thiết lập.

  4. Set breakpoint trong C++ nút debug

  5. Hit và kiên nhẫn (đôi khi debugger mất một thời gian)

tôi đã có thể gỡ lỗi mã gốc dưới Lubuntu 14.04 với Android Studio 1.3 (kênh ổn định). Mặc dù những người khác được cho là đã thành công trong Windows, tôi haven't been able to debug nguyên bản trong Windows 8.1 (tôi đã thử với Android Studio 1.3, 1.3.2 và 1.4 bản xem trước 3).

Cập nhật Android Studio 1.4 Beta vừa ra mắt. Tôi đã thử nghiệm nó và có thể gỡ lỗi nguyên bản trên Windows 8.1.

+0

Đối với tôi mọi thứ có vẻ ổn, không có lỗi, trình gỡ lỗi được đính kèm trong bảng điều khiển. Nhưng điểm dừng của tôi đơn giản là không bị đánh trúng. Điểm dừng của tôi là một đoạn mã được gọi trong Hoạt động của tôi trên Tạo. Hóa ra có một lỗi trong Android Studio 1.3, nơi các điểm ngắt sẽ không bị ảnh hưởng khi khởi chạy ứng dụng. Nâng cấp IDE của tôi lên 1.4 beta trong kênh Canary và nó hoạt động tốt. –

10

Trong Android Studio 2.0 xem trước quá trình này là một chút khác nhau (ans dễ dàng hơn tôi nghĩ):

  1. Cài đặt "LLĐB": Đi vào Tools-> Android-> SDK Manager, sau đó đi trong "SDK Tools" tab và làm hãy chắc chắn kiểm tra "LLDB" (Gần cuối danh sách thường)
  2. Chọn/biến thể "Gỡ lỗi": Ở góc dưới bên trái của AS, nhấp vào "Build Variants", biến thể gỡ lỗi mặc định được gọi "Debug"
  3. Chọn cấu hình gốc: bên trái của nút chạy (Hình tam giác màu xanh lục), Cấu hình gốc mặc định là calle d "ứng dụng bản địa"
  4. Đặt một breakpoint
  5. Khởi chạy ứng dụng của bạn trong debug bằng cách nhấp vào lỗi nhỏ ở phía bên phải của nút chạy.

Nếu nó không hoạt động, kiểm tra xem cấu hình mẹ đẻ của bạn có kiểu debug "Hybrid" chọn: Trên bên phải của nút chơi, nhấp vào hình tam giác nhỏ, chọn "Chỉnh sửa cấu hình", chọn bạn " cấu hình "ứng dụng gốc", đi vào tab "Trình gỡ lỗi" và chọn "Loại gỡ lỗi: Kết hợp".

+1

BTW nếu bạn thử sử dụng phiên bản graddle 2.9 trở lên, bạn có thể có ngoại lệ con trỏ ** null ** tại thời gian biên dịch. Nếu đó là trường hợp chỉ cần đi vào [sở thích] -> [Xây dựng, thực thi, triển khai] -> [Chạy tức thời] và kiểm tra xem chạy tức thì có bị hủy kích hoạt hay không. Graddle 2.9 có vấn đề với việc chạy ngay lập tức. – Sistr

+0

HAAAAAAAAhahaha !!! Lấy làm tiếc. Tin hay không, BƯỚC 1 là những gì tôi đã bỏ lỡ! Bây giờ nó hoạt động (Studio 2.0 Beta 4, Gradle 2.10, không phải là thử nghiệm). Cảm ơn ! Rất nhiều! Đây sẽ là câu trả lời được chấp nhận! – Shlublu

+0

Vui mừng khi thấy nó đã giúp :) – Sistr

1

tôi đã có thể đặt breakpoint và bước vào mã nguồn gốc nhưng chỉ khi tất cả những điều sau đây là đúng:

  1. Các tạo có nguồn gốc thư viện .so file giữ lại biểu tượng gỡ lỗi của họ
  2. Nguồn được cung cấp (xem "Thư viện Properties" menu)
  3. tôi đặt chạy/xây dựng cấu hình để sử dụng một trình gỡ lỗi mẹ đẻ (như mô tả here)

Nó đang làm việc cho tôi righ t bây giờ trong Android Studio 1.5, sử dụng Gradle Experimental Plugin

Các vấn đề liên quan