SlideShare a Scribd company logo
12
Most read
13
Most read
16
Most read
© 2021 NTT DATA Corporation
VSCodeで作るPostgreSQL開発環境
2021年7月6日 第25回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ 技術開発本部
加藤 慎也
© 2021 NTT DATA Corporation 2
自己紹介
 名前
‒ 加藤 慎也 @ShinyaKato_
 所属
‒ 株式会社NTTデータ 技術開発本部
 経歴
‒ 入社2年目社員
‒ 第20回 PostgreSQLアンカンファレンス@オンラインで
「PostgreSQL初心者がパッチを提案してからコミットされるまで」を発表しました
‒ https://www.slideshare.net/nttdata-tech/postgresql-first-patch
‒ あたたかいコメントありがとうございました!
© 2021 NTT DATA Corporation 3
YouTubeチャンネル “NTT DATA Tech”
技術取り組み、活用情報を中心にお届けします
https://www.youtube.com/NTTDATATech
© 2021 NTT DATA Corporation 4
VSCodeで作るPostgreSQL開発環境
© 2021 NTT DATA Corporation 5
今回構築する環境のイメージ図
Windows 10
WSL
(Ubuntu 20.04)
PostgreSQL
VSCode
GUI
デバッグ
GDB
ブレークポイント
コールスタック
変数表示
動作環境
• Window 10
• 未確認ですがmacOSやLinuxでも構築できる
と思います
• WSL Ubuntu 20.04 LTS
• PostgreSQL 14 Beta 1
• GDB 9.2
• Visual Studio Code 1.57
© 2021 NTT DATA Corporation 6
モチベーション
 なぜVSCodeか?
‒ 個人的に一番使いやすい
‒ GUIで直感的に操作でき、習得コストが低い
 なぜデバッガを使うのか?
‒ PostgreSQLのような巨大なプログラムを目で追うのは大変
‒ 実際のコードの実行の流れを追うことによって、PostgreSQLの
動く仕組みが理解できる
‒ なので、PostgreSQLを開発する人だけでなく、PostgreSQL内部を
知りたい人にもおすすめ
© 2021 NTT DATA Corporation 7
準備 - WSLインストール
 Microsoft StoreからUbuntu 20.04 LTSをインストール
© 2021 NTT DATA Corporation 8
準備 - パッケージのインストール
 PostgreSQLのインストールに必要なパッケージ
 TAPテストに必要なパッケージをインストール
 GDBのインストール
$ sudo apt install gcc make flex libreadline-dev bison zlib1g-dev
$ sudo apt install gdb
$ sudo apt install libtest-simple-perl libtest-harness-perl libipc-
run-perl
© 2021 NTT DATA Corporation 9
準備 - PostgreSQLインストール
 ソースコードをダウンロードし、コンパイル、インストール
$ git clone http://git.postgresql.org/git/postgresql.git
$ cd postgresql
$ ./configure 
--enable-debug 
--enable-cassert 
--enable-tap-tests 
--prefix=/home/shinya/pgsql/master 
CFLAGS=-O0
$ make
$ make install
デバッグシンボル付きでコンパイル
アサーションチェックを有効
Perl TAPツールを使ったテストを有効
コンパイル時の最適化をオフ
インストール先を指定
デバッグしやすいように
オプションを指定する
© 2021 NTT DATA Corporation 10
準備 – PostgreSQL起動
 DBクラスタを作成し、PostgreSQL起動
$ cd /home/shinya/pgsql/master
$ bin/initdb –D data -–encoding=UTF8 –-no-locale
$ bin/pg_ctl –D data start
© 2021 NTT DATA Corporation 11
準備 - VSCodeインストール
 公式サイトからダウンロード、インストール
‒ https://azure.microsoft.com/ja-jp/products/visual-studio-code/
 以下の拡張機能をインストール
