Java LineNumberTable:条目说明

2023-12-05

如果我反汇编我的类文件,我会得到以下形式的 LineNumberTables

  LineNumberTable:
    line 204: 0
    line 205: 9
    line 208: 57
    line 209: 63
    line 210: 72
    line 211: 75
    line 212: 78
    line 213: 87
    line 216: 90
    line 218: 118
    line 221: 126
    line 222: 131
    line 223: 138
    line 224: 143
    line 227: 150
    line 230: 157
    line 231: 160
    line 232: 170
    line 235: 194
    line 237: 228
    line 240: 249
    line 241: 259
    line 243: 266
    line 245: 269
    line 246: 292
    line 248: 295
    line 249: 301
    line 250: 308
    line 251: 315
    line 252: 322
    line 253: 329

我知道这些表包含调试信息,并且第一个条目是类文件中的某种位置,而第二个条目是源代码中的位置。我想知道:

  1. 源代码行号是相对的还是绝对的?如果我绝对地解释它们,有些会指向多行注释的中间,这似乎很奇怪。

  2. 同一源代码的两个不同编译仅在一个字节上有所不同:条目“line 216: 90”被“line 215: 90”替换。我试图找出造成这种情况的原因。任何想法?


将常识应用于您正在阅读的内容。当您正确阅读规范时,即存储在LineNumberTable属性的数组是字节码偏移量,第二个是行号,这并不意味着您使用的反汇编器也会按该顺序打印它们。

有两个指标表明订单已被调换

  1. 第一个数字前有“Line”字样,表明第一个数字是行号
  2. 第一个数字的范围是 204 到 253,这对于类声明中某个方法的源代码行来说是合理的,而第二个数字的范围是0 to 329,这对于方法内从零开始的字节码偏移量来说是合理的。

    相反,不太可能看到方法的行号以零开头,因为源代码通常以package and import声明。如果方法代码的前 203 个字节没有关联的源代码行(尽管这并非不可能),这也是不寻常的。

这两个指标加在一起都相当强劲。那么,观察到的变化是相当合理的。显然,生成的代码没有改变。但由于没有关于行号和生成的代码如何关联的标准,因此可能存在细微的差异,具体取决于编译器版本,例如当一个表达式跨越多行,但只生成一条指令时,或者当编译器试图避免过多的行号表时。

例如。代码

foo(
);

仅生成一条指令(如果foo() is static)并且没有定义这两行中的哪一行与该指令相关联。当它是一个实例方法时,它将由两条指令组成,但将它们表示为不同的行号是有争议的,因为在调试期间介入它们并没有多大帮助。但这是编译器的决定。还带有

foo(
    null,
    1,
    true
);

将每个常量参数推入堆栈需要指令序列中的一个字节,而将不同的行号与每条指令相关联则每条指令需要另外四个字节。由于推送这些常量不太可能失败,因此跟踪它们没有什么意义,编译器可能决定将整个序列与调用指令的唯一行号相关联。由于此决定取决于实际的编译器,甚至可能取决于其当前配置,因此重新编译可能会更改关联。

