visual studio codeでapache httpd 2.4をデバッグする
virtualboxとvagrantを使用してcentos7の仮想環境を構築しvisual studio codeで
apache httpd 2.4をデバッグしてみたいと思います。
ホストオンリーアダプタを使用し、仮想環境のipアドレスを固定するため、 virtualbox側で ホストネットワークマネージャーの設定を行います。
Vagrant ファイル
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.hostname = "apache-test" config.vm.box = "centos/7" config.vm.network "private_network", ip: "192.168.56.12" config.vm.provider "virtualbox" do |vb| vb.cpus = 4 vb.gui = true vb.memory = 1024 * 8 end config.vm.provision "shell", inline: <<-SHELL sudo yum update -y SHELL end
作成したVagrantファイルから仮想環境を作成します。
ホスト
$ vagrant up
起動処理が完了したらログインをし、GNOME Desktopをインストールします。
ホスト
$ vagrant ssh
ゲスト
$ sudo yum group install "GNOME Desktop"
デスクトップを起動させます。(VirtualBoxのGUIから行います)
ゲスト
$ startx
デスクトップが立ち上がったところで、必要なモジュール群をインストールしていきます。
ゲスト
$ sudo yum install gcc gdb apr-devel apr-util-devel pcre-devel
visual studio code
rpmパッケージをダウンロードし、yumでインストールします。
ゲスト
$ sudo yum install code-xxxx.rpm
apache httpd
apacheのサイトからソースコードをダウンロードし、インストールしていきます。
ゲスト
$ tar -zxvf httpd-2.4.41.tar.gz $ cd httpd-2.4.41.tar.gz $ CFLAGS="-g" ./configure --prefix=/usr/local/apache24/ --with-mpm-prefork $ make $ sudo make install
apache httpd2.4のインストールが完了しました。
次に、apacheのconfをテスト用に編集します。
/usr/local/apache24/conf/httpd.confに追記
SeverName apache-test:80 # 462行目コメント解除 Include conf/extra/httpd-mpm.conf
テスト用に子プロセスが1つしか立ち上がらないように修正します。
/usr/local/apache24/conf/extra/httpd-mpm.conf 28行目あたり
<IfModule mpm_prefork_module> StartServers 1 MinSpareServers 1 MaxSpareServers 1 MaxRequestWorkers 1 MaxConnectionPerChild 100 </IfModule>
コンパイル時にmpmをpreforkで指定しているのでpreforkの部分のみ書き換えます。
他のmpmを使用している場合は該当の部分を修正します。
以上でapacheの設定は完了です。
apacheを起動し、子プロセスのプロセスIDを確認しておきます。
ゲスト
# 起動 $ sudo /usr/local/apache24/bin/httpd # プロセス確認 # $ ps auxf | grep httpd root 18030 0.0 0.0 74668 2108 ? Ss 18:26 0:00 /usr/local/apache24/bin/httpd daemon 18031 0.0 0.0 76752 2132 ? t 18:26 0:00 \_ /usr/local/apache24/bin/httpd
18031が子プロセスのIDです。
次にvisual studio codeの設定を行います。 C/C++のプラグインを入れます。 デバッグメニューからlaunch.jsonを作成し、下記の内容に編集します。
{ "version": "0.2.0", "configurations": [ { "name": "(gdb) Attach", "type": "cppdbg", "request": "attach", "program": "/usr/local/apache24/bin/httpd", "processId": "18031", // ← apacheの子プロセスID "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }