2012-04-02 32 views
6

Tôi đang tạo trò chơi 2D trên Android bằng OpenGL. Hiện tại tôi đang thử nghiệm và gỡ lỗi trò chơi trên một số thiết bị. Vấn đề tôi đang đối mặt, là lỗi "tín hiệu 11" khủng khiếp.tín hiệu 11 (SIGSEGV), mã 1 (SEGV_MAPERR)

Khi tôi đang chơi trên Samsung Galaxy Nexus, mọi thứ đều chạy mượt mà và tôi có thể chơi nó hàng giờ mà không có bất kỳ trò chơi nào phát hiện lỗi. Nexus của tôi đang chạy Android ICS.

Bây giờ, khi tôi chạy nó trên các thiết bị khác, tôi nhận được tín hiệu 11 lỗi này. này là các thiết bị mà ném lỗi: - HTC Desire HD (Gingerbread) - HTC Desire Z (Gingerbread) - HTC Wildfire (Gingerbread) - Advent Vega tablet (Vegacomb) - Asus EE Pad Transformer (Icecream Sandwich)

Tôi không thể sử dụng USB gỡ lỗi trên Advent Vega của mình, nhưng 3 thiết bị khác bật ra lỗi là có thể gỡ lỗi. Có vẻ như tôi cần phải root thiết bị của mình để có thêm thông tin về lỗi tín hiệu 11. Tôi đã có thể root Galaxy Nexus và Desire HD của mình.

Khi lỗi luôn xuất hiện cùng lúc (khi trò chơi vừa tải xong kết cấu), tôi cho rằng tôi có thể làm chỉ với một thiết bị gốc để tìm hiểu nguyên nhân của vấn đề là gì, sau đó sửa và thử nghiệm phiên bản mới trên thiết bị khác.

Đầu tiên tôi nghĩ rằng nó có liên quan đến quản lý bộ nhớ (không giải phóng các đối tượng của tôi, do đó thực hiện rất nhiều yêu cầu GC). Vì vậy, sau một vài giờ lược tả, tối ưu hóa, kiểm tra, vv, tôi thấy rằng đây không phải là vấn đề. Sau đó, tôi giả định nó có một cái gì đó để làm với Thread Safety (một chủ đề cố gắng để có được một cái gì đó từ bộ nhớ, nơi mà một sợi chỉ vừa phá hủy các tài liệu tham khảo). Nhưng điều này dường như không đúng.

Ok, vì vậy bây giờ tôi đã bắt nguồn từ Desire HD có dây với máy tính xách tay của mình và tôi đã mở dự án Eclipse và DDMS đang chạy.

Bây giờ, logcat cho tôi biết điều gì khi trò chơi/ứng dụng gặp sự cố?

