我是一位经验丰富的.NET和Visual Studio开发人员,他正在尝试切换到Java和Eclipse。 我是Eclipse的新手。 我很难调试我的Java程序。 每当我尝试进入构造函数时,“步入”调试function总是会产生“源未找到”错误消息,并带有“编辑源查找路径”按钮。 我刚刚安装了Eclipse Enterprise Edition,并没有搞乱任何设置。 即使调试内部类也会导致此错误。 考虑以下代码: public class HelloWorld { public static void main(String[] args) { class JustForTesting { public String s; public JustForTesting() { s = “Just a test”; } } JustForTesting n = new JustForTesting(); System.out.println(“Hello World! ” + ns); } } 如果我在第9行放置断点并尝试进入构造函数(第5行),则会显示”Source not found” 。 窗口的标题是Launcher$AppClassLoader(ClassLoader).loadClass(String) line: 24相当难以置信,因为代码显然位于同一个文件中!
在Intellij Idea中,我正在寻找一种使用一个命令在调试模式下评估许多表达式的方法。 通常我可以使用Right Click → Evaluate Expression ( ALT + F8 )来评估单个命令。 我想有可能评估一堆表达式,如: System.out.println(myVar1); System.out.println(myVar2); 在Eclipse中,可以执行这样的“表达式脚本”,但我无法在Idea中找到解决方案。
将调试器附加到进程时会发生此错误。 我已经检查过类似问题的解决方案”Socket closed”并且它没有解决这个问题。 在此附带调试器的runnig应用程序返回后: Error running Android Debugger (port): Unable to open debugger port : java.net.SocketException “Connection reset” 有任何想法吗 ? Env: Android Studio v1+ Linux x64
假设我有一个应用程序可以生成多个线程,如果需要做任务…所以没什么特别的。 我使用Eclipse编写和调试Java应用程序。 一个线程(让它称之为“异步任务”)在离开run()方法后立即重新生成(所以有bug并且我想找到这种行为的原因)。 我的问题是,如果我使用eclipse IDE(调试透视图…)暂停这个线程“异步任务”有没有办法找出这个线程最初启动的位置(例如使用Debug视图或任何其他)? 因为我想知道是谁产生了这个post(没有进行文本搜索或类似的东西)。 有没有一个很好的方法来获取这些信息?
我创建了一个applet,它打开一个JFileChooser来选择一个JButton点击的文件。 当我在Eclipse中运行它时它工作正常。 当我将它嵌入带有applet标签的HTML页面时,单击按钮时没有任何反应。 关于为什么JFileChooser不能在浏览器中打开的任何建议都会受到赞赏, 但我的主要问题是如何调试这个? 我无法在Google上找到有关如何将Java控制台添加到Firefox 3.6或Chrome的任何内容。 有没有办法获得有关JFileChooser无法打开的原因的某种信息? 调试在下面的评论中回答 所以控制台说有一个访问被拒绝的exception,我猜是因为我没有“签名”applet。 在签署applet时,开发过程应该是什么? 在我可以在浏览器中测试之前,是否必须使用由有效CA颁发的证书对其进行签名,或者在测试时是否可以执行一些简单的操作? 这是我的代码: package com.putapplet; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.net.URL; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; @SuppressWarnings(“serial”) public class PutToS3Applet extends JApplet { private static long […]
我们正在开发一个带有GUI的Java程序,我们正在寻找一个工具,向我们展示在点击GUI中的按钮时执行哪些代码部分。 有什么建议么 ? 提前致谢
在Java中,有没有办法查看完整的,未截断的堆栈跟踪(例如,通过增加记录的帧数),或以其他方式获取堆栈跟踪的底部 ? 通常情况下,堆栈跟踪从顶部以1024帧的价格被截断,但是对于堆栈溢出问题,这是相当没价值的,因为您确实需要查看是谁进行了触发递归的调用,靠近底部。 更好的是在堆栈中间截断,但显然Sun的JVM不够聪明,无法做到这一点。 甚至可能是一些特殊的Sun特定标志? 我尝试将堆栈大小减小到允许的最小值(-Xss1000),但仍然超过1024帧。 在我的例子中,我正在尝试调试Hadoop映射器中发生的堆栈溢出,但仅限于在非常大的输入上运行时。 我假设问题来了,因为递归操作(Scala的foldRight )正在一个非常大的链表上完成,我需要非递归地重写它……但我需要知道是谁调用了foldRight 。 这是一个直接和间接在很多地方调用的基本例程,我正在使用很多很多代码,所以这是非常不明显的。
到目前为止,在GWT super dev模式下调试似乎是一个真正的痛苦。 如果有任何错误,则没有堆栈跟踪,只是在chrome控制台中给出了一个神秘的消息。 有没有办法让所有错误打印堆栈跟踪,比如开发模式? 我相信我已经有源地图,因为如果我在Chrome的开发工具中找到Sources,我可以看到我的java类的源代码。
更新 :Intellij IDEA的最新版本实现了我正在寻找的东西。 问题是如何在IDE之外实现这一点(因此我可以将异步堆栈跟踪转储到日志文件中),理想情况下不使用检测代理。 自从我将应用程序从同步模型转换为异步模型后,我遇到了调试失败的问题。 当我使用同步API时,我总是在exception堆栈跟踪中找到我的类,所以我知道从哪里开始查找是否出错。 使用异步API,我得到的堆栈跟踪不会引用我的类,也不会指示哪个请求触发了失败。 我将举一个具体的例子,但我对这类问题的一般解决方案感兴趣。 具体例子 我使用Jersey发出HTTP请求: new Client().target(“http://test.com/”).request().rx().get(JsonNode.class); 其中rx()表示请求应异步发生,直接返回CompletionStage而不是JsonNode 。 如果此调用失败,我会得到此堆栈跟踪: javax.ws.rs.ForbiddenException: HTTP 403 Authentication Failed at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1083) at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:883) at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:767) at org.glassfish.jersey.internal.Errors.process(Errors.java:316) at org.glassfish.jersey.internal.Errors.process(Errors.java:298) at org.glassfish.jersey.internal.Errors.process(Errors.java:229) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:414) at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:765) at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:456) at org.glassfish.jersey.client.JerseyCompletionStageRxInvoker.lambda$method$1(JerseyCompletionStageRxInvoker.java:70) at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590) 注意: 堆栈跟踪不引用用户代码。 exception消息不包含有关触发错误的HTTP请求的上下文信息(HTTP方法,URI等)。 因此,我无法将exception追溯到其来源。 为什么会这样 如果你在引擎盖下挖掘,你会发现泽西岛正在调用 : CompletableFuture.supplyAsync(() -> getSyncInvoker().method(name, entity, responseType)) 对于rx()调用。 […]
所以我正在尝试自己进入JDI。 通过首先使用VM命令启动调试对象,我已经成功将调试器应用程序挂接到我的debugee程序中: -agentlib:jdwp=transport=dt_socket,server=y,address=8000 然后启动我的调试器,通过使用附加连接器建立连接: VirtualMachineManager vmm = Bootstrap.virtualMachineManager(); AttachingConnector ac = vmm.attachingConnectors().get(0); Map env = ac.defaultArguments(); env.get(“port”).setValue(“8000”); env.get(“hostname”).setValue(“localhost”); VirtualMachine vm = ac.attach(env); 但现在我希望我的调试器应用程序启动调试对象程序本身。 我知道在这种情况下必须使用启动连接器。 所以我尝试了这个: VirtualMachineManager vmm = Bootstrap.virtualMachineManager(); LaunchingConnector lc = vmm.launchingConnectors().get(0); Map env = lc.defaultArguments(); env.get(“main”).setValue(“p.DebugDummy”); env.get(“suspend”).setValue(“true”); env.get(“home”).setValue(“C:/Program Files/Java/jdk1.7.0_51”); VirtualMachine vm = lc.launch(env); 但是,当我启动这个应用程序时,我的debugee程序没有启动。 我没有例外或任何事情,尽管上面的代码有一堆后续代码; 像: // A single implementor of this interface […]