2012-10-01 95 views
-1

我对Java反射不太好,我试图调试使用大量反射的一段难看的代码。我在应该调用的某些方法上放置了一个断点,但是当我执行该程序时,代码不会暂停。因此,这让我相信,在Eclipse中运行时使用反射运行方法会忽略断点(Windows 7上的Indigo)。是否可以调试Java反射?

任何人都可以证实这一点吗?我在下面提供了一个例子,虽然由于我不知道如何执行一个特殊的方法使用反射,它不起作用,但我希望它澄清我在问我的问题:

public static void main(String[] args) 
{ 
    try 
    { 
     Class test = Class.forName("Test"); 

     test.runMethodDoSomething(); 
    } 
    catch (ClassNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 

public static class Test 
{ 
    public void doSomething() 
    { 
     // Place breakpoint here. 
    } 
} 
+0

我无法证实这一点!我曾深入反思过。调试一直工作。但你的代码甚至不编译! – home

+0

您可以使用体面的调试器调试任何Java代码(我使用Eclipse和NetBeans IDE及其调试器)。也许问题在于你正在运行这个代码(而不是调试)或者它根本没有被调用。如果你想确定它,放置简单的'System.out.println(“反射调用!”);'或类似的,以知道代码已被执行。 –

+0

无法确认它,我已经完成了一个基于元数据的对象合并实用程序的核心,我使用纯粹的反射和调试工作的应用程序保存了我的生活太多次。 – Gamb

回答

2

首先,反射与调试器不冲突。通常你可以在方法中放置断点,然后使用反射调用它,调试器将停止在那里。

其次,代码片段中没有反射。 Class.forName()是动态类加载。反思是当你使用obj.getClass().getMethod("myMethod").invoke()

因此,如果您的代码段无效,请尝试了解您的环境或可能在您的代码中的问题。在调用方法之前有没有机会引发某种异常,但是异常是在没有通知的情况下捕获的?

+0

是的,你最后的评论得到了它。例外情况不是打印堆栈跟踪,这就是为什么代码没有执行。谢谢ALex – Sal

相关问题