Debugging PHP Extensions

GDB, or the GNU Project Debugger, allows you to debug a program while it is executing. GDB can start a program, stop it on specified conditions, examine the execution environment when the program is stopped and allow you to change things inside the running program itself.

GDB Reference Documentation

Configuring GDB

Let’s get started by changing to the php-src directory

1
$ cd ~/php-src

The .gdbinit script is provided with the PHP source distribution. By copying this file to the home directory, gdb will always load this file when it starts.

1
$ copy .gdbinit ~

Alternatively you can load the script into gdb at runtime:

1
(gdb) source /home/vagrant/php-src/.gdbinit

Mehr lesen

docker常用命令

查看docker信息(version、info)

1
2
3
4
5
# 查看docker版本
$docker version
# 显示docker系统的信息
$docker info

对image的操作(search、pull、images、rmi、history)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 检索image
$docker search image_name
# 下载image
$docker pull image_name
# 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker images
# 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents
$docker rmi image_name
# 显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker history image_name

Mehr lesen

进程间通信(IPC)

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。

管道

管道,通常指无名管道,是 UNIX 系统IPC最古老的形式。

特点

  • 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
  • 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
  • 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

原型

1
2
#include <unistd.h>
int pipe(int fd[2]); // 返回值:若成功返回0,失败返回-1

当一个管道建立时,它会创建两个文件描述符:fd[0]为读而打开,fd[1]为写而打开。如下图:

Mehr lesen

nginx 直接在配置文件中切割日志

直接在nginx配置文件中,配置日志循环,而不需使用logrotate或配置cron任务。需要使用到$time_iso8601 内嵌变量来获取时间。$time_iso8601格式如下:2016-01-05T18:12:02+02:00。然后使用正则表达式来获取所需时间的数据。

按天切割日志

1
2
3
4
5
6
7
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log /data/logs/nginx/ng-$year-$month-$day-access.log;

Mehr lesen

nginx 内置变量

内置变量存放在 ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的。

Mehr lesen