记一次编译 debug 版本的 python 3.12.11 的过程
0. 系统环境
docker image: nvidia/cuda:12.6.3-devel-ubuntu22.04
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
python branch: v3.12.11
1. 容器中配置环境
创建启动容器:
sudo docker run --gpus all -it \
--name py_debug_03 \
-v /home/hanmeimei/ex_cudaq_py/tmp03:/root/tmp03 \
-v /home/hanmeimei/.ssh:/root/.ssh \
nvidia/cuda:12.6.3-devel-ubuntu22.04
安装依赖:
# apt update
# apt install zlib1g-dev libncurses5-dev \
libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
libreadline-dev libffi-dev libbz2-dev liblzma-dev# apt-get install -y libexpat1-dev
# apt install pkg-config
源码安装 mpdecimal:
$ wget https://www.bytereef.org/software/mpdecimal/releases/mpdecimal-2.5.1.tar.gz
$ tar -xzf mpdecimal-2.5.1.tar.gz
$ cd mpdecimal-2.5.1### 配置、编译和安装
$ ./configure --prefix=/usr/local
$ make -j$(nproc)
# make install
2. 下载配置编译安装 python (debug)
下载 cpython:
git clone https://github.com/python/cpython.git
cd cpython/
git checkout v3.12.11
配置编译:
./configure --enable-shared --enable-ipv6 --with-ensurepip=install --with-system-expat --with-system-ffi --with-system-libmpdec --enable-loadable-sqlite-extensions --with-dbmliborder=bdb:gdbm --with-computed-gotos --without-ensurepip --with-address-sanitizer --prefix=/usr --with-pydebug
debug版本,主要是其中的选项: --with-pydebug
$ make -j
# make install
3. 尝试调试
启动调试:
$ gdb python3
(gdb) set args ./hello.py
(gdb) start
这样会进入 python 解释器的 main() 函数,可以开始调试。
效果上这样:
如果想要debug 自己编写的 python 包的 cpp 扩展代码的话,可以从这里开始着手。