草庐IT

Android 奇怪的 lib.c 崩溃

coder 2023-11-22 原文

我正在编写一个 Android 应用程序。 我完全不知道为什么它经常发生。 有人可以告诉我可能导致它发生的原因吗? 谢谢!

09-29 13:58:00.540: INFO/DEBUG(4658): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
09-29 13:58:00.540: INFO/DEBUG(4658): Build fingerprint: 'MOTO/wifi_hubble/wifi_hubble:3.1/H.6.4-20/1310119769:user/ota-rel-keys,release-keys'
09-29 13:58:00.540: INFO/DEBUG(4658): pid: 23390, tid: 23390  >>> com.aaa.bbb <<<
09-29 13:58:00.540: INFO/DEBUG(4658): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
09-29 13:58:00.540: INFO/DEBUG(4658):  r0 deadbaad  r1 00000001  r2 a0000000  r3 00000000
09-29 13:58:00.540: INFO/DEBUG(4658):  r4 00000000  r5 00000027  r6 00000028  r7 00000005
09-29 13:58:00.540: INFO/DEBUG(4658):  r8 00000002  r9 001aa540  10 00000005  fp 0000005e
09-29 13:58:00.540: INFO/DEBUG(4658):  ip ffffffff  sp bed42ee8  lr afe164ad  pc afe12c1c  cpsr 68000030
09-29 13:58:00.540: INFO/DEBUG(4658):  d0  000000a043208000  d1  0000000043208000
09-29 13:58:00.540: INFO/DEBUG(4658):  d2  0000000000000000  d3  3ff0000000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  d4  0000000000000000  d5  4082780000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  d6  c413c000c30c0000  d7  0000000000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  d8  0000000043fa8000  d9  3f80000000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  d10 4004cccd430e0000  d11 0000000040951f28
09-29 13:58:00.540: INFO/DEBUG(4658):  d12 00000000bfd55580  d13 0000000000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  d14 0000000000000000  d15 0000000000000000
09-29 13:58:00.540: INFO/DEBUG(4658):  scr 8000001b
09-29 13:58:00.640: INFO/DEBUG(4658):          #00  pc 00015c1c  /system/lib/libc.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #01  pc 00013efe  /system/lib/libc.so (dlfree)
09-29 13:58:00.640: INFO/DEBUG(4658):          #02  pc 0001445c  /system/lib/libc.so (free)
09-29 13:58:00.640: INFO/DEBUG(4658):          #03  pc 0002239e  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #04  pc 0000483c  /system/lib/libsqlite.so (sqlite3_free)
09-29 13:58:00.640: INFO/DEBUG(4658):          #05  pc 00005b28  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #06  pc 00005b60  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #07  pc 00005d20  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #08  pc 00005e76  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #09  pc 0000a7c2  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #10  pc 0000a7e0  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #11  pc 0001cd96  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #12  pc 0001d8fa  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #13  pc 0001da3c  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #14  pc 0001e31c  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658):          #15  pc 0003b68e  /system/lib/libsqlite.so
09-29 13:58:00.640: INFO/DEBUG(4658): libc base address: afdfd000
09-29 13:58:00.640: INFO/DEBUG(4658): code around pc:
09-29 13:58:00.640: INFO/DEBUG(4658): afe12bfc 4623b15c 2c006824 e026d1fb b12368db 
09-29 13:58:00.640: INFO/DEBUG(4658): afe12c0c 21014a17 6011447a 48124798 24002527 
09-29 13:58:00.640: INFO/DEBUG(4658): afe12c1c f7f57005 2106eb8a ec18f7f6 460aa901 
09-29 13:58:00.640: INFO/DEBUG(4658): afe12c2c f04f2006 94015380 94029303 efe2f7f5 
09-29 13:58:00.640: INFO/DEBUG(4658): afe12c3c 4622a905 f7f52002 f7f5efec 2106eb76 
09-29 13:58:00.640: INFO/DEBUG(4658): code around lr:
09-29 13:58:00.640: INFO/DEBUG(4658): afe1648c 41f0e92d 46804c0c 447c2600 68a56824 
09-29 13:58:00.640: INFO/DEBUG(4658): afe1649c e0076867 300cf9b5 dd022b00 47c04628 
09-29 13:58:00.640: INFO/DEBUG(4658): afe164ac 35544306 37fff117 6824d5f4 d1ee2c00 
09-29 13:58:00.640: INFO/DEBUG(4658): afe164bc e8bd4630 bf0081f0 0002802e 41f0e92d 
09-29 13:58:00.640: INFO/DEBUG(4658): afe164cc fb01b086 9004f602 461f4815 4615460c 
09-29 13:58:00.640: INFO/DEBUG(4658): stack:
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ea8  00af9de0  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42eac  008aa8f8  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42eb0  00000000  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42eb4  00000007  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42eb8  afe3e700  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ebc  afe3e690  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ec0  00000000  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ec4  afe164ad  /system/lib/libc.so
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ec8  00000000  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ecc  bed42efc  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ed0  00000028  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ed4  00000005  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ed8  00000002  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42edc  afe15619  /system/lib/libc.so
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ee0  df002777  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ee4  e3a070ad  
09-29 13:58:00.640: INFO/DEBUG(4658): #00 bed42ee8  00000002  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42eec  00000001  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ef0  00afe158  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ef4  00afe5cc  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42ef8  00afe150  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42efc  fffffbdf  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f00  00000002  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f04  afe434a0  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f08  00000888  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f0c  afe10f03  /system/lib/libc.so
09-29 13:58:00.640: INFO/DEBUG(4658): #01 bed42f10  00afe158  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f14  00afe5cc  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f18  00000002  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f1c  005e6c90  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f20  00000002  
09-29 13:58:00.640: INFO/DEBUG(4658):     bed42f24  afe1145f  /system/lib/libc.so
09-29 13:58:04.160: INFO/DEBUG(4658): debuggerd committing suicide to free the zombie!
09-29 13:58:04.170: INFO/BootReceiver(148): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)
09-29 13:58:04.180: INFO/DEBUG(25207): debuggerd: Jul  8 2011 03:35:12

