Android 自升级到冰淇淋三明治后,SIGSEGV深藏MediaPlayer

Android 自升级到冰淇淋三明治后,SIGSEGV深藏MediaPlayer,android,media-player,android-4.0-ice-cream-sandwich,chromium,Android,Media Player,Android 4.0 Ice Cream Sandwich,Chromium,我开发了一个音乐应用程序,在安卓pre冰激凌三明治上运行良好。但自从我升级到4.0.3之后,我开始在MediaPlayer上遇到以前从未遇到过的随机问题。例如,当实例处于播放完成状态时,调用mediaPlayer.reset得到的结果如下: 07-10 15:27:51.842: D/NuCachedSource2(13537): [setBreak]mForceBreak = 2 07-10 15:27:51.842: I/ChromiumHTTPDataSourceSupport(135

我开发了一个音乐应用程序,在安卓pre冰激凌三明治上运行良好。但自从我升级到4.0.3之后,我开始在MediaPlayer上遇到以前从未遇到过的随机问题。例如,当实例处于播放完成状态时,调用mediaPlayer.reset得到的结果如下:

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)  
是否有人对导致此级别分段错误的原因有任何提示

谢谢

编辑:在进一步调查之后,我发现了一些简单的步骤,可以在运行Android 4.0.3的HTC Ruby HTC Amaze 4G上重现分段错误:

使用2个MediaPlayer实例:

使用第一个实例开始播放某些远程音频文件; 当第一个实例仍在播放时,使用第二个实例开始播放另一个远程音频文件; 当第一个实例完成播放后,对其调用reset。这很好。 当第二个实例完成播放时,对其调用reset。出乎意料的是,这会导致Chromium内部出现SIGSEGV,从而导致将媒体服务器死机错误发送到所有实例。
看着那里的logcat

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)  

这些线是指向跟踪源的,它的LBCr是在某个地方出错的,是的,使用的符号的名称看起来很模糊,但是它是在ROM.

的构建时间中链接的被忽略的C++名字。 你可以从下往上读取跟踪。这就是线索,通常是最高点在00/pc。。。。或01/pc。。。。如上所示,这是故障的关键


可能值得与您的制造商联系,看看是否有可用的更新,或者查看他们的HTC论坛,看看是否已解决此问题?

查看那里的日志

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)  

这些线是指向跟踪源的,它的LBCr是在某个地方出错的,是的,使用的符号的名称看起来很模糊,但是它是在ROM.

的构建时间中链接的被忽略的C++名字。 你可以从下往上读取跟踪。这就是线索,通常是最高点在00/pc。。。。或01/pc。。。。如上所示,这是故障的关键


可能值得与您的制造商联系,看看是否有可用的更新,或者查看他们的HTC论坛,看看是否解决了这个问题?

我的问题不够清楚。我是该应用程序的开发者,但问题是我无法调试Chromium:我被困在MediaPlayer级别,到目前为止,它在所有设备和所有操作系统上都工作得很好,但在运行在冰淇淋三明治上的HTC Ruby上就没那么好了。我做了更多的测试,这个问题似乎只有在应用程序使用两个MediaPlayer实例来交叉淡入淡出的音乐时才会出现。当过时的实例被重置,而另一个实例在播放时出现分段错误,尽管它有时可以工作。是的,你的问题不是很清楚!您不能调试chromium,正如我在回答中所说的,它是在ICS ROM构建时去掉调试后构建的……可执行文件可能会被剥离,但您可以使用AOSP中的近似源代码和不可剥离的动态链接符号作为指导。使用AOSP master中最新的objdump会更容易,它现在可以解码arm上的plt条目。但除非该设备扎根,否则将很难进行任何修复。同时,由于这似乎只发生在运行Android 4.0.3的HTC Amaze 4G上,我在这里提交了一份错误报告:我希望这是正确的地方。我认为MediaPlayer的多个实例仍然可以用于播放声音,否则,这将是Android先前版本的重大降级。但是,由于每个MediaPlayer实例都会消耗宝贵的系统资源,因此我们必须尽可能减少实例的数量。使用两个实例似乎是合理的,即使它们竞争硬件。当崩溃发生时,只有一个实例在使用中,另一个实例在完成播放后被重置或释放。我的问题不够清楚。我是该应用程序的开发者,但问题是我无法调试Chromium:我被困在MediaPlayer级别,到目前为止,它在所有设备和所有操作系统上都工作得很好,但在运行在冰淇淋三明治上的HTC Ruby上就没那么好了。我做了更多的测试,这个问题似乎只有在应用程序使用两个MediaPlayer实例来交叉淡入淡出的音乐时才会出现。当过时的实例被重置,而另一个实例在播放时出现分段错误,尽管它有时可以工作。是的,你的问题不是很清楚!您不能调试chromium,正如我在回答中所说的,它是在ICS ROM构建时去掉调试后构建的……可执行文件可能会被剥离,但您可以使用AOSP中的近似源代码和不可剥离的动态链接符号作为指导。使用AOSP master中最新的objdump会更容易,它现在可以解码arm上的plt条目。但是,除非这个设备已经扎根,否则很难进行任何修复。同时,因为它似乎只发生在HT上
运行安卓4.0.3的C Amaze 4G,我在这里提交了一份错误报告:我希望它是正确的地方。我认为不止一个MediaPlayer实例仍然可以用来播放声音,否则它将是安卓早期版本的一个重大降级。但是,由于每个MediaPlayer实例都会消耗宝贵的系统资源,因此我们必须尽可能减少实例的数量。使用两个实例似乎是合理的,即使它们竞争硬件。当崩溃发生时,只有一个实例在使用中,另一个实例在完成播放后已重置或释放。