https://bbs.kanxue.com/thread-210049.htm蓝铁
1 2017-8-25 19:40 4 楼 0 根据提示,可知,出错的地方是,android.app.ActivityThread.handleBindApplication(), 行=4,400 查看源码可以发现,代码中指向的是app.onCreate() try {
mInstrumentation.callApplicationOnCreate(app);//内部调用的是app.onCreate() } catch (Exception e) {
if (!mInstrumentation.onException(app, e)) {
throw new RuntimeException( "Unable to create application " + app.getClass().getName() + ": " + e.toString(), e); } }
出现这个错误的原因是其在Java层调用了Debug. isDebuggerConnected native层调用的是Dalvik_dalvik_system_VMDebug_isDebuggerConnected 最底层是dvmDbgIsDebuggerConnected 函数内部是判断的gDvm.debuggerActive
解决方案就是,在jdb连接之后,在patch dvmDbgIsDebuggerConnected函数 我正在使用 jdb dubugger,它的问题是在每个捕获的异常上停止,尽管我没有执行任何 catch .... 语句。在类加载期间,有数百个:
发生异常:java.io.FileNotFoundException (uncaught)"thread=Thread-2-EmulatorEngine", sun.misc.URLClassPath$JarLoader.ensureOpen(), line=634 bci=30
有什么方法可以指示 jdb 跳过这些异常吗? 附注。我听说过 IDE 编辑器。有理由使用jdb。 我意识到我不够小心。JDB 在启动这些行后写入
设置未捕获的 java.lang.Throwable
设置延迟未捕获的 java.lang.Throwable
所以,要禁用它,我需要输入一个命令 ignore uncaught java.lang.Throwable C:\Users\Reverse>adb shell am start -D -n lwf.lc.pncdd/lwf.lc.pncdd.MainC 查看内存情况: cat /proc/N/maps jdb调试目标进程 C:\Users\Reverse>adb jdwp 查看目标进程PID C:\Users\Reverse>adb forward tcp:9999 jdwp:PID 转发 C:\Users\Reverse>jdb -connect com.sun.jdi.SocketAttach:port=9999,hostname=localhost 设置未捕获的java.lang.Throwable 设置延迟的未捕获的java.lang.Throwable 正在初始化jdb... > exit jdb调试实例: jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8631 设置未捕获的java.lang.Throwable 设置延迟的未捕获的java.lang.Throwable 正在初始化jdb... > 出现异常错误: java.lang.ClassNotFoundException (未捕获)"线程=Thread-2", dalvik.system.BaseDexClassLoader.findClass(), 行=201 bci=84 Thread-2[1] wherei [1] dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:201), pc = 84 [2] java.lang.ClassLoader.loadClass (ClassLoader.java:379), pc = 28 [3] java.lang.ClassLoader.loadClass (ClassLoader.java:312), pc = 1 Thread-2[1] locals 方法参数: suppressedExceptions = instance of java.util.ArrayList(id=9327) c = null 本地变量: name = "com.target.os.ClassName" cnfe = instance of java.lang.ClassNotFoundException(id=9325) Thread-2[1] |