编辑: 添加另一个日志。

10-04 10:21:31.210: INFO/DEBUG(2375): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-04 10:21:31.210: INFO/DEBUG(2375): Build fingerprint: 'asus/TW_epad/TF101:3.2.1/HTK75/TW_epad-8.6.5.13-20110925:user/release-keys'
10-04 10:21:31.210: INFO/DEBUG(2375): pid: 4044, tid: 4045  >>> com.aaa.bbb <<<
10-04 10:21:31.210: INFO/DEBUG(2375): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
10-04 10:21:31.210: INFO/DEBUG(2375):  r0 deadbaad  r1 00000001  r2 a0000000  r3 00000000
10-04 10:21:31.210: INFO/DEBUG(2375):  r4 00000000  r5 00000027  r6 002f3540  r7 0000b000
10-04 10:21:31.210: INFO/DEBUG(2375):  r8 100ffad0  r9 4002bfa0  10 4002bf8c  fp fffffe90
10-04 10:21:31.210: INFO/DEBUG(2375):  ip ffffffff  sp 100ffa78  lr aff194ad  pc aff15c1c  cpsr 60000030
10-04 10:21:31.210: INFO/DEBUG(2375):  d0  42c8000042a982a6  d1  0000005f01997918
10-04 10:21:31.210: INFO/DEBUG(2375):  d2  4e19740842be9580  d3  42c8000000670ff0
10-04 10:21:31.210: INFO/DEBUG(2375):  d4  000001fd006235c8  d5  3fe999999999999a
10-04 10:21:31.210: INFO/DEBUG(2375):  d6  01e31fe000000000  d7  000000544f1ff34d
10-04 10:21:31.210: INFO/DEBUG(2375):  d8  0000000000000000  d9  0000000000000000
10-04 10:21:31.210: INFO/DEBUG(2375):  d10 0000000000000000  d11 0000000000000000
10-04 10:21:31.210: INFO/DEBUG(2375):  d12 0000000000000000  d13 0000000000000000
10-04 10:21:31.210: INFO/DEBUG(2375):  d14 0000000000000000  d15 0000000000000000
10-04 10:21:31.210: INFO/DEBUG(2375):  scr 80000012
10-04 10:21:31.330: INFO/DEBUG(2375):          #00  pc 00015c1c  /system/lib/libc.so
10-04 10:21:31.330: INFO/DEBUG(2375):          #01  pc 00013efe  /system/lib/libc.so (dlfree)
10-04 10:21:31.330: INFO/DEBUG(2375):          #02  pc 0001445c  /system/lib/libc.so (free)
10-04 10:21:31.330: INFO/DEBUG(2375):          #03  pc 000009bc  /system/lib/libstdc++.so (_ZdaPvRKSt9nothrow_t)
10-04 10:21:31.330: INFO/DEBUG(2375):          #04  pc 0005cccc  /system/lib/libandroid_runtime.so
10-04 10:21:31.330: INFO/DEBUG(2375): libc base address: aff00000
10-04 10:21:31.330: INFO/DEBUG(2375): code around pc:
10-04 10:21:31.330: INFO/DEBUG(2375): aff15bfc 4623b15c 2c006824 e026d1fb b12368db 
10-04 10:21:31.330: INFO/DEBUG(2375): aff15c0c 21014a17 6011447a 48124798 24002527 
10-04 10:21:31.330: INFO/DEBUG(2375): aff15c1c f7f57005 2106eb8a ec18f7f6 460aa901 
10-04 10:21:31.330: INFO/DEBUG(2375): aff15c2c f04f2006 94015380 94029303 efe2f7f5 
10-04 10:21:31.330: INFO/DEBUG(2375): aff15c3c 4622a905 f7f52002 f7f5efec 2106eb76 
10-04 10:21:31.330: INFO/DEBUG(2375): code around lr:
10-04 10:21:31.330: INFO/DEBUG(2375): aff1948c 41f0e92d 46804c0c 447c2600 68a56824 
10-04 10:21:31.330: INFO/DEBUG(2375): aff1949c e0076867 300cf9b5 dd022b00 47c04628 
10-04 10:21:31.330: INFO/DEBUG(2375): aff194ac 35544306 37fff117 6824d5f4 d1ee2c00 
10-04 10:21:31.330: INFO/DEBUG(2375): aff194bc e8bd4630 bf0081f0 0002802e 41f0e92d 
10-04 10:21:31.330: INFO/DEBUG(2375): aff194cc fb01b086 9004f602 461f4815 4615460c 
10-04 10:21:31.330: INFO/DEBUG(2375): stack:
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa38  0023aa60  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa3c  0000b000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa40  100ffad0  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa44  4002bf80  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa48  aff41700  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa4c  aff41690  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa50  00000000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa54  aff194ad  /system/lib/libc.so
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa58  00000000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa5c  100ffa8c  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa60  002f3540  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa64  0000b000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa68  100ffad0  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa6c  aff18619  /system/lib/libc.so
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa70  df002777  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa74  e3a070ad  
10-04 10:21:31.330: INFO/DEBUG(2375): #00 100ffa78  8bfffbfc  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa7c  00000001  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa80  002f3578  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa84  00000000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa88  002f3578  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa8c  fffffbdf  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa90  100ffad0  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa94  00000006  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa98  00000080  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffa9c  aff13f03  /system/lib/libc.so
10-04 10:21:31.330: INFO/DEBUG(2375): #01 100ffaa0  002f3578  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffaa4  00000000  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffaa8  100ffb78  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffaac  4002bfa8  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffab0  100ffad0  
10-04 10:21:31.330: INFO/DEBUG(2375):     100ffab4  aff1445f  /system/lib/libc.so
10-04 10:21:34.920: INFO/BootReceiver(140): Copying /data/tombstones/tombstone_08 to DropBox (SYSTEM_TOMBSTONE)
10-04 10:21:34.930: INFO/DEBUG(2375): debuggerd committing suicide to free the zombie!

