BitOne / php-meminfo

PHP extension to get insight about memory usage
MIT License
1.08k stars 78 forks source link

Some zvals are missing in memory dump for classes with the __debugInfo magic. #135

Open vtsykun opened 6 months ago

vtsykun commented 6 months ago

STR

1) Run script

<?php declare(strict_types=1);

namespace AAA;

unset($GLOBALS['_POST'], $GLOBALS['_COOKIE'], $GLOBALS['_FILES'], $GLOBALS['argv'], $GLOBALS['_GET'], $GLOBALS['_SERVER'], $GLOBALS['argc'], $GLOBALS['argv']);

class MTProtoBug
{
    private int $v = 1;
    private array $info = [];

    public function __debugInfo(): array
    {
        $vars = get_object_vars($this);
        unset($vars['info']);
        return $vars;
    }
}

$bug = new MTProtoBug();
\meminfo_dump(\fopen('/tmp/mem_dump.json', 'w'));

Actual result

{
  "header" : {
    "memory_usage" : 360456,
    "memory_usage_real" : 2097152,
    "peak_memory_usage" : 429360,
    "peak_memory_usage_real" : 2097152
  },
  "items": {
    "0x7fd6f746a140" : {
        "type" : "object",
        "size" : "72",
        "symbol_name" : "bug",
        "is_root" : true,
        "frame" : "<GLOBAL>",
        "class" : "AAA\\MTProtoBug",
        "object_handle" : "1",
        "children" : {
            "v":"0x7fd6f745ca40"
        }
    },
    "0x7fd6f745ca40" : {
        "type" : "int",
        "size" : "16",
        "is_root" : false
    }
}
}

Expect result

MTProtoBug->info must persist in the memory dump