04-02 13:24:50.561: D/dalvikvm(3526): GC_CONCURRENT freed 739K, 43% free 4225K/7303K, external 1478K/1939K, paused 2ms+4ms 
04-02 13:24:50.661: D/dalvikvm(3526): GC_FOR_MALLOC freed 99K, 43% free 4261K/7431K, external 1466K/1939K, paused 29ms 
04-02 13:24:50.701: I/DEBUG(3412): debuggerd: 2012-04-02 13:24:50 
04-02 13:24:50.701: I/DEBUG(3412): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
04-02 13:24:50.701: I/DEBUG(3412): Build fingerprint: 'vodafone_uk/htc_ace/ace:2.3.5/GRJ90/208029.3:user/release-keys' 
04-02 13:24:50.701: I/DEBUG(3412): pid: 3526, tid: 3539 >>> com.more2create.cityisland <<< 
04-02 13:24:50.701: I/DEBUG(3412): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0088d410 
04-02 13:24:50.701: I/DEBUG(3412): r0 4b89de00 r1 0088d410 r2 00000000 r3 00000000 
04-02 13:24:50.701: I/DEBUG(3412): r4 00000000 r5 00000000 r6 00000020 r7 00000001 
04-02 13:24:50.701: I/DEBUG(3412): r8 45a98b68 r9 458dbde0 10 0034f598 fp 440b0000 
04-02 13:24:50.701: I/DEBUG(3412): ip 806091c8 sp 45a989d0 lr 80602a0c pc afd0d200 cpsr 60000010 
04-02 13:24:50.701: I/DEBUG(3412): d0 42a0000000000000 d1 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d2 0000000042200000 d3 4220000042a00000 
04-02 13:24:50.701: I/DEBUG(3412): d4 000000003df5c2a0 d5 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d6 0000000000000101 d7 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d8 3f8000003f800000 d9 8000000080000000 
04-02 13:24:50.701: I/DEBUG(3412): d10 8000000080000000 d11 3ff0000080000000 
04-02 13:24:50.701: I/DEBUG(3412): d12 3f8000003f800000 d13 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d14 0000000000000000 d15 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d16 000172c000000000 d17 7e37e43c8800759c 
04-02 13:24:50.701: I/DEBUG(3412): d18 3fff8def8808b024 d19 465aa3f469f40e1c 
04-02 13:24:50.701: I/DEBUG(3412): d20 4008000000000000 d21 3fd99a27ad32ddf5 
04-02 13:24:50.701: I/DEBUG(3412): d22 3fd24998d6307188 d23 3fcc7288e957b53b 
04-02 13:24:50.701: I/DEBUG(3412): d24 3fc74721cad6b0ed d25 3fc39a09d078c69f 
04-02 13:24:50.701: I/DEBUG(3412): d26 0000000000000000 d27 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d28 0000000000000000 d29 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): d30 0000000000000000 d31 0000000000000000 
04-02 13:24:50.701: I/DEBUG(3412): scr 60000012 
04-02 13:24:50.741: I/DEBUG(3412):   #00 pc 0000d200 /system/lib/libc.so 
04-02 13:24:50.741: I/DEBUG(3412):   #01 pc 00002a08 /system/lib/libgsl.so 
04-02 13:24:50.741: I/DEBUG(3412):   #02 pc 00089e24 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #03 pc 00091f14 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #04 pc 0006087a /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #05 pc 00060942 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #06 pc/system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #07 pc 000835e0 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #08 pc 00014504 /system/lib/egl/libGLESv1_CM_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #09 pc 0001d3c0 /system/lib/egl/libGLESv1_CM_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):   #10 pc 0002be40 /system/lib/libandroid_runtime.so 
04-02 13:24:50.741: I/DEBUG(3412):   #11 pc 00018174 /system/lib/libdvm.so 
04-02 13:24:50.741: I/DEBUG(3412): code around pc: 
04-02 13:24:50.741: I/DEBUG(3412): afd0d1e0 f5d1f100 e2522040 f400022d f400422d 
04-02 13:24:50.741: I/DEBUG(3412): afd0d1f0 2afffff8 e2822040 e2522020 3a000003 
04-02 13:24:50.741: I/DEBUG(3412): afd0d200 f421020d e2522020 f400022d 2afffffb 
04-02 13:24:50.741: I/DEBUG(3412): afd0d210 e2822020 e3120010 0a000001 f4210a0d 
04-02 13:24:50.741: I/DEBUG(3412): afd0d220 f4000a2d e1b0ce82 3a000001 f421070d 
04-02 13:24:50.741: I/DEBUG(3412): code around lr: 
04-02 13:24:50.741: I/DEBUG(3412): 806029ec e5901008 e0836005 e1560001 8a000006 
04-02 13:24:50.741: I/DEBUG(3412): 806029fc e5903000 e1a0100c e0830005 eb00099c 
04-02 13:24:50.741: I/DEBUG(3412): 80602a0c e1a00004 e28dd008 e8bd8070 e59f004c 
04-02 13:24:50.741: I/DEBUG(3412): 80602a1c e1a02005 e59fc048 e58d1000 e79e0000 
04-02 13:24:50.741: I/DEBUG(3412): 80602a2c e08e100c e28000a8 ebfffef8 e3e00000 
04-02 13:24:50.741: I/DEBUG(3412): stack: 
04-02 13:24:50.741: I/DEBUG(3412):  45a98990 0000000a 
04-02 13:24:50.741: I/DEBUG(3412):  45a98994 00000080 
04-02 13:24:50.741: I/DEBUG(3412):  45a98998 00494e80 
04-02 13:24:50.741: I/DEBUG(3412):  45a9899c 80886cd9 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):  45a989a0 00494e80 
04-02 13:24:50.741: I/DEBUG(3412):  45a989a4 00000008 
04-02 13:24:50.741: I/DEBUG(3412):  45a989a8 46b2a078 
04-02 13:24:50.741: I/DEBUG(3412):  45a989ac 80898f25 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.741: I/DEBUG(3412):  45a989b0 00368360 
04-02 13:24:50.741: I/DEBUG(3412):  45a989b4 00000008 
04-02 13:24:50.741: I/DEBUG(3412):  45a989b8 00000080 
04-02 13:24:50.741: I/DEBUG(3412):  45a989bc 80899041 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:50.751: I/DEBUG(3412):  45a989c0 00000008 
04-02 13:24:50.751: I/DEBUG(3412):  45a989c4 00000000 
04-02 13:24:50.751: I/DEBUG(3412):  45a989c8 df002777 
04-02 13:24:50.751: I/DEBUG(3412):  45a989cc e3a070ad 
04-02 13:24:50.751: I/DEBUG(3412): #00 45a989d0 4b89de00 
04-02 13:24:50.751: I/DEBUG(3412):  45a989d4 80602a0c /system/lib/libgsl.so 
04-02 13:24:50.751: I/DEBUG(3412): #01 45a989d8 00368360 
04-02 13:24:50.751: I/DEBUG(3412):  45a989dc 00000020 
04-02 13:24:50.751: I/DEBUG(3412):  45a989e0 004aa8e0 
04-02 13:24:50.751: I/DEBUG(3412):  45a989e4 00371648 
04-02 13:24:50.751: I/DEBUG(3412):  45a989e8 004aa8fc 
04-02 13:24:50.751: I/DEBUG(3412):  45a989ec 80889e27 /system/lib/egl/libGLESv2_adreno200.so 
04-02 13:24:51.132: I/BootReceiver(1361): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE) 
04-02 13:24:51.142: I/DEBUG(3412): debuggerd committing suicide to free the zombie! 
04-02 13:24:51.182: I/DEBUG(3544): debuggerd: Nov 22 2011 21:11:52 
04-02 13:24:51.222: D/dalvikvm(1361): GC_FOR_MALLOC freed 551K, 36% free 8894K/13703K, external 1258K/1770K, paused 78ms 
04-02 13:24:51.222: V/DeviceStorageMonitorService(1361): freeMemory=1053483008 
04-02 13:24:51.232: D/DeviceStorageMonitorService(1361): OoO SMS Memory available. SMS_AVAILABLE_THRESHOLD == 524288 
04-02 13:24:51.232: I/DeviceStorageMonitorService(1361): Posting Message again 
04-02 13:24:51.292: I/ActivityManager(1361): Process com.more2create.cityisland (pid 3526) has died. 

