clion除錯php擴充套件
阿新 • • 發佈:2019-02-18
除錯原理:將父程序作為監聽程序,子程序執行程式程式碼,這樣所有的訊號都需要經過父程序,所以也就可以控制除錯了.
除錯的必要的幾個因素:
1. 有除錯符號的可執行檔案,類似 gcc -g aa.c出來的a.out
2. 能找到原始碼檔案,也就是aa.c檔案,php原始碼也是如此.
3. 滿足以上兩個條件,就可以順利除錯,理解這點很重要
只有自己親手實踐了,才知道是如此的簡單。先理解如何愉快的除錯,才是開發擴充套件的第一步,除非你不想深入學習。
- 下載好php原始碼包,然後編譯安裝debug版本的php。
- 寫一個簡單的擴充套件。
- 將擴充套件程式碼匯入到clion中,記住只是擴充套件程式碼。
- 配置CMakeLists.txt檔案,從php原始碼中匯入。
- 配置gdb執行環境,deubg,跑起來
安裝
sudo ./configure --prefix=/usr/local/php7_debug --enable_debug
生成擴充套件
sudo ./ext_skel --extname=lion
clion匯入擴充套件原始碼
clion->import project from sources
引入php原始碼當中的標頭檔案
cmake_minimum_required(VERSION 3.7)
project(lion)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES
lion.c
php_lion.h)
add_executable (lion ${SOURCE_FILES})
#定義php原始碼路徑,這裡根據自己的真實路徑來更改
set(PHP_SOURCE /usr/local/src/php-7.1.4)
#引入php需要的擴充套件原始碼,這裡也是根據自己需要的來更改
include_directories(${PHP_SOURCE}/main)
include_directories(${PHP_SOURCE}/Zend)
include_directories(${PHP_SOURCE}/sapi)
include_directories(${PHP_SOURCE}/pear)
include_directories(${PHP_SOURCE} )
add_custom_target(makefile COMMAND sudo /usr/local/phpdebug/bin/phpize && ./configure --with-php-config=/usr/local/phpdebug/bin/php-config && make
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
clion配置中如此設定
好了,跑吧,讓程式乖乖的停在任意斷點.
如何除錯php原始碼呢?
vscode除錯php核心
vscode是一個非常輕量級的編輯器,微軟的良心之作,今天就用他來開發和除錯php的核心或者擴充套件非常的方便。
- 安裝c/c++外掛
- 配置lanunch.json和tasks.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "php_core_haha",
"type": "cppdbg",
"request": "launch",
"program": "/usr/local/phpdebug/bin/php",
"args": ["/Users/lion/wwwroot/php/aa.php"],
"stopAtEntry": false,
"cwd": "${workspaceRoot}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
"preLaunchTask": "php_ext_task"
}
]
}
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"taskName": "php_ext_task",
"type": "shell",
"command": "cd /usr/local/src/php-7.1.4/ext/lion && sudo /usr/local/phpdebug/bin/phpize && ./configure --with-php-config=/usr/local/phpdebug/bin/php-config && make",
"problemMatcher": [
"$gcc"
]
}
]
}
成功後圖片