‒ Remote - WSL 0.56.5
‒ C/C++ 1.4.1
© 2021 NTT DATA Corporation 12
デバッグ手順
 Ctrl+Shift+Pでコマンドパレットを開き、
「Remote-WSL: New WSL Window」をクリック
 サイドバーの「Open Folder」をクリックし、
PostgreSQLをインストールしたフォルダを選択
 Ctrl+Shift+@でターミナルを起動
 PostgreSQLに接続
‒ $ bin/psql postgres
 バックエンドのプロセスIDを確認
‒ =# SELECT pg_backend_pid();
 F5を押しC++(GDB/LLDB)を選択すると、launch.jsonが作成される
 launch.jsonを記述し、F5を押すとデバッグが開始
© 2021 NTT DATA Corporation 13
launch.json
 デバッグ設定を記述
{
"version": "0.2.0",
"configurations": [
{
"name": "postgres",
"type": "cppdbg",
"request": "attach",
"program":
"${workspaceFolder}/bin/postgres",
"processId": 1172,
"MIMode": "gdb",
"miDebuggerPath":
"/usr/bin/gdb"
}
]
}
任意の名前を設定
デバッガのタイプを設定
プロセスをアタッチする場合、attachを設定
使用するデバッガ(gdbまたはlldb)を設定
プログラムの場所を設定
アタッチするプロセスのプロセスIDを設定
デバッガのパスを設定
© 2021 NTT DATA Corporation 14
launch.json(マルチプロセス)
 デバッグ設定を記述
{
"version": "0.2.0",
"configurations": [
{
"name": "postgres",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/bin/postgres",
"processId": 1172,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
},
{
"name": "checkpointer",
"type": "cppdbg",
"request": "attach",
"program": "${workspaceFolder}/bin/postgres",
"processId": 830,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
}
],
"compounds": [
{
"name": "postgres/checkpointer",
"configurations": ["postgres", "checkpointer"]
}
]
}
アタッチするプロセスの情報を記述
同時にデバッグするプロセスの名前を列挙
© 2021 NTT DATA Corporation 15
デバッグの開始
ブレークポイント
コールスタック
変数表示
ターミナル デバッグコンソール
F5:続行
F10:ステップオーバ
F11:ステップイン
Shift+F11:ステップアウト
© 2021 NTT DATA Corporation 16
ハマったところ
 プロセスにアタッチするのが失敗
‒ デフォルトではptraceシステムコールでプロセスにアタッチできないようになっている
‒ 一時的にアタッチできるようにする
‒ $ echo 0 > /proc/sys/kernel/yama/ptrace_scope
‒ 永続的にアタッチできるようにする
‒ /etc/sysctl.d/10-ptrace.conf の kernel.yama.ptrace_scope=0 に変更
 シグナルが送られてGDBが止まってしまう
‒ シグナルを無視するようにGDBを設定
‒ ~/.gdbinit に以下を書いておく
‒ handle SIGUSR1 nostop noprint pass
‒ handle SIGINT nostop noprint pass
© 2021 NTT DATA Corporation 17
まとめ
 VSCodeでPostgreSQLの開発をしましょう!
© 2021 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PDF
例外設計における大罪
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
例外設計における大罪
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)

What's hot (20)

