使用 VSCode 调试 PySide (Linux + Windows)#
VSCode 允许你在一个调试会话中使用多个调试器。这意味着我们可以在一个会话中同时使用 Python PDB 和 GDB(或 Windows 的 MSVC 调试器)。使用 VSCode,你可以做到以下事情:
看到 Python 和 C++ 的调用栈。
在 Python 和 C++ 代码中设置断点。
从 Python 代码步进到 C++ 代码,反之亦然。
对于 Windows,请参阅 创建调试构建。
让我们开始设置一切并调试一个 Python 进程。
设置 Python 解释器#
为了调试 Python 代码,需要在 VSCode 中设置正确的 Python 解释器 - 这将确保 VSCode 中所有 Python 集成使用相同的解释器。但这不会影响 C++ 调试,并且必须单独为相应的启动目标设置 Python 可执行文件路径(请参阅以下部分)。
要设置 Python 解释器,打开一个 Python 文件,然后在 VSCode 状态栏的右侧点击相应的选项,应该看起来像这样
或者,打开 VSCode 命令面板(F1 或 Ctrl + Shift + P)并搜索“Python: Select Interpreter”。
在 launch.json 中创建配置#
运行 -> 添加 配置 -> Python -> Python 文件
这将创建一个 launch.json 文件,看起来像这样
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
它应该已经包含一个名为“Python: Current File”的配置,这允许我们调试当前打开的 Python 文件。
现在,我们需要添加一个配置来将 C++ 调试器附加到已经以调试模式运行的 Python 进程。如果您已安装 C/C++ 扩展并拥有适合您系统的调试器,VSCode 应该能够自动提供添加配置的建议。在 Linux 上,建议的名称为
“C/C++: (gdb) Attach”
在 Windows 上则是
“C/C++: (Windows) Attach”
在 Linux 上,您的 launch.json 现在应该看起来像这样
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "attach",
"program": "/path/to/python",
"processId": "${command:pickProcess}",
"MIMode": "gdb", "setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
在 Windows 上则是这样
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
},
{
"name": "(Windows) Attach",
"type": "cppvsdbg",
"request": "attach",
"processId": "${command:pickProcess}",
}
]
}
对于 Linux,还请确保“program”的值指的是您虚拟环境中的 Python 解释器(在 Windows 上不需要这样做)。我们需要进程 ID 才能附加 gdb 调试器到进程。通过“${command:pickProcess}”,我们可以实时找到进程 ID,正如我们将看到的。
现在,我们准备开始调试。
调试进程#
在 Python 代码中设置断点。
转到
运行 和 调试
(Ctrl + Shift + D)并点击运行符号(绿色右箭头)来运行“Python: Current File”。这将触发断点并使 Python 调试器暂停。使用下拉菜单将“Python: Current File”更改为“(gdb)Attach”或“(Windows)Attach”。您的设置现在应该如下所示。
运行“(gdb)Attach”或“(Windows)Attach”,这将询问您要附加 C++ 调试器的 Python 进程的进程 ID。VSCode 还允许您通过名称搜索进程。
技巧
您可以通过运行
ps aux | grep python
来找到进程 IDVSCode 可能现在会要求您输入超级用户权限。如果是这种情况,请输入“y”并输入您的密码。
Superuser access is required to attach to a process. Attaching as superuser can potentially harm your computer. Do you want to continue? [y/N]_
就是这样。您现在应该能够命中您在 C++ 对应版本上设置的断点。
在 shiboken 包装类上设置断点
在 C++ 实现上设置断点