另一个区别是编译器如何处理合成方法,例如桥接方法和内部类访问器。到目前为止,我已经看到,它们仅与零相关联,与周围类声明的开头以及它们委托的实际目标成员的开头相关联。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java LineNumberTable:条目说明 的相关文章

  • 使用SimpleMailMessage类发送邮件时如何使java字符串着色

    我正在使用 java 中的 SimpleMailMessage 类发送邮件 我将 spring 与 hibernate 结合使用 我想在发送邮件时将特定字符串设置为彩色 Code String emailBody Dear username
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 通过派生指针调用基类函数

    Objective C 如何使用派生指针调用基类函数 其中 foo 在派生类中被重写 本质上相当于这个 C 代码 base b ptr 0 derived d ptr new derived d gt base foo 我认为这应该相当简单
  • 定制法国号码格式

    我尝试为美国国家 地区使用自定义数字格式 到目前为止效果很好 Not something I want NumberFormat numberFormat0 NumberFormat getNumberInstance Locale US
  • 修复 java 内存泄漏的学习网站

    学习修复 java 内存泄漏的最佳地点是什么 我一直试图在网络上找到好的资源 但令我失望的是 我发现正在讨论玩具示例 我还能够对小型玩具转储进行故障排除 但现实世界的应用程序转储更具挑战性 并且提供的线索很少 我尝试过 Jhat JMap
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • lombok - 多个镜头中的 @Builder 模式

    I use Builder of 龙目岛项目 https github com rzwitserloot lombok 所以考虑我有这个例子 Builder public class Client private Getter Setter
  • 用户“root”@“localhost”的访问被拒绝

    我正在尝试从数据库中获取记录 但我面临这个访问被拒绝的问题 我尝试了 Stack Overflow 上提到的其他解决方案 例如向用户授予权限 但没有任何效果 访问数据库的代码 public void service HttpServletR
  • PHP:数据库连接类构造方法

    我是面向对象编程的新手 最初 我是在类内部和构造函数外部定义变量并为其赋值 但是在今天的 Java OOP 课程之后 我被告知这是不好的风格 应该避免 这是我模拟的原始 PHP 数据库连接类 class DatabaseConnection
  • x.person 上的 @OneToOne 或 @ManyToOne 引用未知实体:y.Person - 继承问题

    我的 Hibernate 架构有问题 我有一个 MappedSuperClass 人员 一名员工和一名客户 gt Person class MappedSuperclass Audited public class Person exten
  • 带有 spring-kafka 的 Kafka 死信队列 (DLQ)

    最好的实施方式是什么死信队列 DLQ Spring Boot 2 0 应用程序中的概念 使用 spring kafka 2 1 x 来处理无法处理的所有消息 KafkaListener某些bean发送到某些预定义的Kafka DLQ主题的方
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 如何用java对jpg进行像素化?

    我正在尝试使用 Java 6 对 JPEG 进行像素化 但运气不佳 它需要使用 Java 而不是像 Photoshop 这样的图像处理程序 并且它需要看起来像老派 像这样 有谁能够帮助我 使用java awt image javadoc h
  • WSDL 表示中的枚举类型

    WSDL 表示如下
  • 用java解密AES加密文件

    我有一个使用 AES 使用 java 应用程序加密的文件 我还有一个加密的密钥文件 但我不明白如何使用密钥来解密文件 大多数教程和示例都会在一个地方创建临时随机密钥 加密文件和解密 所以 问题是如何指定解密时必须使用的密钥 EDIT 我发现
  • 如何将我的自定义相机应用程序设置为默认应用程序?

    如果我使用以下代码 Intent takePictureIntent new Intent MediaStore ACTION IMAGE CAPTURE startActivityForResult takePictureIntent 1
  • Google OR-Tools:无法运行 java 示例,java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

    我是java新手 我想尝试google or tools来解决车辆路由问题 只是尝试运行 java 示例here https developers google com optimization introduction run progr
  • 仅在java中使用数组计算50的阶乘

    我是java的初学者 我有一个作业要编写一个完整的程序 使用数组计算 50 的阶乘 我无法使用像 biginteger 这样的任何方法 我只能使用数组 因为我的教授希望我们理解背后的逻辑 我猜 然而 他并没有真正教我们数组的细节 所以我在这
  • 当我必须在 Netty4 编码器中调用 ByteBuf.retain() 时?

    我正在编写一个以 NUL 终止 JSON 消息的编码器 以便在消息碎片的情况下可以对其进行解码 我找到了这个样本 gt click https github com netty netty blob master codec src mai
  • 文件构造函数说明

    我无法理解以下文件构造函数 public File String parent String child and public File File parent String child 参数有什么作用parent and child该文件

