Yun Dou

Results 98 comments of Yun Dou

> 最小复现demo,参见这个issue([crazywhalecc/static-php-cli#460](https://github.com/crazywhalecc/static-php-cli/issues/460)) > > ``` >

@avriltank 你可以试试环境变量`USE_ZEND_ALLOC=0` 然后跑一下程序,看他core不

> USE_ZEND_ALLOC=0一样,我感觉是hook那里导致的,特别是拼接phar的时候,容易有问题。我后边参考你的方式,在windows下全部用resource实现了,一个类似的东西。 @avriltank 问题有俩 zend_mm_heap corrupt 是**内存错误**(例如野指针,缓冲区溢出之类的问题)不是内存泄露,USE_ZEND_ALLOC=0会关掉zend内存池,(p)emalloc全走malloc,如果有内存错误就会直接segv炸了,理论上来说 zend_mm_heap corrupt代表了关闭zend内存池后的segv 关于内存泄露,首先单纯内存泄露不会报zend_mm_heap corrupt。在micro中有那么俩变量是全生命周期的,不能算作内存泄漏,除此之外那个文件名的泄露我也修了, 但没推到easysoft的上游(等lwmbs完成一次完整构建验证没问题了再推) 你可以在你的micro 源码上打这个patch: https://github.com/dixyes/phpmicro/commit/9d84d145621b7ac869cf97c16e3db93c1d589377.patch 来看看是不是解决了这个内存泄露,但我觉得改变不了zend_mm_heap corrupt P.S. 如果configure参数制定了--enable-debug的话,漏内存的zend内存池报错大概长这样: ```text ======= memory leak detected ======== balabala ```

> 我将所有必备文件打包为静态库和pdb文件了,https://www.123pan.com/s/lKQijv-RXGO.html 您只需要每次编译带上这几个库就行,编译直接build.bat即可,最小main代码, > > ```c > typedef struct _zend_module_entry zend_module_entry; > typedef enum { > SUCCESS = 0, > FAILURE = -1, /* this MUST stay a negative number,...

> 上边应该带pdb文件的,你是要官方的php的编译方式的pdb文件? 我hide了一些comment,太长了 有点碍事了 没有php源码的pdb啊 abort是在php的栈里的 但这部分无了

我开了debug 跑那个php也没问题 那么问题可能是 1. lwmbs有魔法 -> 换lwmbs的二进制试一试 2. 我的大refactor不知不觉修了这个问题 -> rebase下你的micro到我的fork https://github.com/dixyes/phpmicro 3. 你的构建系统哪里写歪了,导致了两次构建的lib ABI不匹配 -> 检查是不是用了不同版本的php头/lib 然后用PHP官方构建系统跑一下 4. spc有魔法 -> 用PHP官方构建系统跑一下

> 3的问题我全部用的libcmtd,不是libcmt,4我可以尝试下,这个issule先留着,我这几天忙完实验报告后,好好研究下php的源码 不是MT MTd这种CRT的不匹配 是各种lib的ABI CRT不匹配直接就报错了

在Ventura上无法复现, 我还没更Sonoma,我的测试步骤: ```bash git clone https://github.com/php/php-src git clone https://github.com/dixyes/phpmicro sapi/micro ./buildconf --force export PATH=/opt/homebrew/Cellar/bison/3.8.2/bin:$PATH ./configure --disable-all --disable-cli --disable-cgi --disable-phpdbg --enable-micro --enable-debug make micro -j8 ./sapi/micro/micro.sfx # 没问题 cat > define.php...

> 可以解决了,把php_micro.c下边代码删了, > > ```c > if (SUCCESS == zend_hash_str_del(EG(zend_constants), "PHP_BINARY", sizeof("PHP_BINARY") - 1)) { > dbgprintf("remake pb constant\n"); > zend_ini_entry *pbentry = NULL; > if (NULL != > (pbentry...

像一般的扩展in-tree构建一样,你可以这么来构建带某个扩展的micro.sfx: Like common extension in-tree build, you can build micro.sfx with some extension: ```bash # 在php源码目录 / at php source dir # clone swoole to ext/swoole / clone swoole到ext/swoole git...