当前位置: 首页 > 面试题库 >

确定.class文件是否已使用调试信息进行编译?

闻人河
2023-03-14
问题内容

如何确定是否已使用调试信息编译任何Java .class文件?

我怎样才能准确地知道使用了什么-g {source | lines | vars}选项?


问题答案:

如果在命令行上,则javap -l将显示LineNumberTable和LocalVariableTable(如果存在):

peregrino:$ javac -d bin -g:none src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{
public Relation();

peregrino:$ javac -d bin -g:lines src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{
public Relation();
  LineNumberTable: 
   line 1: 0
   line 33: 4

peregrino:$ javac -d bin -g:vars src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{
public Relation();

  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      5      0    this       LRelation;

javap -c 将在反编译开始时显示源文件:

peregrino:$ javac -d bin -g:none src/Relation.java 
peregrino:$ javap -classpath bin -l -c Relation | head
public class Relation extends java.lang.Object{
  ...

peregrino:$ javac -d bin -g:source src/Relation.java 
peregrino:$ javap -classpath bin -l -c Relation | head
Compiled from "Relation.java"
public class Relation extends java.lang.Object{
  ...

以编程方式,我将研究ASM,而不是编写另一个字节码读取器。



 类似资料:
  • #include <stdio.h> int func(void) { return 3; } int main(void) { int a = 0; a = func(); printf("%d\n", a); return 0; } 技巧 使用gdb调试遇到函数时,使用step命令(缩写为s)可以进入函数(函数必须有调试信息)。以上面代码为例:

  • 我是一名具有强大C背景的程序员,但对Java世界很陌生。现在我有一个关于调试的问题。 如何使用Eclipse IDE调试预编译Java. class文件?我发现通过谷歌搜索找到答案并不容易。 为了使我的问题准确无误,我将其阐述如下。 我在下面有两个.java源文件: 在根文件夹($)中,我可以使用两个命令编译并运行: 现在我有其中有Java字节代码。 那么如何在上进行源代码级调试呢? 我试过了,但

  • 问题内容: Java程序如何找出它是否在调试模式下运行? 在常规的“全速”模式下,应用程序的行为应与“调试模式”下(在连接调试器时,在调试模式下运行)的行为有所不同。该应用程序通过TCP与另一台计算机,另一进程或自身内部进行通信。我的同事希望我们默认使用,以便从套接字读取最多可以阻塞1秒钟。调试时,这当然是不够的,并且应用程序将停止正常运行。因此,一种解决方案是设置较高的值,但仅在调试模式下使用(

  • 问题内容: 我在Java中使用PdfBox从PDF文件提取文本。提供的某些输入文件无效,这些文件上的PDFTextStripper暂停。有没有一种干净的方法来检查提供的文件是否确实是有效的PDF? 问题答案: 您可以找出文件(或字节数组)的mime类型,因此不必盲目地依赖扩展名。我是用光圈的MimeExtractor(http://aperture.sourceforge.net/)来完成的,或者

  • 问题内容: 使用Maven项目和Jar文件时,在引用资源时遇到麻烦的问题… 我将所有资源都放在一个专用文件夹/ src / main / resources中,该文件夹是Eclipse中构建路径的一部分。使用以下文件引用文件 这在Eclipse中工作正常,但在Jar文件中失败-资源位于jar根目录正下方的文件夹中… 有谁知道在JAR和Eclipse中同时引用文件的“最佳实践”? 编辑: 问题是,尽

  • 问题内容: 我不想使用jQuery,但我想使用Ajax进行文件上传。那可能吗? 如果是这样,我在哪里可以找到有关信息/教程? 问题答案: 不,无法使用javascript执行此操作。 但是,为了给人“ AJAX”的感觉,您可以向隐藏的iframe提交表单,然后将脚本结果输出到其中,然后从那里进行处理。Google 并从那里开始。 如果您使用的是jQuery,并且您的表单中包含任何文件字段,也可以使