如何使用Thread.UncaughtExceptionHandler获取抛出异常的行号?

范植勝*_*范植勝 20 android

当我使用try-catch块来捕获异常时,我可以通过调用获取抛出异常的行号e.getStackTrace().

像这样:

java.lang.NumberFormatException: Invalid int: "abc"    
java.lang.Integer.invalidInt(Integer.java:138)   
java.lang.Integer.parse(Integer.java:375)   
java.lang.Integer.parseInt(Integer.java:366)   
java.lang.Integer.parseInt(Integer.java:332)   
com.example.getarea.MainActivity.onCreate(MainActivity.java:42)   
android.app.Activity.performCreate(Activity.java:5066)   
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1102)   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288)   
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)   
android.app.ActivityThread.access$600(ActivityThread.java:151)   
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)   
android.os.Handler.dispatchMessage(Handler.java:99)   
android.os.Looper.loop(Looper.java:155)   
android.app.ActivityThread.main(ActivityThread.java:5536)   
java.lang.reflect.Method.invokeNative(Native Method)   
java.lang.reflect.Method.invoke(Method.java:511)   
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)   
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)   
dalvik.system.NativeStart.main(Native Method) 
Run Code Online (Sandbox Code Playgroud)

但是当我使用Thread.UncaughtExceptionHandler时,调用e.getStackTrace()给我这个:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.getarea/com.example.getarea.MainActivity}: java.lang.NumberFormatException: Invalid int: "abc"    
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2332)        
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)        
android.app.ActivityThread.access$600(ActivityThread.java:151)        
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)        
android.os.Handler.dispatchMessage(Handler.java:99)        
android.os.Looper.loop(Looper.java:155)        
android.app.ActivityThread.main(ActivityThread.java:5536)        
java.lang.reflect.Method.invokeNative(Native Method)        
java.lang.reflect.Method.invoke(Method.java:511)        
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)        
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)        
dalvik.system.NativeStart.main(Native Method)  
Run Code Online (Sandbox Code Playgroud)

如何使用Thread.UncaughtExceptionHandler获取抛出异常的行号?

Thi*_*ilo 39

尝试

e.getStackTrace()[0].getLineNumber();
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪中的第一个元素是最近调用的方法(调用堆栈的顶部).

还有获取类,方法和文件名的方法.

如果e你进入UncaughtExceptionHandler并不适合你(因为它包装了真正的异常),你可以尝试e.getCause()查看该堆栈跟踪.

  • 我将e.getStackTrace()更改为e.getCause().getStackTrace()并且它可以正常工作!非常感谢!! (2认同)