2

我正在使用 eclipse 并希望有一个“宏”,预处理器将在编译之前将其替换为当前方法的名称。

我有一个错误报告函数,称为:reportthis(String errormessage)- 整个应用程序中的不同函数都有 try/catch 块,在发生错误时从 catch 块调用 reportthis(...)。

我希望能够指定类似的东西reportthis(MACRO_CURRENT_METHOD_NAME + ":" + e.ToString());- 在MACRO_CURRENT_METHOD_NAME编译之前将由 eclipse 预处理并导致 catch {} 块调用 reportthis() 的方法的名称。

因此,如果 catch{} 块发生在 main() 中,宏应该返回字符串“main”(或“main()”等)。

这可能吗?我该如何实现我的目标?

谢谢!

编辑 我希望通过 Eclipse 中的预处理器来完成这项工作 - 这些是不可能的吗?是否有可能为eclipse编写一个插件来用当前函数名替换所有出现的“MACRO_CURRENT_METHOD_NAME”?

4

3 回答 3

2

我还没有找到自动执行此操作的方法,因此手动添加了一个字符串文字,该字符串文字指示每次调用日志代码时调用者的名称。

诺基亚的 S40 平台也是基于 Java-ME 的,我知道一些诺基亚 S40 开发人员很好地利用了Sourceforge 上提供的 Jarrut,通过修改跟踪堆栈的程序来生成堆栈跟踪。您可以利用此功能在日志记录代码中获取调用函数名称,但您可能需要稍微修改 Jarrut 以使其正常工作。

于 2013-05-26T04:05:28.627 回答
1

Java 不支持宏。但是你可以做些什么来确定当前的方法是这样的

  final StackTraceElement aTop = Thread.currentThread ().getStackTrace ()[1];
  System.out.println (aTop.getMethodName ());

通过使用索引 [1] 处的元素,您可以获得调用方法,因为 [0] 处的元素是 Thread.getStackTrace()。如果您将此代码包装在其他方法中,则必须采用数组索引,例如 2,具体取决于您使用的包装方法的数量。

于 2013-05-24T18:53:05.110 回答
0

java中没有预处理器,也没有宏语言。

虽然在某些情况下两者都可能有用,但如果我理解您的问题完全没有意义,因为异常的堆栈跟踪已经包含发生异常的地方的类和方法。

与其将字符串传递给您的“reportthis()”,不如创建一个仅接受异常并打印它的签名(或仅编写 e.printStackTrace())。

于 2013-05-24T18:52:46.093 回答