如何调试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用户。不过,每个子章节中都提到了在其他平台上设置所有内容的链接。

让我们开始吧。

根据您的平台安装所有库依赖项

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 Install on Linux

构建Qt

这是一个可选步骤,适用于您只想调试CPython绑定或已经拥有Qt 6的DEBUG_SYMBOLS的情况。

有多种方法可以构建Qt - 使用配置脚本或手动使用CMake。 查找构建系统信息 Qt 6 Build System

  1. 获取源代码。

    git clone git://code.qt.io/qt/qt5.git
    # 获取子模块
    cd qt5
    perl init-repository
    
  2. 一旦你有了源代码,下一步就是使用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 的更多说明可以在以下链接中找到:

binlib路径添加到环境变量中

export PATH="/path/to/custom/qt/bin:$PATH"
export LD_LIBRARY_PATH="/path/to/custom/qt/lib:$LD_LIBRARY_PATH"

使用之前构建的Qt 6构建PySide6

按照从源代码构建指南中提到的步骤操作。

你可以手动选择要安装的模块,使用--module-subset命令行参数来执行setup.py。这是我的安装脚本

python setup.py install --qpaths=/path/to/qpaths --debug \
--ignore-git --reuse-build

建议使用Python虚拟环境,而不是在全局Python中安装。

使用您首选的IDE调试过程

以下部分将指导您完成Qt Creator或VSCode的设置。