- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我反汇编我的类文件,我会得到以下形式的 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
我知道这些表包含调试信息,并且第一个条目是类文件中的某种位置,而第二个条目是源代码中的某个位置。我想知道:
源代码行号是相对的还是绝对的?如果我绝对地解释它们,有些指向多行注释的中间,这似乎很奇怪。
同一源代码的两种不同编译仅在一个字节上有所不同:条目“第 216: 90”被“第 215: 90 行”替换。我试图找出造成这种情况的原因。有什么想法吗?
最佳答案
将常识应用于您正在阅读的内容。当您正确阅读规范时,即存储在 LineNumberTable
属性数组中的第一个数字是字节码偏移量,第二个数字是行号,这并不意味着您使用的反汇编程序将也按该顺序打印它们。
有两个指标表明订单已被调换
第一个数字的范围是 204 到 253,这对于类声明中某个方法的源代码行来说是合理的,而第二个数字的范围是从 0
到 329
,这对于方法内从零开始的字节码偏移量来说是合理的。
相比之下,方法的行号不太可能以零开头,因为源代码通常以 package
和 import
声明开头。如果方法代码的前 203 个字节没有关联的源代码行,这也是不寻常的(尽管这并非不可能)。
这两个指标加起来都相当强劲。那么,观察到的变化是相当合理的。显然,生成的代码没有改变。但由于没有关于行号和生成的代码如何关联的标准,因此可能会存在细微的差异,具体取决于编译器版本,例如当一个表达式跨越多行,但只生成一条指令时,或者当编译器试图避免过多的行号表时。
例如代码
foo(
);
仅生成一条指令(如果foo()
是static
),并且未定义两行中的哪一行与该指令关联。当它是一个实例方法时,它将由两条指令组成,但将它们表示为不同的行号是有争议的,因为在调试期间介入它们之间没有多大帮助。但这是编译器的决定。还带有
foo(
null,
1,
true
);
将每个常量参数插入堆栈需要指令序列中的一个字节,而将不同的行号与每条指令相关联则每条指令需要另外四个字节。由于推送这些常量不太可能失败,因此跟踪它们没有什么意义,编译器可能决定将整个序列与调用指令的唯一行号相关联。由于此决定取决于实际的编译器,甚至可能取决于其当前配置,因此重新编译可能会更改关联。
另一个区别是编译器如何处理合成方法,例如桥接方法和内部类访问器。到目前为止,我已经看到,它们仅与零相关联,与周围类声明的开头以及它们委托(delegate)的实际目标成员的开头相关联。
关于Java 行号表 : Entry explanation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41104416/
Eclipse 提示此代码“类型参数 Entry 隐藏了类型 Map.Entry”: import java.util.Map.Entry; public class Test { stat
这两个for语句是等价的。 import java.util.Map; import java.util.Map.Entry; for (Map.Entry entry: map.entrySet()
我想在 python 字典中添加一个键/值,它依赖于现有的键/值。示例 x = {} x["length"] = 12 x["volume"] =x["lenght"] * 10 行得通;但是有没有可
我使用 NuGet 将我的 EntityModel 升级到版本 4.3。 现在我想更改我的 EntityObject.State,但找不到 .Entry() 方法。 当前状态是已删除。 这就是我想要做
我是 Java 新手,正在使用 HashMap 在 Mac 上编写 Java。 但是我遇到了一个问题,找不到答案 import java.util.Map; import java.util.Hash
我正在切换一个小应用程序(Win 7/64 上的 Python 2.7.3/32)来使用 ttk,但我在使 ttk.Entry 按照 tk.Entry 的方式工作时遇到问题;当我设置其内容时,ttk.
为什么我需要在 i.next(); 前面加上 (Map.Entry) ?为什么我不能只有 Map.Entry m = i.next();? 对不起。它是一个 HashMap。 最佳答案 因为它显然不是
我的 xPage SSJS 失败: viewEntry = view.getNext(viewEntry); 有错误 Notes error: Entry not found in index 我确实
我正在使用 DataTable在我的申请中。 我想隐藏左下角的细节,我该怎么做? “显示 1,657 个条目中的 1 到 10 个(从 9,044 个条目中筛选出来)” 这是我的设置: $('#inv
我有两列,一个时间戳和一个已选择卡片的数字。 card added 1 2016-09-23 13:48:48 3 2016-09-23 13:48:48 1
我正在使用 Entity Framework 4.1,并且我有我的 DbContext Override SaveChanges 来审核属性更改。从“GetEntryValueInString”返回空
我正在使用 Tkinter 在 Python 3 上编写 GUI,但每次使用 Entry() 时,我都会收到名称错误。 我尝试了一个更简单的代码版本,(写在下面),但它仍然导致了 NameError:
我刚刚创建了一个插入方法来对数组进行排序,这是我在该方法中完成的代码; public static void insertionSort (Entry[] array2){ for (int
使用这个例子1对于 n:n 关系: (来源:tekstenuitleg.net) 设置主要或主要多对多字段的最佳方法是什么?示例:假设我想将经销商“Devrolijke drinker”(ID AB9
是否可以使用 Entry 通过 AsRef 获取值的 API , 但用 Into 插入它? 这是工作示例: use std::collections::hash_map::{Entry, HashMa
是否可以使用 Entry 通过 AsRef 获取值的 API , 但用 Into 插入它? 这是工作示例: use std::collections::hash_map::{Entry, HashMa
是否可以使用 Entry 通过 AsRef 获取值的 API , 但用 Into 插入它? 这是工作示例: use std::collections::hash_map::{Entry, HashMa
表定义: CREATE TABLE PositionalDataNGS ( Date DATE, Time TIME(3) , X FLOAT(5), Y FLOAT(5), D FLOAT(5) ,
我的平台: PHP 和 MySQL 我这里有什么: 我有 4 个表,分别是“books”、“book_type”、“book_categories”、“all_categories”。 我想做什么:
I am using MySQL 5.1.56, MyISAM. My table looks like this:我使用的是MySQL 5.1.56,MyISAM。我的桌子是这样的: CR
我是一名优秀的程序员,十分优秀!