2012-07-10 2 views
2

J'ai développé une application musicale qui fonctionnait bien sur Android pré-Ice Cream Sandwich. Mais depuis que je suis passé à la version 4.0.3, j'ai commencé à avoir des problèmes aléatoires avec le MediaPlayer que je n'avais jamais eu auparavant. Par exemple, voici ce que je viens de recevoir en appelant mediaPlayer.reset alors que l'instance était en état terminé la lecture:SIGSEGV profondément dans MediaPlayer depuis la mise à niveau de Ice Cream Sandwich

07-10 15:27:51.842: D/NuCachedSource2(13537): [setBreak]mForceBreak = 2 
07-10 15:27:51.842: I/ChromiumHTTPDataSourceSupport(13537): initiateDisconnect start 
07-10 15:27:51.852: A/libc(13537): Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1) 
07-10 15:27:52.362: I/DEBUG(13536): debuggerd: 2012-07-10 15:27:52 
07-10 15:27:52.362: I/DEBUG(13536): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
07-10 15:27:52.362: I/DEBUG(13536): Build fingerprint: 'tmous/htc_ruby/ruby:4.0.3/IML74K/373265.3:user/release-keys' 
07-10 15:27:52.362: I/DEBUG(13536): pid: 13537, tid: 13537 >>> /system/bin/mediaserver <<< 
07-10 15:27:52.362: I/DEBUG(13536): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000010 
[...] 
07-10 15:27:52.402: I/DEBUG(13536): scr 60000010 
07-10 15:27:52.542: I/DEBUG(13536):   #00 pc 00000010  
07-10 15:27:52.542: I/DEBUG(13536):   #01 pc 0010f70e /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8AddEntryENS_6NetLog9EventTypeENS1_10EventPhaseERK13scoped_refptrINS1_15EventParametersEE) 
07-10 15:27:52.542: I/DEBUG(13536):   #02 pc 0010f71a /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8EndEventENS_6NetLog9EventTypeERK13scoped_refptrINS1_15EventParametersEE) 
07-10 15:27:52.542: I/DEBUG(13536):   #03 pc 001a4458 /system/lib/libchromium_net.so (_ZN3net10URLRequest11set_contextEPNS_17URLRequestContextE) 
07-10 15:27:52.552: I/DEBUG(13536):   #04 pc 0012467e /system/lib/libstagefright.so (_ZN7android10SfDelegate18initiateDisconnectEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #05 pc 00121ca6 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12disconnect_lEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #06 pc 00121d04 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource10disconnectEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #07 pc 00121776 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12breakNetworkEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #08 pc 00083b38 /system/lib/libstagefright.so (_ZN7android13AwesomePlayer12breakNetworkENS_18FORCE_BREAK_STATUSE) 
07-10 15:27:52.552: I/DEBUG(13536):   #09 pc 00086c9e /system/lib/libstagefright.so (_ZN7android13AwesomePlayer5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #10 pc 00027e5e /system/lib/libmediaplayerservice.so (_ZN7android17StagefrightPlayer5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #11 pc 0002304a /system/lib/libmediaplayerservice.so (_ZN7android18MediaPlayerService6Client5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #12 pc 00041734 /system/lib/libmedia.so (_ZN7android13BnMediaPlayer10onTransactEjRKNS_6ParcelEPS1_j) 

Et peu de temps après:

07-10 15:27:55.645: W/AudioSystem(236): AudioFlinger server died! 
07-10 15:27:55.645: W/AudioSystem(236): AudioPolicyService server died! 
07-10 15:27:55.645: W/AudioSystem(13123): AudioFlinger server died! 
07-10 15:27:55.645: W/IMediaDeathNotifier(13123): media server died 
07-10 15:27:55.645: E/MediaPlayer(13123): error (100, 0) 
07-10 15:27:55.645: E/MediaPlayer(13123): error (100, 0) 
07-10 15:27:55.645: I/ServiceManager(116): service 'media.audio_flinger' died 
07-10 15:27:55.645: I/ServiceManager(116): service 'media.player' died 
07-10 15:27:55.645: I/ServiceManager(116): service 'media.camera' died 
07-10 15:27:55.645: I/ServiceManager(116): service 'media.audio_policy' died 
07-10 15:27:55.645: I/DEBUG(13536): debuggerd committing suicide to free the zombie! 
07-10 15:27:55.665: I/DEBUG(13617): debuggerd: May 2 2012 21:31:04 

Est-ce que quelqu'un a un indice sur Qu'est-ce qui peut causer une erreur de segmentation à ce niveau?

Merci.

