在编译程序时,如何打印堆栈Trace?

问题描述 投票:0回答:2

这个是一个非常简单的问题:

当您编译Java程序时,它会转换为字节代码,因此,错过了.java或.class文件的每一行号(我认为这是我错了..)。因此,当您打印堆栈跟踪时,它如何设法获取呼叫堆栈中的所有类名称和行号?我认为我可能会在这里缺少一些东西,但是我找不到与此相关的东西。

java stack-trace bytecode
2个回答
7
投票
当您编译Java程序时,它将转换为字节代码

纠正

因此,错过了.java或.class文件的每行号(我认为这是我错了。)。
你错了。线号信息嵌入到.class文件中,除非您以某些方式使用

-g

编译器选项。

如果存在行号,则将Java编译器创建的字节码,并将
debug

标志设置为true。这可以使用

5
投票

trom oracle的

javac
文档:

  

-g

收集所有调试信息,包括本地变量。默认情况下,仅生成行号和源文件信息。
  • -g:none
    • 没有生成任何调试信息。
  • -g:{keyword list}
    - 仅生成通过逗号分开的关键字列表指定的某种调试信息。有效的关键字是:
    • source
  • Source文件调试信息
      
    • lines
      • 线数字调试信息
    • vars
      • 局部变量调试信息
    •   
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.