如何调试 PySide6 应用程序的 C++ 扩展?#
在调试 PySide 代码时,通常会希望同时调试 PySide 模块的相应 C++ 扩展。这是通过将调试器附加到 Python 解释器来完成的。在本教程中,我们将向您展示如何构建 Qt 6,使用构建的 Qt 6 构建 PySide6,然后在 Qt Creator 或 VSCode 中开始调试过程。
在 VSCode 中,您应该能够看到 C++ 和 Python 的联合调用堆栈。不幸的是,在 Qt Creator 中,您只能调试 PySide 模块的本地 C++ 代码;也就是说,您无法在 Python 代码中设置断点。
注意
本教程是在 Ubuntu 20.04 LTS 上创建的,调试器为 GDB。因此,本教程主要面向 Linux 用户。尽管如此,每个子部分的说明中都提到了如何在其他平台(setup)上设置一切。
让我们开始吧。
根据您的平台安装所有库依赖项#
sudo apt install libfontconfig1-dev libfreetype6-dev \
libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev \
libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev \
libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev \
libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev \
libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev \
libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev \
libxkbcommon-dev libxkbcommon-x11-dev libatspi2.0-dev \
libopengl0 -y
如果您必须使用 Qt Multimedia 模块,则还必须安装 gstreamer。
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc \
gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl \
gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
通常,缺少软件包的信息可以通过检查 CMake 构建文件夹中的 config.summary 来找到。
注意
对于其他平台,请使用以下说明安装相同的软件包:[Qt 在 Linux 上的安装](https://doc.qt.ac.cn/qt-6/linux-requirements.html)
构建 Qt#
如果您只想调试 CPython 绑定或您已经有 Qt 6 的 DEBUG_SYMBOLS,则此步骤是可选的。
构建 Qt 有多种方法 - 配置脚本或手动使用 CMake。查找构建系统信息:[Qt 6 构建系统](https://www.qt.io/blog/qt-6-build-system)
获取源代码。
git clone git://code.qt.io/qt/qt5.git # Get submodules cd qt5 perl init-repository
拥有一旦源代码后,下一步就是使用CMake生成构建文件,然后构建和安装。
cmake -GNinja -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX=/path/to/install/Qt -DBUILD_qtwebengine=OFF .. cmake --build . --parallel cmake --install .
如您所注意到的,我们在构建过程中跳过了Qt WebEngine模块,因为这大大减少了构建时间。然而,PySide6支持Qt WebEngine功能。因此,如果需要,请尽管添加。
有关构建Qt 6的更多说明,请参阅以下链接
将 bin 和 lib 路径添加到环境变量中#
export PATH="/path/to/custom/qt/bin:$PATH"
export LD_LIBRARY_PATH="/path/to/custom/qt/lib:$LD_LIBRARY_PATH"
使用您之前构建的Qt 6构建PySide6#
按照入门 - Qt for Python中提到的步骤操作
您可以使用setup.py的--module-subset
命令行参数手动选择要安装的模块。这是我的安装脚本
python setup.py install --qpaths=/path/to/qpaths --debug \
--ignore-git --reuse-build
建议使用Python虚拟环境,而不是在全球Python中安装。
使用您首选的IDE调试过程#
以下部分指导您设置Qt Creator或VSCode。