最佳答案

系统在尝试取消引用地址“deadbaad”时崩溃。这看起来像是一个调试提示(有人正在初始化指向 deadbaad 的指针以使崩溃更容易识别)。

看起来你不是第一个点击这个的人:http://groups.google.com/group/android-ndk/browse_thread/thread/8d083a0ccebe0faa

看起来“deadbaad”意味着 Dalvik 堆已损坏。所以一些 JNI 代码或 C 库正在弄乱堆。你的应用程序中有任何本地代码吗?责怪它。

更新#1

没有本地代码可以指责....

在崩溃发生之前是否有任何有趣的日志行?通过查看 android 源代码,0xdeadbaad 崩溃用于 implement 'abort()' .并且两个回溯都在 C 的“自由”例程中(在那里对内存范围进行了一些简单的健全性检查)。注意“免费”只是检测内存损坏,不太可能是损坏的来源。

您的应用是否间接进行了大量 native 内存分配?例如,通过 OpenGL 纹理或加载音频?您是否直接执行任何 SQL?

关于发生这种情况时您的应用中发生了什么的问题,您能否添加一些详细信息? (应用程序运行了多长时间?UI 或网络上发生了什么?等)

关于Android 奇怪的 lib.c 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7593308/

有关Android 奇怪的 lib.c 崩溃的更多相关文章

  1. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  2. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  3. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - 浮点乘法的 Ruby 奇怪问题 - 2

    有没有人用ruby​​解决这个问题:假设我们有:a=8.1999999我们想将它四舍五入为2位小数,即8.20,然后乘以1,000,000得到8,200,000我们是这样做的;(a.round(2)*1000000).to_i但是我们得到的是8199999,为什么?奇怪的是,如果我们乘以1000、100000或10000000而不是1000000,我们会得到正确的结果。有人知道为什么吗?我们正在使用ruby​​1.9.2并尝试使用1.9.3。谢谢! 最佳答案 每当你在计算中得到时髦的数字时使用bigdecimalrequire'bi

  6. ruby-on-rails - Rails 2.3.5 : How does one access code inside of lib/directory/file. rb? - 2

    我创建了一个文件,这样我就可以在lib/foo/bar_woo.rb中的许多模型之间共享一个方法。在bar_woo.rb中,我定义了以下内容:moduleBarWoodefhelloputs"hello"endend然后在我的模型中我正在做类似的事情:defMyModel解释器提示它期望bar_woo.rb定义Foo::BarWoo。《使用Rails进行敏捷Web开发》一书指出,如果文件包含类或模块,并且文件使用类或模块名称的小写形式命名,那么Rails将自动加载文件。因此我不需要它。定义代码的正确方法是什么,在我的模型中调用代码的正确方法是什么? 最佳答案

  7. ruby - 奇怪的 ruby​​ for 循环行为(为什么这样做有效) - 2

    defreverse(ary)result=[]forresult[0,0]inaryendresultendassert_equal["baz","bar","foo"],reverse(["foo","bar","baz"])这行得通,我想了解原因。有什么解释吗? 最佳答案 如果我使用each而不是for/in重写它,它看起来像这样:defreverse(ary)result=[]#forresult[0,0]inaryary.eachdo|item|result[0,0]=itemendresultendforainb基本上就

  8. ruby-on-rails -/usr/local/lib/libz.1.dylib,文件是为 i386 构建的,它不是被链接的体系结构 (x86_64) - 2

    在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto

  9. ruby-on-rails - ruby数组奇怪的东西(无限数组) - 2

    当我写下面的代码时:x=[1,2,3]x我得到这个输出:[1,2,3,[...]][1,2,3,[...]][1,2,3,[...]]我不应该只得到[1,2,3,[1,2,3]]吗?解释是什么? 最佳答案 这没什么奇怪的。数组的第四个元素就是数组本身,所以当你求第四个元素时,你得到的是数组,当你求第四个元素的第四个元素时,你得到的是数组,当你求第四个元素时,你得到的是数组。第四个元素的第四个元素的第四个元素的元素......你得到了数组。就这么简单。唯一有点不寻常的是Array#to_s检测到这样的递归,而不是进入无限循环,而是返回

  10. ruby - 比较 rspec 中的 float 时的奇怪行为 - 2

    以下测试中的第3个失败:specify{(0.6*2).shouldeql(1.2)}specify{(0.3*3).shouldeql(0.3*3)}specify{(0.3*3).shouldeql(0.9)}#thisonefails这是为什么呢?这是浮点问题还是ruby​​或rspec问题? 最佳答案 从rspec-2.1开始specify{(0.6*2).shouldbe_within(0.01).of(1.2)}在那之前:specify{(0.6*2).shouldbe_close(1.2,0.01)}

随机推荐