问题标签 [javap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
659 浏览

java - .class 文件没有 LineNumberTable

在我们的产品中有一些 jdk 1.6.0._17 编译的 java 源文件。每当其中任何一个出现异常时,他们都不会给出行号。

我使用 javap 来了解更多关于 jdk 1.6.0._17 编译类的信息。javap 输出没有任何 LineNumberTable,这就是为什么行号未显示在异常堆栈跟踪中的原因。

我的问题:我的 javac 命令不使用任何与调试相关的标志(如 -g:lines,vars,source)。因此,默认情况下,类文件至少应包含源代码和行号信息。我也没有使用 -g:none 来禁用调试信息的生成。

那么在 .class 文件中没有生成 LineNumberTable 的其他原因可能是什么?

非常感谢您对此的任何帮助。

问候, VK

0 投票
0 回答
213 浏览

java - 在 java 程序中执行终端命令

当我在终端中执行上述命令时,输出会显示我的类中的函数名称以及局部变量

但是,当我在 netbeans 中键入上述行并运行它时,它只显示已声明局部变量的函数名称和行号。

为什么同一命令的输出会发生变化?

0 投票
1 回答
188 浏览

scala - javap编译时有/没有断言的区别

不耐烦的 Scala第 15 章练习 10:添加assert(n >= 0factorial方法。在启用断言的情况下编译并验证是否factorial(-1)引发异常。编译没有断言。发生什么了?用于javap检查断言调用发生了什么。

我的代码:

scalac首先编译,使用检查javap Test,然后再次编译scalac -Xelide-below MAXIMUM并使用相同的命令检查 - 我似乎无法找到两者之间的区别。

我知道当我尝试执行程序时使用断言编译会抛出异常,而没有断言编译会导致堆栈溢出错误,但我找不到javap...

0 投票
2 回答
877 浏览

java - javap -c 对类文件有什么作用?

实际上,这个问题有点宽泛。我知道 javac 将 java 文件编译成字节码,一个类文件。所以,类文件应该包含 jvm 指令和所有这些。另一方面,查看这些指令的唯一方法是使用 javap -c 反编译类文件。但它不是反编译,对吧?因为如果是反编译,就会产生java文件。所以,我的猜测是 javac 编译 java 文件两次(这实际上不是真的,但为了简单起见,我们假设),首先是 jvm 指令,然后是字节码,所以 javap -c 从字节码反编译为 jvm 指令。Jvm 应该理解字节码,因此它不能理解指令。我在这里有点困惑。有人可以解释这里发生了什么吗?

0 投票
4 回答
1156 浏览

java - 从编译的类文件中显示泛型类型参数

是否有类似于javap的工具可以显示具有原始(非擦除)类型的方法和字段?

我知道编译源代码时会删除类型信息。但是,编译器必须以某种方式知道,因为即使库已经编译到类文件中,它也能够确定我对库方法的调用是否匹配它们的签名。所以至少在理论上,应该可以检索到类型信息。

我进一步搜索并找到了这个答案: Java 类文件中存储的泛型类型在哪里? 这向我指出了getGeneric...()方法。所以在我看来,类型信息以某种复杂的方式存储在类文件中,这些方法允许获取它。但是到目前为止,我还没有找到可以显示此信息的(命令行)工具。

0 投票
2 回答
796 浏览

recursion - 递归javap并将结果保存到同名文件

我想反编译许多目录中的 .class 文件,然后将每个文件的输出保存到同名文件(当然扩展名不同)。我试图设置类路径,但我收到一些错误,即找不到目录之一,但这是无稽之谈,所以我认为我做错了。(javap -classpath path/to/files/ -c *)。

我想使用 javap 来做,我不想使用库、程序等。问候。

0 投票
1 回答
2012 浏览

java - 当我们执行 javap classname 时,私有方法不存在

javap classname为什么在编译该 java 文件后在控制台上使用时没有私有方法?

0 投票
1 回答
4629 浏览

java - 尝试使用 javap.exe 反编译 java .class 文件

我有一些要反编译的 .class 文件。所以这就是我所做 javap -c "C:\users\Richard\workspace\pruebas\bin\ClassName"的:而且我一直都有同样的错误ERROR:Could not find C:\users\Richard\workspace\pruebas\bin\ClassName

但是,如果我使用 dir 命令列出此类目录中包含的文件,我可以看到它已列出。

你们知道可能是什么原因吗?我做了 man javap ,据我所知语法是正确的。

非常感谢任何想法。

0 投票
1 回答
12947 浏览

java - Java:javap错误:找不到.class

在我的系统(Ubuntu 10.04)中,java 运行良好,但我无法运行javap命令
我有编译Foo类和.class文件路径位于
/home/mahesh/java/opt
当我执行
javap -c Foo.class
I收到以下错误消息:
错误:找不到 Foo.class
是否需要设置任何环境变量或其他任何东西来解决它。我的 $PATH 变量的目标是:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/斌/
谢谢。

0 投票
5 回答
3745 浏览

java - .java 文件路径到类名

在 .java 文件上创建类的最有效方法是什么?我有 .java 文件路径,我需要获取类全名。

我只记得:

  1. 用JavaCompiler编译它
  2. 使用文件文本通过 Eclipse ASTParser(或其他)解析它
  3. 通过部分文件路径推断类名,但我不知道这是否适用于所有情况
  4. 不知何故,使用像javap这样的工具(真的没有想过这个)

编辑

我有这个文件,位于C:\myfolder\MyClass.java(让我们忽略包和文件夹关联约定):

该文件中声明的类的全名是:

  1. mypackage.mysubpackage.MyClass
  2. mypackage.mysubpackage.MyClass.MyInnerClass(我不知道这个是否正确,但让我们假装是)

当我只有 .java 文件路径 () 时,如何获取这些类C:\myfolder\MyClass.java