3

stringsjar 文件是否有与 Unix 命令等效的命令?

举个例子,如果我有这个 Java 文件:

public class Foo {
    String foo = "I\'m so meta even this acronym";
}

编译并放入 bar.jar

理想情况下,我会喜欢在 bar.jar 上运行一些命令,它将字符串“I'm so meta”发送到标准输出,这样我就可以 grep 了。

我要解决的问题是,我在我的 Java 程序中收到一条错误消息,我想知道它来自哪个 jar 文件。

4

4 回答 4

5

这应该适合你:
unzip -p your.jar |strings| grep 'your string'

要搜索目录中的多个 JAR 文件,请使用:
unzip -p \*.jar |strings| grep 'your string'

于 2011-07-28T13:41:47.230 回答
2

罐子只是 zip 文件,所以这是一个很好的起点。

unzip -p myfile.jar | grep "Error message"

似乎可以工作,但是 unzip 可能会打印控制字符,因此可能会弄乱您当前的控制台。您最好将文件实际解压缩到一个目录中并在其上运行字符串。可能这样的事情会起作用

for file in `ls *.jar`
do
  echo $file
  unzip -ol $file | awk '{ print $4 }' > extracted && cat extracted | xargs strings | grep "ERROR MESSAGE" && cat extracted | xargs rm -rf
done

我敢打赌,有一种更有效的方法可以做到这一点,我敢肯定,一些 shell 脚本专家会为我清理这个。

于 2011-07-28T13:38:22.853 回答
0

如果您的错误消息被抛出异常,我建议您检查堆栈跟踪并获取引发异常的类和方法。然后使用 jad(java 反编译器)反编译该类并查看消息来自何处。

于 2011-07-28T13:46:26.663 回答
-2

您可以在 Unix 中尝试“nohup”命令。这里所有的异常和标准输出都将附加到一个文件中

命令是

nohup java -jar bar.jar > bar.out &

现在查看文件 bar.out 以获取 jar 执行中的错误消息。

于 2011-07-28T13:38:31.327 回答