C拡張機能のデバッグ#
Pandasは、パフォーマンスを最適化するために、CythonおよびC/C++の拡張モジュールを使用しています。残念ながら、標準のPythonデバッガーではこれらの拡張機能にステップインすることはできません。Cython拡張機能はCythonデバッガーでデバッグでき、C/C++拡張機能はプラットフォームのコンパイラーに付属しているツールを使用してデバッグできます。
C/C++の経験がほとんどない、または全くないPython開発者にとって、これは気の遠くなるような作業に見えるかもしれません。コア開発者のWill Aydは、標準のPythonデバッガーからこれらの他のツールへとあなたを導くのに役立つ3部構成のブログシリーズを書いています。
ローカルでのデバッグ#
デフォルトでは、pandasをソースからビルドするとリリースビルドが生成されます。開発ビルドを生成するには、次のように入力します。
pip install -ve . --no-build-isolation --config-settings=builddir="debug" --config-settings=setup-args="-Dbuildtype=debug"
注
conda環境は、リリース生成を目的としたフラグでCFLAGS/CPPFLAGSを更新します。condaを使用している場合、デバッグのために最適化がオフになっていることを確認するためにCFLAGS="$CFLAGS -O0"およびCPPFLAGS="$CPPFLAGS -O0"を設定する必要があるかもしれません。
builddir="debug"を指定すると、すべてのターゲットがビルドされ、プロジェクトルートを基準としたdebugディレクトリに配置されます。これにより、デバッグアーティファクトとリリースアーティファクトを分離することができます。もちろん、別のディレクトリ名を選択したり、ビルドタイプを分離する必要がない場合は完全に省略することもできます。
Dockerの使用#
デバッグプロセスを簡素化するために、pandasはPythonのデバッグビルドとgdb/CythonデバッガーがプリインストールされたDockerイメージを作成しました。このイメージにアクセスするにはdocker pull pandas/pandas-debugを実行するか、tooling/debugフォルダーからローカルでビルドすることができます。
その後、次のようにpandasリポジトリをこのイメージにマウントできます。
docker run --rm -it -w /data -v ${PWD}:/data pandas/pandas-debug
イメージ内で、mesonを使用してpandasをビルド/インストールし、次のようなコマンドを使用してビルド成果物をdebugフォルダーに配置できます。
python -m pip install -ve . --no-build-isolation --config-settings=builddir="debug" --config-settings=setup-args="-Dbuildtype=debug"
cygdbを使用する予定がある場合、そのアプリケーションに必要なファイルはビルドフォルダー内に配置されます。そのため、最初にビルドフォルダーにcdしてから、そのアプリケーションを起動する必要があります。
cd debug
cygdb
デバッガー内では、cygdbコマンドを使用してCython拡張機能をナビゲートできます。
エディタのサポート#
Mesonビルドシステムはコンパイルデータベースを自動的に生成し、ビルドディレクトリに配置します。多くの言語サーバーやIDEは、この情報を使用して、入力時にコード補完、定義へのジャンプ、エラーチェックのサポートを提供できます。
各言語サーバー/IDEがコンパイルデータベースを探す方法は異なる場合があります。不明な場合は、ビルドディレクトリ内のコンパイルデータベースを指すプロジェクトルートにシンボリックリンクを作成することをお勧めします。ディレクトリ名としてdebugを使用したと仮定すると、次のように実行できます。
ln -s debug/compile_commands.json .