PHP底层实现源码阅读笔记(3)

1、用这里的方法在Windows下编译PHP的源代码:http://my.oschina.net/u/134395/blog/539378

注意:要编译debug版本, 也就是该文中的第16步要用:configure --disable-all --enable-cli --enable-debug

2、编译好的debug版本位于:E:\LearnPHP7\dev\vc14\x86\src\Debug_TS

3、在E:\LearnPHP7\test下新建一个php文件:test01.php 。其中的PHP代码是

<?php

echo date("Y-m-d");

4、用Visual Studio Community 2015 新建一个Visual C++的【空项目】。

PHP底层实现源码阅读笔记(3)_第1张图片

5、打开创建项目的属性,切换到调试页。

把【命令】设置为:E:\LearnPHP7\dev\vc14\x86\src\Debug_TS\php.exe

把【命令参数】设置为:E:\LearnPHP7\test\test01.php

PHP底层实现源码阅读笔记(3)_第2张图片

这么设置的意思是:在VS 调试器作为宿主环境下,用编译的debug版本的 php.exe来执行 test01.php这个脚本文件。

6、用Visual Studio打开文件:E:\LearnPHP7\dev\vc14\x86\src\ext\date\php_date.c

因为PHP脚本中调用了PHP函数date, 而date的实现代码就在: php_date.c 中( PHP 7.0.0的代码是第1372行),在该行设置断点。

PHP底层实现源码阅读笔记(3)_第3张图片

7、用VS开始调试 ( F5 ) ,就会在刚才设置的断点处停下来。

下图是成功调试后的调用堆栈图

PHP底层实现源码阅读笔记(3)_第4张图片

上面只是举个例子, 总体的方法就是:

1、用VS 调用php.exe

2、在对应的C代码中设置断点

3、然后就可以一步一步跟踪代码了

做这些对阅读代码有什么用途?

我会用来跟踪代码运行时的数据结构,借助VS强大的调试功能,能有效地帮助我理解各种数据结构。

QQ群:108111233


你可能感兴趣的:(PHP底层实现源码阅读笔记(3))