PDF
PostgreSQLによるデータ分析ことはじめ
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
PDF
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
PDF
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
PPTX
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
Dockerからcontainerdへの移行
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PDF
PostgreSQLバックアップの基本
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
PDF
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
PostgreSQLによるデータ分析ことはじめ
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
YugabyteDBの実行計画を眺める(NewSQL/分散SQLデータベースよろず勉強会 #3 発表資料)
YugabyteDBを使ってみよう - part2 -(NewSQL/分散SQLデータベースよろず勉強会 #2 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Dockerからcontainerdへの移行
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PostgreSQLバックアップの基本
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
Azure Database for PostgreSQL 入門 (PostgreSQL Conference Japan 2021)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
Ad

Similar to VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料) (20)

PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PDF
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
PDF
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
PPTX
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
20190119 aws-study-pg-extension
PDF
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
Kof2016 postgresql-9.6
PDF
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
PDF
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
PDF
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
[db tech showcase Tokyo 2014] C31: PostgreSQLをエンタープライズシステムで利用しよう by PostgreS...
[C31] OSS-DB Exam Silver 技術解説セミナー by Ryota Watabe
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
20190119 aws-study-pg-extension
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
Kof2016 postgresql-9.6
PostgreSQLの新バージョン -PostgreSQL9.4- のご紹介
C27 基幹領域への適用におけるpostgre sqlの抱える課題 by 原嘉彦
PostgreSQL開発ことはじめ - 第27回しくみ+アプリケーション勉強会
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
Ad

More from NTT DATA Technology & Innovation (20)

PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)

VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2021 NTT DATA Corporation VSCodeで作るPostgreSQL開発環境 2021年7月6日 第25回PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 技術開発本部 加藤 慎也
  • 2. © 2021 NTT DATA Corporation 2 自己紹介  名前 ‒ 加藤 慎也 @ShinyaKato_  所属 ‒ 株式会社NTTデータ 技術開発本部  経歴 ‒ 入社2年目社員 ‒ 第20回 PostgreSQLアンカンファレンス@オンラインで 「PostgreSQL初心者がパッチを提案してからコミットされるまで」を発表しました ‒ https://www.slideshare.net/nttdata-tech/postgresql-first-patch ‒ あたたかいコメントありがとうございました!
  • 3. © 2021 NTT DATA Corporation 3 YouTubeチャンネル “NTT DATA Tech” 技術取り組み、活用情報を中心にお届けします https://www.youtube.com/NTTDATATech
  • 4. © 2021 NTT DATA Corporation 4 VSCodeで作るPostgreSQL開発環境
  • 5. © 2021 NTT DATA Corporation 5 今回構築する環境のイメージ図 Windows 10 WSL (Ubuntu 20.04) PostgreSQL VSCode GUI デバッグ GDB ブレークポイント コールスタック 変数表示 動作環境 • Window 10 • 未確認ですがmacOSやLinuxでも構築できる と思います • WSL Ubuntu 20.04 LTS • PostgreSQL 14 Beta 1 • GDB 9.2 • Visual Studio Code 1.57
  • 6. © 2021 NTT DATA Corporation 6 モチベーション  なぜVSCodeか? ‒ 個人的に一番使いやすい ‒ GUIで直感的に操作でき、習得コストが低い  なぜデバッガを使うのか? ‒ PostgreSQLのような巨大なプログラムを目で追うのは大変 ‒ 実際のコードの実行の流れを追うことによって、PostgreSQLの 動く仕組みが理解できる ‒ なので、PostgreSQLを開発する人だけでなく、PostgreSQL内部を 知りたい人にもおすすめ
  • 7. © 2021 NTT DATA Corporation 7 準備 - WSLインストール  Microsoft StoreからUbuntu 20.04 LTSをインストール
  • 8. © 2021 NTT DATA Corporation 8 準備 - パッケージのインストール  PostgreSQLのインストールに必要なパッケージ  TAPテストに必要なパッケージをインストール  GDBのインストール $ sudo apt install gcc make flex libreadline-dev bison zlib1g-dev $ sudo apt install gdb $ sudo apt install libtest-simple-perl libtest-harness-perl libipc- run-perl
  • 9. © 2021 NTT DATA Corporation 9 準備 - PostgreSQLインストール  ソースコードをダウンロードし、コンパイル、インストール $ git clone http://git.postgresql.org/git/postgresql.git $ cd postgresql $ ./configure --enable-debug --enable-cassert --enable-tap-tests --prefix=/home/shinya/pgsql/master CFLAGS=-O0 $ make $ make install デバッグシンボル付きでコンパイル アサーションチェックを有効 Perl TAPツールを使ったテストを有効 コンパイル時の最適化をオフ インストール先を指定 デバッグしやすいように オプションを指定する
  • 10. © 2021 NTT DATA Corporation 10 準備 – PostgreSQL起動  DBクラスタを作成し、PostgreSQL起動 $ cd /home/shinya/pgsql/master $ bin/initdb –D data -–encoding=UTF8 –-no-locale $ bin/pg_ctl –D data start
  • 11. © 2021 NTT DATA Corporation 11 準備 - VSCodeインストール  公式サイトからダウンロード、インストール ‒ https://azure.microsoft.com/ja-jp/products/visual-studio-code/  以下の拡張機能をインストール ‒ Remote - WSL 0.56.5 ‒ C/C++ 1.4.1
  • 12. © 2021 NTT DATA Corporation 12 デバッグ手順  Ctrl+Shift+Pでコマンドパレットを開き、 「Remote-WSL: New WSL Window」をクリック  サイドバーの「Open Folder」をクリックし、 PostgreSQLをインストールしたフォルダを選択  Ctrl+Shift+@でターミナルを起動  PostgreSQLに接続 ‒ $ bin/psql postgres  バックエンドのプロセスIDを確認 ‒ =# SELECT pg_backend_pid();  F5を押しC++(GDB/LLDB)を選択すると、launch.jsonが作成される  launch.jsonを記述し、F5を押すとデバッグが開始
  • 13. © 2021 NTT DATA Corporation 13 launch.json  デバッグ設定を記述 { "version": "0.2.0", "configurations": [ { "name": "postgres", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 1172, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" } ] } 任意の名前を設定 デバッガのタイプを設定 プロセスをアタッチする場合、attachを設定 使用するデバッガ(gdbまたはlldb)を設定 プログラムの場所を設定 アタッチするプロセスのプロセスIDを設定 デバッガのパスを設定
  • 14. © 2021 NTT DATA Corporation 14 launch.json(マルチプロセス)  デバッグ設定を記述 { "version": "0.2.0", "configurations": [ { "name": "postgres", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 1172, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", }, { "name": "checkpointer", "type": "cppdbg", "request": "attach", "program": "${workspaceFolder}/bin/postgres", "processId": 830, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb", } ], "compounds": [ { "name": "postgres/checkpointer", "configurations": ["postgres", "checkpointer"] } ] } アタッチするプロセスの情報を記述 同時にデバッグするプロセスの名前を列挙
  • 15. © 2021 NTT DATA Corporation 15 デバッグの開始 ブレークポイント コールスタック 変数表示 ターミナル デバッグコンソール F5:続行 F10:ステップオーバ F11:ステップイン Shift+F11:ステップアウト
  • 16. © 2021 NTT DATA Corporation 16 ハマったところ  プロセスにアタッチするのが失敗 ‒ デフォルトではptraceシステムコールでプロセスにアタッチできないようになっている ‒ 一時的にアタッチできるようにする ‒ $ echo 0 > /proc/sys/kernel/yama/ptrace_scope ‒ 永続的にアタッチできるようにする ‒ /etc/sysctl.d/10-ptrace.conf の kernel.yama.ptrace_scope=0 に変更  シグナルが送られてGDBが止まってしまう ‒ シグナルを無視するようにGDBを設定 ‒ ~/.gdbinit に以下を書いておく ‒ handle SIGUSR1 nostop noprint pass ‒ handle SIGINT nostop noprint pass
  • 17. © 2021 NTT DATA Corporation 17 まとめ  VSCodeでPostgreSQLの開発をしましょう!
  • 18. © 2021 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。

Editor's Notes

  • #4: 情報発信については、NTT DATA Tech という YouTubeチャンネルを開設しました。 10月に開催したNTTデータ テクノロジーカンファレンスの模様や 技術トピックの解説映像などを、順次公開していきます。 こちらもあわせてご覧ください。