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

无用的测试指令?

程凯定
2023-03-14
问题内容

作为Java程序的JIT编译结果,我得到了以下程序集列表。

mov    0x14(%rsp),%r10d
inc    %r10d

mov    0x1c(%rsp),%r8d
inc    %r8d

test   %eax,(%r11)         ; <--- this instruction

mov    (%rsp),%r9
mov    0x40(%rsp),%r14d
mov    0x18(%rsp),%r11d
mov    %ebp,%r13d
mov    0x8(%rsp),%rbx
mov    0x20(%rsp),%rbp
mov    0x10(%rsp),%ecx
mov    0x28(%rsp),%rax

movzbl 0x18(%r9),%edi     
movslq %r8d,%rsi

cmp    0x30(%rsp),%rsi
jge    0x00007fd3d27c4f17

我对test指令的理解在这里是没有用的,因为测试的主要思想是

标记SF,ZF,PF被修改,而AND的结果被丢弃。

在这里,我们不使用这些结果标志。

是JIT中的错误还是我错过了什么?如果是,最好的报告地点在哪里?谢谢!


问题答案:

那一定是线程本地握手poll。看%r11从哪里读取。如果是从%r15(线程本地存储)偏移量读取的,那就是家伙。在这里查看示例:

  0.31%  ↗  ...70: movzbl 0x94(%r9),%r10d    
  0.19%  │  ...78: mov    0x108(%r15),%r11  ; read the thread-local page addr
 25.62%  │  ...7f: add    $0x1,%rbp          
 35.10%  │  ...83: test   %eax,(%r11)       ; thread-local handshake poll
 34.91%  │  ...86: test   %r10d,%r10d
         ╰  ...89: je     ...70

它不是没有用的,一旦将防护页标记为不可读,就会导致SEGV,并将控制权转移到JVM的SEGV处理程序。这是JVM安全点Java线程(例如用于GC)机制的一部分。

UPD:希望在这里有更多详细信息。



 类似资料:
  • Vue CLI 提供了预配置的单元测试和 e2e 测试安装。 如果你有兴趣为 *.vue 文件手动设置单元测试,请查询 @vue/test-utils 的文档,这份文档涵盖了对 mocha-webpack 或 Jest 的设置。

  • 问题内容: 我正在使用Jasmine编写AngularJS的指令测试,并与它们一起使用templateUrl:https : //gist.github.com/tanepiper/62bd10125e8408def5cc 但是,当我运行测试时,我得到了要点中包含的错误: 从我在文档中阅读的内容来看,我认为自己做得正确,但是事实并非如此-我在这里想念的是什么? 谢谢 问题答案: 如果您使用的是ng

  • 问题内容: 我有以下指令。 当我测试它时: 我收到一个错误消息,说对象没有addWiki方法。我尝试调试它,并且在测试过程中未调用链接函数。我怀疑这就是为什么addWiki方法不属于范围的原因。有人知道为什么我会收到此错误吗? 顺便说一句,在指令的链接函数中添加一些逻辑是正常的做法,因为它本身就是Controller?因为看代码我知道这就是为什么我在做。 问题答案: 您需要加载该模块包含您的指示,

  • 测试 测试业务逻辑 GET /users/:id 这个业务是根据用户的 id 从数据库取到该用户数据,如果用户不存在则返回404和提示语句。 创建 User POST /users 接受 JSON 格式的数据。 创建成功返回 201 - Created。 发生错误返回 500 - Internal Server Error。 获取 User GET /users/:email 获取成功返回 200

  • 问题内容: 如果我有一个指令可以响应示波器上特定属性的状态,并且我想在测试中更改该属性并验证其是否正确响应,那是进行此更改的最佳方法? 我已经看过这两种模式: 和 它们之间有什么区别,哪个更好,为什么? 问题答案: 会在当前范围及其所有子级上触发监视程序。将评估传递的函数并运行。 第一个更快,因为它需要评估观察者的当前范围及其子级。第二个比较慢,因为它需要评估观察者及其所有子作用域。 当其中一个观

  • 问题内容: 因此,我确实看到了另一个问题:如何在指令UT中模拟所需的指令控制器,这基本上是我的问题,但似乎该线程的答案是“更改设计”。我想确保没有办法做到这一点。我有一个指令声明一个由子指令使用的控制器。我现在正尝试为children指令编写茉莉花测试,但由于它们依赖于控制器,因此我无法让它们在测试中进行编译。看起来是这样的: 子指令: 茉莉花测试: 我没有办法用茉莉花测试子指令吗?如果可以,我会