Include line numbers in all of OPcache's debug dumps of bytecode
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
這個 Issue 還沒有評估資料。
描述
Description
opcache.opt_debug_level lets the CLI SAPI dump the bytecode of a file without executing it, for instance:
php -d opcache.enable_cli=1 -d opcache.opt_debug_level=0x10000 -r 'opcache_compile_file("file.php");'
For tools that need to know which source lines carry opcodes, the line number of each opline is essential. Code coverage is an example: whether a line is executable depends on decisions the compiler makes (whether a match expression is compiled to a jump table, whether constants are substituted, ...), see sebastianbergmann/php-code-coverage#1380. Compiling a file with opcache_compile_file() and reading the line numbers from the dump would answer that question for the bytecode that actually runs, without executing the file and without re-implementing the compiler's decisions.
Current state
zend_dump_op_array() supports ZEND_DUMP_LINE_NUMBERS, which prefixes each opline with Lnnnn (phpdbg's -p uses it). The dumps that OPcache emits for opcache.opt_debug_level pass hard-coded flags to it:
- PHP 8.4 and PHP 8.5: no dump includes line numbers, and there is no way to request them.
- PHP 8.6: the fix for GH-18985 (07d308a0deb) introduced
ZEND_DUMP_LINE_NUMBERS_PASSTHRU(bit 30,0x40000000). It adds line numbers to the "before optimizer" dump (opcache.opt_debug_level=0x40010000), but not to any other dump.
With this file (hooks.php, any file works):
<?php declare(strict_types=1);
final class Temperature
{
public float $celsius = 0.0 {
set {
if ($value < -273.15) {
throw new ValueError('Below absolute zero');
}
$this->celsius = $value;
}
}
}
opcache.opt_debug_level=0x40010000 (before optimizer) on PHP 8.6.1-dev:
Temperature::$celsius::set:
L0004 0000 CV0($value) = RECV 1
L0006 0001 T1 = IS_SMALLER CV0($value) float(-273.15)
L0006 0002 JMPZ T1 0007
L0007 0003 T2 = NEW 1 string("ValueError")
...
opcache.opt_debug_level=0x40020000 (after optimizer) on PHP 8.6.1-dev:
Temperature::$celsius::set:
0000 CV0($value) = RECV 1
0001 T1 = IS_SMALLER CV0($value) float(-273.15)
0002 JMPZ T1 0007
0003 T1 = NEW 1 string("ValueError")
...
Request
- Honor
ZEND_DUMP_LINE_NUMBERS_PASSTHRUin all dumps thatopcache.opt_debug_levelcontrols, not only in the "before optimizer" dump: at least the "after optimizer" dumps (inzend_optimize()and the one emitted after the call graph pass inzend_optimize_script()), and ideally also the "after pass N", block pass, and DFA dumps. When the optimizer is enabled, the optimized bytecode is what runs and what extensions such as Xdebug and PCOV observe, so the "after optimizer" dump is the one that tells which lines carry opcodes at run time. One way to implement this would be to derive the additional dump flags once fromctx->debug_leveland pass them to everyzend_dump_op_array()call of the optimizer. - Document the bit together with the other values of
opcache.opt_debug_level. I could not find it inphp.ini-development,UPGRADING, orNEWS(which only mentions the fix for GH-18985).
- 主要語言
- C
- 星號
- 41.8k
- 分支
- 8.5k
- 平均合併
- 2 天 12 小時
- 30 天內合併 PR
- 137
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
php/php-src 的其他 Issue
-
SNMP accepts malformed remote ports可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 2/5 半天 新手友好度 62/100
維護者通常 1 天內回覆
-
Bug Status: Needs Triage
難度 2/5 1-3 小時 新手友好度 64/100
維護者通常 1 天內回覆
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFF可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 2/5 1-3 小時 新手友好度 76/100
維護者通常 1 天內回覆
-
Bug Status: Needs Triage
難度 2/5 1-3 小時 新手友好度 62/100
維護者通常 1 天內回覆
-
Feature Status: Needs Triage
難度 2/5 1-3 小時 新手友好度 73/100
維護者通常 1 天內回覆
相似的 Issue
-
enhancement good first issue help wanted
難度 2/5 1-3 小時 新手友好度 82/100
-
bug multiplayer status: planned
難度 2/5 1-3 小時 新手友好度 67/100
ChupathingyCE/chupathingyce#851 ·
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 73/100
HigherOrderCO/Bend#2104 ·
-
research-radar
難度 2/5 1-3 小時 新手友好度 68/100
維護者通常 1 天內回覆
-
good first issue help wanted program
難度 2/5 1-3 小時 新手友好度 83/100
hffgzktbcc-blip/ounce-core#297 ·
維護者通常 1 天內回覆