Tất nhiên tôi googled này, và đã tìm kiếm trên Internet cho khả năng sửa lỗi, nhưng không thực sự hữu ích có .. Mọi người đang nói về nhìn vào SO nộp (trong trường hợp này libc.so) và tìm dòng nơi ứng dụng gặp sự cố.

Bây giờ, vấn đề là tôi đang chạy Windows và không biết cách tìm hiểu sâu hơn về vấn đề này. Tôi chỉ bị kẹt ở đây ...

Vì vậy, câu hỏi của tôi thực sự khá đơn giản: bất kỳ ai có thể hỗ trợ tôi ở đây không? Có cách nào để đào sâu vào điều này không? Tôi có thể tìm hiểu "# 00 pc 0000d200 /system/lib/libc.so" có nghĩa là gì không?

+0

Bạn đã giải quyết được sự cố chưa ??? – vgonisanz

+0

Thử xây dựng với gỡ lỗi được bật; điều này thường cho phép trình gỡ lỗi ánh xạ các địa chỉ bộ nhớ thô đến các ký hiệu và có thể trỏ đến nơi bạn có thể cần thực hiện các thay đổi trong mã của mình. Xem http://stackoverflow.com/a/10539883/783051 –

Trả lời

6

Khi Zygote ném tín hiệu 11, điều đó có nghĩa là một số quy trình truy cập vào vùng bộ nhớ bị cấm. Tôi đề nghị sử dụng android_print để kiểm tra khu vực nơi truy cập programm và thất bại, bằng cách sử dụng DDMS.

Nếu bạn đang sử dụng opengl, hãy nhớ opengl làm việc trên một chủ đề độc lập, do đó, inicializate tất cả các biến được sử dụng bởi opengl trên các nhà thầu để tránh loại vấn đề. Hãy thử kiểm tra lại một bài kiểm tra, sau đó sử dụng mã trò chơi của bạn.

+0

Ý bạn là gì bởi "android_print"? Bạn có nghĩa là tôi nên sử dụng Log.d (hoặc Log.v, bất cứ điều gì) để in các công cụ và tìm hiểu những gì được in lần cuối? Nó chỉ treo trên mã trò chơi của tôi, và nó không ném lỗi mỗi khi tôi khởi động ứng dụng. –

+0

Có, tôi muốn nói Log.d. Vấn đề là, nếu bạn đang sử dụng OpenGL, nó làm việc trong một chủ đề khác (độc lập) vì vậy, một số thời gian có thể hoạt động, nếu chuỗi trò chơi hoàn thành công việc trước khi chủ đề opengl cố gắng render ví dụ. Các vấn đề sở hữu là rất nhiều trong số họ. – vgonisanz

1

Nếu u thấy SIGSEGV 11, mã 1 với ngăn xếp cuộc gọi như libgles, điều đầu tiên bạn nên làm là kiểm tra OpenGL/EGL khởi tạo. Các GPU khác nhau trên Android có thể hoặc có thể không hỗ trợ một số tính năng u trong quá trình khởi tạo OpenGL. Nếu họ không, bạn phải kiểm tra nó, tìm thấy một chức năng thất bại, và khi nó không thêm một mã sẽ thử lại với các tham số cấu hình làm việc.

0

Tôi gặp sự cố tương tự và tôi đã giải quyết chỉ cần nhấp vào "Xây dựng -> Làm mới thư viện C++ được liên kết".

Có thể có ích cho người khác.

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