当stacktrace仅在eclipse中显示本机方法时,如何找到导致错误的代码行
Posted
技术标签:
【中文标题】当stacktrace仅在eclipse中显示本机方法时,如何找到导致错误的代码行【英文标题】:How do I find the line of my code causing an error when the stacktrace only shows native methods in eclipse 【发布时间】:2015-08-03 11:59:58 【问题描述】:简短的问题是,在使用 Eclipse 时,如果堆栈跟踪和调试器调用堆栈除了 android 本机方法之外没有显示任何内容,我如何才能找出我的代码的哪一行触发了错误。
我一直在尝试调试程序并遇到了一些问题。为了提供有关该问题的一些背景知识,当我旋转屏幕时,我的 Android 应用程序崩溃并且我得到以下堆栈跟踪:
从这个堆栈跟踪中,我可以看到有一个 Class Cast 异常,其中 LinearLayout 试图被转换为 Textview。我不知道这个异常发生在代码中的什么地方。在堆栈跟踪的底部,当它以“...55 more”切断时,原因正在被解释。所以我开始四处寻找扩展日志猫的方法,而我发现的唯一方法只能在捕获的异常上扩展 printStackTrace 方法。 我的下一个尝试是在调试器上运行它并在抛出异常时检查调用堆栈。我的发现是这样的:
调用堆栈和堆栈跟踪都显示了几个 Android 原生方法的调用,但都没有显示我的代码中的哪一行调用了该方法。我认为正在发生的是这段代码是从句柄或事件队列中运行的。我的问题是在这种情况下,有没有一种聪明的方法可以判断我的代码的哪一行触发了这个异常?提前感谢您的帮助。
【问题讨论】:
尝试/捕获整个代码并显式记录异常+堆栈跟踪? 我将在发生错误的 Activity 的 OnCreate() 和 OnResume() 方法周围放置一个 try catch。这已经接近于在整个代码中放置一个 try-catch 了。 我在 Activity 的 onCreate() 和 Resume() 方法中放了一个 try catch。我选择这些方法是因为我知道屏幕旋转会导致这些方法被触发。我还在我正在使用的片段的 OnCreateView() 方法中放置了一个 try catch。他们都没有发现异常。是否有任何其他由屏幕位置调用的方法? 你应该看看下面的答案,看看在哪里调用了屏幕旋转。 我将下面的代码添加到我的活动中,在其上放置断点并在调试中运行应用程序。应用程序在到达断点之前就崩溃了。屏幕旋转还涉及哪些其他可能触发崩溃的方法? 【参考方案1】:屏幕旋转触发以下活动委托
@Override
public void onConfigurationChanged(Configuration newConfig)
super.onConfigurationChanged(newConfig);
您可以从这里开始调试您的活动状态。 只需验证所有活动/片段成员仍然可用并且没有发布任何内容。
【讨论】:
我在 super.onConfigurationChanged() 上放了一个断点。应用程序在达到这一点之前就崩溃了。 由于我没有看到您的完整代码只是一般性建议,我建议您反复删除活动内容,以便找出导致此类异常的原因。以上是关于当stacktrace仅在eclipse中显示本机方法时,如何找到导致错误的代码行的主要内容,如果未能解决你的问题,请参考以下文章