当前位置: 首页 > 面试题库 >

使用“ jdb -attach”(或jswat)调试android应用

莘光华
2023-03-14
问题内容

我在模拟器上将独立的Java调试器与android应用程序一起使用时遇到麻烦。显然,可以通过执行以下步骤来利用任何具有远程功能的Java调试器(例如jdb(或jswat))(据我在这里和那里阅读后的理解):

1)打开模拟器,在模拟器上安装您的应用程序(adb install)

2)打开dalvik服务器(ddms)

3)在模拟器上,运行“ DevTools”应用程序->“开发设置”->选择要调试的应用程序,启用“等待调试器”标志

4)再次在模拟器中运行您的应用程序;它将阻塞,等待调试器附加,并且dalvik将显示带有“红色错误”标记的新进程。

5)在dalvik上,选择红色标记的进程;其调试端口因此转发到localhost:8700

6)将调试器挂接到localhost:8700。使用jdb,您必须运行“ jdb -attach 8700”

启动调试器后,仿真器上的应用程序便会解除阻止。因此,该应用似乎已正确检测到调试器,因此可以免费运行。

但是,要点是它“免费运行”,也就是说,它不会等待调试器发出“运行”命令。因此,我没有机会设置任何断点。

遵循1的提示,我尝试在应用程序的开头放置等待循环,希望我有时间设置断点。当我尝试设置断点时,jdb说“推迟断点XXX.YYY。它将在类加载后设置。”,因为该应用程序尚未运行。但是,如果我随后发出“运行”命令,则答案是“没有任何暂停。”,因为该应用程序已经在运行(确实如此)。

使用jswat,您不会看到这些消息,但最终结果是相同的:-(

不用说,“ jdb -attach”对于在本​​地主机上运行的非Android Java应用程序也能正常工作。

有什么提示(“请使用日食”除外)?

我只是在任何地方都缺少愚蠢的细节吗?

该应用程序是一个HelloWorld,构建命令是“ ant debug”。

先感谢您。


问题答案:

最好的方法似乎是在.jdbrc文件中设置断点,因为这些断点已加载并被延迟,并且您无需更改代码来设置任意延迟循环来尝试在调试器等待时捕获它。我和您一样,发现如果在类名上设置断点,则它不起作用。它说推迟到类加载之前,但是似乎在加载类时jdb永远不会得到通知。

但是,如果您在特定的类和行号上设置了断点,则它确实可以工作

在您的.jdbrc文件中:

stop com.android.helloandroid.HelloAndroid
stop com.android.helloandroid.HelloAndroid:21

如您所知,第一行不执行任何操作。第二行在这里对我有用:

Initializing jdb ...
*** Reading commands from /home/codeboy2k/.jdbrc
Deferring breakpoint com.android.helloandroid.HelloAndroid.
It will be set after the class is loaded.
> Deferring breakpoint com.android.helloandroid.HelloAndroid:21.
It will be set after the class is loaded.
> > Set deferred breakpoint com.android.helloandroid.HelloAndroid:21

Breakpoint hit: "thread= main", com.android.helloandroid.HelloAndroid.onCreate(), line=21 bci=11

 main[1] 

主要[1]
因此,关键似乎在于在断点中使用特定的行号。试试看。希望它能对您有所帮助并为您工作。



 类似资料:
  • 我正在尝试用Visual Studio代码调试java应用程序,得到以下错误: Vs代码建议更新我的launch.json,它有以下内容:

  • 我试图在VisualStudio代码中调试java应用程序,并得到以下错误:

  • JSwat 是图形化 Java 调试器前端,其编写使用 Java 平台调试器体系结构,并且基于 NetBeans 平台。它的功能包括复杂的断点;带有代码导航器的彩色源代码显示;可移动的显示面板,显示线程,调用堆栈,可见变量和已加载的类;命令界面提供更多高级功能;以及类似 Java 的表达式评估,包括方法调用。 已停产 自2013年起,该项目实际上已终止。众所周知,它无法与 Java 8甚至 Jav

  • My AndroidManifest.xml 文件 我的Gradle 我尝试清理/重建 gradle 项目、重新启动 Android Studio、使缓存失效和 rebbot ADB 集成(工具 - 有什么想法吗? 附言:在此之前,我更改了应用程序包的名称 P、 Android Studio无法调试其他项目。

  • 无论何时,您的Electron应用程序没有按照您设想的方式运行,一组调试工具也许可以帮助您找到代码的错误,性能瓶颈,或者优化的机会。 Application Debugging Whenever your Electron application is not behaving the way you wanted it to, an array of debugging tools might

  • 无论何时,您的Electron应用程序没有按照您设想的方式运行,一组调试工具也许可以帮助您找到代码的错误,性能瓶颈,或者优化的机会。 渲染进程 最广泛使用来调试指定渲染进程的工具是Chromium的开发者工具集。 它可以获取到所有的渲染进程,包括BrowserWindow的实例,BrowserView以及WebView。 您可以通过编程的方式在BrowserWindow的webContents中调