我希望jdb(我通过Eclipse调试器使用)在为变量赋值时中断.我不想在某个特定的行设置断点,而是更普遍.
例如,每次x == null时中断.
这样的事情可以实现吗?
我正在尝试配置 Visual Studio Code,以便我可以使用它而不是 IJ 来调试复杂的 Java 应用程序。由于太复杂的原因,我一直在使用 mvnDebug 在终端上运行,然后使用 JDB 连接。在 IJ 中,我将其设置为远程调试器,但是,我似乎无法在 VSC 中找到相同的选项。
我已经尝试过这个扩展,但我不知道如何为 JDB 配置它(我不应该需要 startupClass 等)。
如何在 Visual Studio Code 中使用 JDB?
在命令行上使用jdb进行调试时,它会在每个步骤后显示一个状态行,如下所示:
Step completed: "thread=main", [class name].[method], line=10 bci=20
Run Code Online (Sandbox Code Playgroud)
什么是bci,它对我有什么用?
我一直试图将jdb连接到android模拟器一段时间,并且已经反复遇到:
jdb -sourcepath ./src -attach localhost:8700 java.io.IOException: shmemBase_attach failed: The system cannot find the file specified at com.sun.tools.jdi.SharedMemoryTransportService.attach0(Native Method) at com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:90) at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98) at com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:45) at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358) at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168) at com.sun.tools.example.debug.tty.Env.init(Env.java:64) at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010) Fatal error: Unable to attach to target VM.
不太好.绕过这个最好的方法是什么?我在Windows 7 64bit上运行.
我已经走上了使用Linux进行Blackberry开发的漫长道路.目前这意味着:
bb-ant-tools - 用于建筑
net_rim_api.jar - 以及Eclipse插件1.3.0中的其他Blackberry好东西
preverify - 从J2ME SDK或WTK,我忘了哪个
Retrotranslator - 用于将一些Java 5转换为J2ME
bjavaloader - 来自Barry,用于将应用程序推送到我的设备
我离开了很远的路,而且我已经放弃了Eclipse,因为我更喜欢vim.最后一块拼图是:
我也尝试过bjdwp,也来自Barry项目.我通过jdp连接时可以连接并查看一些控制台输出.但是,尝试使用jdp功能似乎失败了.在Eclipse中作为远程应用程序进行调试会导致以下错误:
在抛出'Barry :: Error'的实例后终止调用
what():Controller:不支持请求的模式
最好的方法是在Virtualbox中的Windows中设置jdwp并远程连接到Linux吗?
使用Java的jdb调试我的代码.我停留在我的程序期望命令行输入的位置,但是jdb将其作为jdb命令拦截.
如何告诉jdb将文本传递给正在运行的程序?
版:
C:\Documents and Settings\*snip*>java -showversion
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
编译:
javac -g LZWDecompress.java
Run Code Online (Sandbox Code Playgroud)
jdb.ini:
stop in LZWDecompress.decompress
run
monitor list
Run Code Online (Sandbox Code Playgroud)
这是发生的事情:
Initializing jdb ...
*** Reading commands from C:\Documents and Settings\*snip*\jdb.ini
Deferring breakpoint LZWDecompress.decompress.
It will be set after the class is loaded.
> run LZWDecompress
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
> > >
VM Started: Set deferred breakpoint LZWDecompress.decompress
File to …
Run Code Online (Sandbox Code Playgroud) 我使用JDB远程调试我的应用程序,只是JDB,没有IDE,在jdb中是否有办法设置条件断点?
例如:停在MyClass:80 时mystr.equals("abc")
我在使用模拟器上的Android应用程序的独立java调试器时遇到了麻烦.显然,任何具有远程功能的java调试器(如jdb(或jswat))都可以通过以下步骤进行操作(正如我在此处阅读后所理解的那样):
1)打开模拟器,在模拟器上安装您的应用程序(adb install)
2)打开dalvik服务器(ddms)
3)在模拟器上,运行"DevTools"应用程序 - >"开发设置" - >选择要调试的应用程序,启用"等待调试器"标志
4)再次在模拟器中运行你的应用程序; 它将阻塞,等待调试器附加,dalvik将显示一个由"红色bug"标记的新进程
5)在dalvik上,选择红旗过程; 因此,它的调试端口转发到localhost:8700
6)将调试器挂钩到localhost:8700.使用jdb,你必须运行"jdb -attach 8700"
启动调试器后,模拟器上的应用程序将解锁.因此,似乎应用程序已正确检测到调试器,因此可以自由运行.
然而,重点是它"自由运行",也就是说,它不会等待调试器发出"运行"命令.所以我没有机会设置任何断点.
根据1的提示,我已经尝试在我的应用程序的开头放置等待循环,希望我有时间设置断点.当我尝试设置断点时,jdb会说"延迟断点XXX.YYY.它将在加载类后设置.",因为应用程序尚未运行.但是,如果我然后发出"运行"命令,答案是"没有暂停.",因为应用程序已经运行(确实如此).
使用jswat你没有看到这些消息,但最终的结果是相同的:-(
不用说,"jdb -attach"适用于在localhost上运行的非android java应用程序.
任何提示("请使用eclipse"除外)?
我在任何地方都错过了一个愚蠢的细节吗?
该应用程序是一个HelloWorld,构建命令是"ant debug".
先感谢您.
我有一个编译源代码的可执行jar,我想用jdb调试它(不幸的是,在这个环境中没有其他调试器可用).
我可以调试它
jdb -classpath "${JAR_FILE}:${CLASS_PATH}" ${MAIN_CLASS} ${ARGS}
Run Code Online (Sandbox Code Playgroud)
如何让jdb使用jar文件中内置的源代码?
注: Java 6,AIX,ksh
我正在尝试在 Intellij v2020.1 中设置远程调试器,但不断收到以下错误:
无法打开调试器端口(localhost:5005):java.io.IOException“握手失败 - 连接过早关闭”
在我的 docker compose 文件中,我已将端口 5005 安装到 5005
在我的 docker 文件中,我有:
EXPOSE 5005
ENTRYPOINT ["/bin/bash", "runme.sh"]
在我的 shell 脚本中我有:
/opt/java/openjdk/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar mine.jar
当我执行 docker ps 时,我可以看到以下内容:
0.0.0.0:5005->5005/tcp, 0.0.0.0:8111->8111/tcp
在 IntelliJ 中,我将远程调试器从端口 5005 设置为容器端口 5005,添加到模块 claspath 中,并在启动前步骤中添加到我的 compose 文件中。
服务启动正常,但无法连接到调试器,有什么想法吗?