当我在项目中启用Dexguard时,我遇到了来自Fabric Crashlytics的崩溃报告的问题.
我在项目中启用了Dexguard,效果非常好.然后我按照本页中的说明添加了所提到的配置,以使Fabric对我的堆栈跟踪进行去混淆并显示正确的崩溃报告.以下是我在主模块中应用fabric和dexguard插件的方法build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'dexguard'
apply plugin: 'io.fabric'
Run Code Online (Sandbox Code Playgroud)
以下是我proguard-project.txt文件中的配置:
# Fabric
#############################################################################
-keepattributes *Annotation*,SourceFile,LineNumberTable
-keep public class * extends java.lang.Exception
-keepresourcexmlelements manifest/application/meta-data@name=io.fabric.ApiKey
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
#############################################################################
Run Code Online (Sandbox Code Playgroud)
以下是我proguard-project.txt在发布版本中的使用方法:
buildTypes{
debug{
proguardFile getDefaultDexGuardFile('dexguard-debug-shrink.pro')
proguardFile 'proguard-project.txt'
}
release{
proguardFile getDefaultDexGuardFile('dexguard-release.pro')
proguardFile 'proguard-project.txt'
proguardFile 'dexguard-project.txt'
if(new File("$projectDir/../local.properties").exists()){
signingConfig signingConfigs.release
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当在发布版本中遇到崩溃时,发生崩溃的文件名将丢失,但其他所有内容都正常工作,并且堆栈跟踪几乎是可以理解的.这是一个崩溃报告示例:
正如您在崩溃报告中看到的那样,堆栈跟踪中只缺少文件名.行号和方法名称等其他描述完全正常.
虽然使用完整的方法名称ir.X.ui.XMainActivity.throwSomething和前面的行号Unknown Source,但我可以得出错误发生的文件名,我希望我的堆栈跟踪显示文件名并完全描述自己.我尝试了很多选项和许多试验和错误,但问题仍然存在.
有什么我想念的吗?我怎么解决这个问题?
我正在使用8.1.0.7Dexguard版本1.21.7,Fabric插件版本2.9.0 …
android stack-trace dexguard crashlytics-android google-fabric
重复:在C#中,如何在不丢失堆栈跟踪的情况下重新抛出InnerException?
我有一些操作,我在后台线程上异步调用.有时,事情变坏了.当发生这种情况时,我倾向于得到一个TargetInvocationException,这在适当的时候是没用的.我真正需要的是TargetInvocationException的InnerException,如下所示:
try
{
ReturnValue = myFunctionCall.Invoke(Target, Parameters);
}
catch (TargetInvocationException err)
{
throw err.InnerException;
}
Run Code Online (Sandbox Code Playgroud)
这样,我的调用者就会发生真正的异常.问题是,throw语句似乎重置了堆栈跟踪.我想基本上重新抛出内部异常,但保留它最初的堆栈跟踪.我怎么做?
澄清: 我只想要内部异常的原因是这个类试图"抽象"这些函数(由调用者提供的委托)在其他线程上运行的事实.如果存在异常,则可能与在后台线程上运行无关,并且调用者真的希望堆栈跟踪进入其委托并找到真正的问题,而不是我调用的调用.
如何在与MONO一起运行的挂起应用程序中显示线程(stacktraces)?
我知道我可以使用Managed Stack Explorer(MSE)在.NET中完成它.因为应用程序仅与MONO挂起,我需要使用MONO.
或者还有其他想法如何找到悬挂的地方?
我正在捕获异常并尝试将堆栈跟踪写入日志,如下所示:
log.warn(e.getMessage());
Run Code Online (Sandbox Code Playgroud)
但它说的都是
null
Run Code Online (Sandbox Code Playgroud)
所以我改成了
log.warn(e.toString());
Run Code Online (Sandbox Code Playgroud)
现在只说了
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)
如何将完整堆栈跟踪写入日志,以便我可以看到应用程序中生成此异常的位置?
由于某种原因,我不能在我这里的ICS设备上发生本地(C/C++)地址/堆栈跟踪.
在我的Nexus 7上,当本机库崩溃时,不会输出任何内容.log.redirect-stdio设置为通过时设置为1,/system/default.prop并且/data/local.prop都不起作用.
我试着设置log.redirect-stdio来true使用stop,setprop,start的命令,但仍然没有原生的堆栈跟踪是输出到logcat的.
谷歌我的意思是来吧......我每天都因为与我的错误,不可预测的关系而对Google产生越来越多的信心.
android stack-trace android-ndk nexus-s android-4.0-ice-cream-sandwich
如果我理解正确,默认情况下Lua会在发生错误时调用调试库"debug.traceback".
但是,当将Lua嵌入到C代码中时,就像这里的示例中所做的那样: 简单的Lua API示例
我们只在堆栈顶部提供错误消息.
即
if (status) {
/* If something went wrong, error message is at the top of */
/* the stack */
fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));
/* I want to print a stacktrace here. How do I do that? */
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
初始错误后如何从C打印堆栈跟踪?
traceback.format_exc()
可以通过提出异常来获得它.
traceback.print_stack()
打印堆栈时不需要例外,但它不返回字符串.
似乎没有办法获得堆栈跟踪字符串而不在python中引发异常?
MainActivity.java有以下代码:
package com.softjourn.redmineclient.activities;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.google.gson.JsonArray;
import com.google.gson.JsonParser;
import com.softjourn.redmineclient.R;
import com.softjourn.redmineclient.models.Issue;
import com.softjourn.redmineclient.models.IssuesResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
private final static String URI="https://redmineng.softjourn.if.ua/issues.json?assigned_to_id=me";
@Bind(R.id.list_issues) ListView mListIssues;
Login li;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
li = new Login();
li.execute(URI);
}
@Override
public boolean …Run Code Online (Sandbox Code Playgroud) 很多次我得到像这样的堆栈跟踪(请参阅箭头的混乱线):
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:164)
at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:741)
at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:589)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:761)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:730)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:485)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:291)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:653)
---------> at com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
...
...
...
Run Code Online (Sandbox Code Playgroud)
$$符号是什么,"生成"是什么意思?
com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates(<generated>)
为什么它只说执行的方法而不是它中的行?
任何人都可以告诉我如何修复以下跟踪:
W/View (16810): requestLayout() improperly called by
theme.effects.TopCenterImageView{41dc73f0 V.ED.... ........
0,0-480,690 #7f060066 app:id/normal_image} during second
layout pass: posting in next frame
Run Code Online (Sandbox Code Playgroud)
这是TopCenterImageView的代码:
public class TopCenterImageView extends ImageView {
public TopCenterImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setScaleType(ScaleType.MATRIX);
}
public TopCenterImageView(Context context, AttributeSet attrs) {
super(context, attrs);
setScaleType(ScaleType.MATRIX);
}
public TopCenterImageView(Context context) {
super(context);
setScaleType(ScaleType.MATRIX);
}
@Override
protected boolean setFrame(int l, int t, int r, int b) {
if (getDrawable() == null) {
return super.setFrame(l, t, r, b); …Run Code Online (Sandbox Code Playgroud) stack-trace ×10
android ×4
java ×3
.net ×2
android-4.0-ice-cream-sandwich ×1
android-ndk ×1
c# ×1
cglib ×1
dexguard ×1
exception ×1
list ×1
lua ×1
lua-api ×1
mono ×1
nexus-s ×1
python ×1
spring ×1
thread-dump ×1
traceback ×1