我遇到了一个问题,我在开发人员控制台中的堆栈跟踪与代码不匹配。行号明显关闭,并且必须在跟踪中的方法将不存在于控制台的跟踪中。例如(简化的控制台跟踪):
at getBitmapSize
at getBitmapBytes
at onActivityResult
但是在代码中它必须采用这条路径:
onActivitResult -> handleSaveImage -> getBitmapBytes -> getBitmapSize
这段代码多年来没有改变,所以这不是使用错误的 mapping.txt 的问题。以某种方式应用混淆器会删除应用程序中的结构。那可能吗?不会映射回去吗?
在打开 proguard 之前,我从未在堆栈跟踪中看到丢失的方法。
关于让行号匹配,还有什么我应该知道的吗?
我已经设置:
-keepattributes SourceFile,LineNumberTable
这几乎可以工作。他们只是从来没有正确排队。
我设置了一个测试,在可预测的内联位置抛出 NPE。
(优化) logcat 错误具有正确的行号,并且清楚地内联了仅为清晰起见而分开的方法。使用正确的行号,一切都会更加明显。
(未优化) 得到了相同的堆栈跟踪,除了跟踪中的附加方法。行号再次正确。
我不明白为什么开发者控制台跟踪的行号是错误的,但这就是它很难理解的原因。它们不仅在一个文件中关闭,而且在所有文件中都关闭,所以这只是一团困惑,尤其是在你有多个异常处理的地方,比如 i/o。
我将未优化的应用程序提交到 Play 商店,堆栈跟踪现在排成一行。当您依赖 Play 堆栈跟踪时,我建议不要在复杂的应用程序中使用优化。
最佳答案
启用 Proguard 优化后,它可能会内联小方法。这可以解释为什么您的堆栈跟踪中似乎缺少步骤。尝试在 Proguard 配置中禁用优化。参见 Android Proguard does not inline有关如何为 Android 配置优化的指导。
如果您使用的是 Gradle 构建系统,您的 build.gradle 中会有一行包含如下内容:
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
要尝试禁用优化,请将其更改为
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
关于Android proguard 不完整的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993984/
我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清
我有Sinatra应用程序,需要测试我的应用程序。features/support/env.rb:require_relative"../../application"require"capybara"require"capybara/cucumber"require"rspec"WorlddoCapybara.app=ApplicationincludeCapybara::DSLincludeRSpec::Matchersendfeatures/one.feature:Feature:TesthomepageInordertomakesurepeoplecanopenmysiteIw
刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom
我只是好奇,是否可以将程序的所有变量和当前状态转储到一个文件中,然后在另一台计算机上恢复它?!假设我有一个用Python或Ruby编写的小程序,给定特定条件,它会将所有当前变量和当前状态转储到一个文件中。稍后,我可以在另一台机器上再次加载它,然后返回它。类似VM快照功能。我在这里看到过这样的问题,但与Java相关,保存当前的JVM并在不同的JVM中再次运行它。大多数人都说没有那样的东西,只有Terracotta有一些东西,仍然不完美。谢谢。阐明我要实现的目标:给定2个或更多RaspberryPi,我试图在Pinº1上运行我的软件,但是当我需要用它做一些不同的事情时,我需要将软件移动到P
我正在使用gmailgem发送电子邮件,我需要跟踪这些电子邮件。我该怎么做?我正在尝试搜索带有message_id的电子邮件,但它会从我的收件箱中提取所有电子邮件,而我只想要特定电子邮件的回复。这是我的实际代码:*使用message_id保存电子邮件*mail=gmail.deliver(email)Email.create(:message_id=>mail.message_id,:from=>user.email,:to=>annotation.to,:body=>annotation.content,:title=>annotation.title,:annotation=>an
我正在使用paper_trail进行审计跟踪。除了创建、更新和删除事件外,我还想跟踪一些自定义事件,例如查看(记录)、发送(电子邮件)等。我们如何在审核模型时引入此类自定义事件? 最佳答案 我发现了一个调整,可以在paper_trail管理的Version中添加自定义事件:Version.create(item_type:"Campaign",item_id:campaign.id,event:"Sent")也许这不是正确的解决方案,但它帮助我实现了目标。我想更多地探索paper_trail以找到更好的解决方案。
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion有没有一种运行脚本并查看所有步骤的好方法:执行了哪些代码代码在哪个文件中返回什么错误信息这将是了解开源项目如何运作的好方法。Ruby没有这样的解决方案吗?例如。require"httparty"HTTParty.get"http://www.google.se"然后它会运行代码并向我展示它正在执行的所有代码,其中的文件和行、返回的对象、错误消息等。
classMyClassdefmethod_missing(name,*args)name=name.to_s10.timesdonumber=rand(100)endputs"#{number}and#{name}"endend你好,我正在练习ruby,但在这个非递归函数中,我在使用这段代码时遇到堆栈级别太深的错误。x=MyClass.Newx.try 最佳答案 您的代码的问题是times()中定义的number变量超出了method_missing()范围。因此,当该行被执行时,Ruby将其解释为对self的方法调用。在正常
根据Memprofgem文档,为了让Memprof::Middleware与rails一起工作,我们需要将每个请求包装在Memprof.track中。问题是:如何让memprof跟踪所有之前的过滤器,然后在转储输出之前执行操作? 最佳答案 在不了解Memprof的情况下,也不了解您要完成的目标,这是我的最佳猜测。在你的application_controller.rb中:before_filter:do_memprof_stuffdefdo_memprof_stuff#makeitreallysweetend这将在调用其他Contr
我正在使用therubyracer和v8在Rails3应用程序中运行一些javascript如果出现任何问题,错误消息将通过通常的Rails3异常通知流程通过电子邮件发送给我。但是,我返回的错误消息非常模糊,堆栈跟踪不会进入javascript文件本身。这是可以理解的,但是很难调试。这是一个例子:V8::JSError:Cannotreadproperty'0'ofundefinedbacktrace:lib/libraryname.rb:32:in`function_that_calls_v8'lib/libraryname.rb:18:in`fetch_and_update'app