随机推荐

  • 集群环境上的 Spring Batch - Websphere

    我确实设置了一个 Spring Batch 作业 它在单个 JVM 上运行良好 但我需要将其部署到集群环境中 我正在使用 Spring 任务调度程序来安排工作 有没有什么方法可以在集群环境中做到这一点 如果一个节点出现故障 另一个节点应该将
  • Facebook cURL 以我身份发帖?

    创建 Facebook 应用程序 使用 cURL 从应用程序发布消息 但它似乎是由我发布的 我怎样才能从应用程序发布 这是我的 cURL attachment array access token gt token message gt m
  • 由于循环导入而无法导入 opencv

    当尝试在 jupyter 实验室笔记本中导入 opencv 时 import cv2 我收到此错误 AttributeError 部分初始化的模块 cv2 没有属性 gapi wip gst GStreamerPipeline 很可能是由于
  • 如何在 Android 上创建 .csv

    我的目标是从表格创建 csv 文件 以打印报告 然后我可以将此 csv 文件存储到我的 SD 卡中 我已经提到了一些与此类似的问题 但他们要求提供一个 jar 文件 有没有其他方法可以不用jar文件来集成呢 在组件 au com bytec
  • MVVM - WPF DataGrid - AutoGenerateColumn 事件

    我目前正在仔细查看出色的Laurent 的工具包和我有以下问题 从 Blend 4 开始 我为 Loaded 事件添加了一个 EventTrigger 在我的 ViewModel 中我有以下内容 public RelayCommand rc
  • 内部录音程序[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 注意 这不是需要使用麦克风的东西 我想在内部录制音频 我想用 C 或 Java 编写一个程序来记录发送到计算机扬声器的音频数据 最终产品将允许用户点击 录制 按钮 当前正在播放的
  • For 循环影响递归变量

    我正在尝试使用递归创建一个函数 该函数可以从帕斯卡三角形内的任何序列中获取任何项 基本上使用自然数作为第一个集合的加法序列 然后使用之前的每个集合作为加法序列 始终从 1 开始 单纯形数 我目前正在学习 JavaScript 并正在做我已经
  • 自定义hugo学术主题中的“关于”小部件

    我通过 RStudio blogdown 使用hugo academic 主题来构建我的网页 示例页面在这里 https themes gohugo io theme academic 我想添加第二份非学术清单兴趣低于学术的 这可能吗 在配
  • 将字符串中的整数提取到数组中

    我需要提取integers from a String到一个数组中 我已经得到了integers 但我无法将它们放入数组中 public static void main String args String line First numb
  • 如何根据条件和参数数量启用结构体?

    我想创建一个元函数 如果向其传递超过 1 个参数 则返回特定类型 如果仅向其传递一个参数 则返回基于条件的另一种类型 该条件是任意的 因此需要enable if或类似的东西 但对于这个例子 我只是将其作为类型比较 让我们将其简化为以下内容
  • 估计全局辐照度的漫射和直接分量

    我正在寻找分离全局辐照度的漫射和直接分量 并找到了 Erbs 模型来在 pvlib 中执行此操作 请参阅pvlib irradiance erbs 但是 我得到了非常奇怪的结果 我预计直接法向辐照度 DNI 会低于全局水平辐照度 GHI 或
  • 找不到-lpthread

    我正在尝试交叉编译 samba 服务器 config 工作得很好 但是当我想用 make 构建时 提示说 Linking shared library bin libsmbclient so 0 opt qnx630 host linux
  • Powershell Import-CSV 如何跳过直到基于字符串的特定行?

    你好 我的 CSV 文件是这样的 BEGINPROPERTIES total candidate create 2 duration 0 00 00 433 internal audit session id 1397055568 inte
  • 使用正则表达式的codingbat wordEnds

    我正在尝试解决wordEnds来自codingbat com使用正则表达式 给定一个字符串和一个非空单词字符串 返回由字符串中该单词每次出现之前和之后的每个字符组成的字符串 忽略单词前后没有字符的情况 如果字符位于两个单词之间 则可能会包含
  • 将文件上传到远程服务器

    我需要将文件从驻留在 Web 服务器中的 ASP NET C 页面上传到远程服务器 我设法使用以下代码从本地主机将文件上传到远程服务器 string serverPath xx xxx xx xx Folder FileUpload1 Fi
  • 使用索引或位图索引扫描对时间戳进行高效的 PostgreSQL 查询?

    在 PostgreSQL 中 我的日期字段上有一个索引tickets桌子 当我将领域与now 查询非常有效 explain analyze select count 1 as count from tickets where updated
  • 多个 Mobilefirst-Server 工件并发部署

    我使用批处理过程来部署 MFP v7 工件 wlapp 和适配器 该过程基于 worklight ant deployer jar 中定义的标准 ant 任务 MFP 环境在 WAS 单元上运行 并由管理多个 WLRuntime 的单个 A
  • xpath 表达式中的属性和 count()

    给定以下 XML 文件 a b b a
  • 如何使用python docx获取word文档中文本的实际样式

    我正在使用 python docx 库来阅读MS word文件 docx 当我阅读段落时 我使用字体函数来获取所有样式属性 但有时它会给None对于字体大小属性 有什么方法可以获取段落包含的实际字体大小 下面给出了我用来解析段落的示例代码
  • Java LineNumberTable:条目说明

    如果我反汇编我的类文件 我会得到以下形式的 LineNumberTables LineNumberTable line 204 0 line 205 9 line 208 57 line 209 63 line 210 72 line 21