0 👍
128 lượt xem
bởi (🏅0)
đã sửa bởi
Em chào mọi người ạ! Em có vấn đề rất cần mọi người giúp em với ạ.
Hiện tại em đang viết một app xử lý ảnh. App chạy trên android, nhưng core xử lý của nó em viết bằng C++, sử dụng thư viện OpenCV ạ. Chương trình của em build trên máy tính thì mất tầm 8s cho ra kết quả. Nhưng khi em cài app trên máy android (cấu hình: RAM 3GB, chip snap dragon 665, android ver 9.0) thì xử lý rất chậm, mất khoảng 1 phút mới cho ra kết quả. Và tồi tệ hơn là app bị crash liên tục, vừa đưa input vào để module C++ xử lý là app bị crash ngay. Trung bình 10 lần thì chỉ có 2-3 lần là xử lý thành công.
Vậy anh chị cho em hỏi có phải do code C++ của em đang gặp vấn đề lỗi Memory leak không ạ? Và có thể cho em xin hướng fix bug, các tool để check memory, timing của C++ được không ạ. Em build code C++ trên Ubuntu.
Em cảm ơn mọi người nhiều...

3 câu trả lời

+1 👍
bởi (🏅150)
đã được chọn bởi
 
Câu trả lời hay nhất
Android nó có logcat để check log của cả hệ thống. Thường khi chương trình bị crash nó sẽ log ra error qua logcat. Đầu tiên là em thử xem logcat rồi filter ra các log error xem khi crash thì nó báo cái gì để từ đó có thể điều tra tiếp.
bởi
Em đã check logcat nhưng không thấy exception nào ạ... Em có kiểm tra memory trong memory profiler của android studio thì memory tăng lên 350 MB khi chạy đến module đó. Sau đó crash luôn. Tiện anh cho em hỏi là trên ubuntu có tool nào dễ sử dụng để check memory với timing của C++ không ạ? Em cảm ơn anh nhiều ạ
bởi (🏅150)
Nếu vậy khả năng là code của em bị leak memory rồi. Trên ubuntu thì e có thể dùng  tool Valgrind hoặc Perf để check memory. 

Ngoài ra e có thể kết hợp dùng thêm tool cppcheck để static check code xem nó có tìm ra leak chỗ nào ko.
bởi (🏅0)
anh cho em hỏi một chút nữa đc ko ạ?
anh có recommend cho em là dùng valgrind, thì đây là kết quả em debug đc ạ. Em thấy thì 305000bytes xấp xỉ 300 kb cũng ko nhiều lắm, mà sao app của em crash liên tục anh nhỉ? thậm chỉ vừa đưa input vào đã bị crash luôn, chưa kịp xử lý

 
bởi (🏅150)
Vậy chỉ có cách là đặt log để dò và khoanh vùng xem nó lỗi ở đâu thôi em. Hoặc e thử dùng Android Studio attach vào process của app và đặt breakpoint debug từng line xem. Chứ bây giờ cũng ko ai có thể trả lời đc app của em bị lỗi ở đâu.
+1 👍
bởi
Android Studio nó có tool Profiler. Bạn thử dùng check xem memory 350MB đó đang là cái gì.

https://developer.android.com/studio/profile?utm_source=android-studio
+1 👍
bởi
Trong Android có hỗ trợ bug report. Bạn có thể mở Development Option ra để lấy hoặc dùng lệnh adb report để lấy bug report.

Trong đó có file tombstone là backtrace ở thời điểm app bị crash. Có thể khoanh vùng xem app đang crash ở đâu
Coding Guru là nơi dành cho cộng đồng lập trình viên Việt Nam hỗ trợ nhau về tất cả các vấn đề liên quan đến công nghệ.

Chúng ta hãy cùng nhau xây dựng một cộng đồng công nghệ Việt Nam mạnh mẽ, thúc đẩy và giúp đỡ nhau cùng phát triển, thăng tiến trong sự nghiệp.

***
Nơi đam mê hội tụ
***

Một số câu hỏi gần đây có thể tương tự hoặc liên quan ↓

0 👍
2 trả lời 195 lượt xem
hỏi bởi Kevin 19/7/2020
0 👍
0 trả lời 61 lượt xem
0 👍
2 trả lời 327 lượt xem
0 👍
1 trả lời 94 lượt xem
...