EDIT: Après investiguating De plus, j'ai découvert quelques étapes simples pour reproduire le défaut de segmentation sur Ruby HTC (HTC Amaze 4G) fonctionnant sous Android 4.0.3:

Utilisation 2 instances MediaPlayer:

  1. Commencer la lecture de certains fichiers audio distants en utilisant la première instance;
  2. Pendant la lecture de la première instance, démarrez la lecture d'un autre fichier audio distant en utilisant la deuxième instance;
  3. Lorsque la première instance a terminé la lecture, appelez la réinitialisation. C'est bon.
  4. Lorsque la deuxième instance a terminé la lecture, appelez reset() sur celle-ci. De façon inattendue, cela provoque un SIGSEGV dans Chromium, ce qui provoque une erreur Media Server Died à être distribué à toutes les instances.

Répondre

0

En regardant le logcat là,

07-10 15:27:52.542: I/DEBUG(13536):   #00 pc 00000010  
07-10 15:27:52.542: I/DEBUG(13536):   #01 pc 0010f70e /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8AddEntryENS_6NetLog9EventTypeENS1_10EventPhaseERK13scoped_refptrINS1_15EventParametersEE) 
07-10 15:27:52.542: I/DEBUG(13536):   #02 pc 0010f71a /system/lib/libchromium_net.so (_ZNK3net11BoundNetLog8EndEventENS_6NetLog9EventTypeERK13scoped_refptrINS1_15EventParametersEE) 
07-10 15:27:52.542: I/DEBUG(13536):   #03 pc 001a4458 /system/lib/libchromium_net.so (_ZN3net10URLRequest11set_contextEPNS_17URLRequestContextE) 
07-10 15:27:52.552: I/DEBUG(13536):   #04 pc 0012467e /system/lib/libstagefright.so (_ZN7android10SfDelegate18initiateDisconnectEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #05 pc 00121ca6 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12disconnect_lEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #06 pc 00121d04 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource10disconnectEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #07 pc 00121776 /system/lib/libstagefright.so (_ZN7android22ChromiumHTTPDataSource12breakNetworkEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #08 pc 00083b38 /system/lib/libstagefright.so (_ZN7android13AwesomePlayer12breakNetworkENS_18FORCE_BREAK_STATUSE) 
07-10 15:27:52.552: I/DEBUG(13536):   #09 pc 00086c9e /system/lib/libstagefright.so (_ZN7android13AwesomePlayer5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #10 pc 00027e5e /system/lib/libmediaplayerservice.so (_ZN7android17StagefrightPlayer5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #11 pc 0002304a /system/lib/libmediaplayerservice.so (_ZN7android18MediaPlayerService6Client5resetEv) 
07-10 15:27:52.552: I/DEBUG(13536):   #12 pc 00041734 /system/lib/libmedia.so (_ZN7android13BnMediaPlayer10onTransactEjRKNS_6ParcelEPS1_j) 

Ces lignes sont broches pointant vers la source de la trace, son libchromium qui Faulting quelque part, et oui, les noms des symboles utilisés semble obscur, mais il s'agit de noms C++ mutilés qui ont été liés au moment de la construction de la ROM.

Vous avez lu la trace de bas en haut. Et c'est l'indice, généralement le plus élevé à #00/pc.... ou #01/pc.... comme illustré ci-dessus, est le point d'échec.

Peut-être digne de vérifier auprès de votre fabricant pour voir si une mise à jour est disponible ou consultez leur forum HTC pour savoir si cela a été résolu?

+1

Ma question n'était pas assez claire. Je suis le développeur de l'application, mais la chose est que je ne peux pas déboguer Chromium: je suis coincé au niveau MediaPlayer, qui a fonctionné très bien jusqu'ici tous les appareils et tous les OS, mais pas tellement sur un HTC Ruby fonctionnant sur Ice Cream Sandwich. J'ai fait plus de tests et le problème semble apparaître uniquement lorsque l'application utilise deux instances de MediaPlayer afin de fondre les mélodies. L'erreur de segmentation se produit lorsque l'instance obsolète est réinitialisée pendant la lecture de l'autre instance (même si cela fonctionne parfois). – Simon

+0

Oui, votre question n'était pas tout à fait claire! Et vous ne pouvez pas déboguer le chrome comme je l'ai dit dans la réponse, son construit avec le débogage retiré lors de la construction de la ROM ICS .... – t0mm13b

+0

L'exécutable peut être dépouillé, mais vous avez le code source approximatif dans AOSP et symboles de liens dynamiques non-pelables comme guide. Ce serait plus facile avec le dernier objdump hors du maître AOSP qui décode maintenant les entrées de plt sur le bras. Mais à moins que l'appareil ne soit rooté, il sera difficile de faire des corrections. –

Questions connexes