使用流程参考
Example debugging mixed Python C++ in VS Code
一些差异
这里假设的项目是通过python调用c++的相应共享库(so)文件。
首先,新建文件夹 .vscode
,在其中添加文件配置 launch.json
.
示例如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 附加",
"type": "cppdbg",
"request": "attach",
"program": "/path/to/python", // 这里为python 解释器的文件位置,可以在终端内使用 which python得到
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
},
{
"name": "Python 调试程序: 当前文件",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
这里如果在vscode使用附加调试,可能输入不了验证信息,例如得到如下错误:
[1] + Stopped (tty input) /usr/bin/pkexec "/usr/bin/gdb" --interpreter=mi --tty=${DbgTerm} 0<"/tmp/Microsoft-MIEngine-In-bz2r4v0k.qrm" 1>"/tmp/Microsoft-MIEngine-Out-1vkowcm4.51d"
这里可以通过 如下命令解决
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
# ptrace_scope default is 1.
# So if want to return the initial config
# use the below command
# echo 1 | sudo tee /proc/sys/kernel/yama/ptrace_scope
之后,在vscode中的调试控制台进行调试时,如果输入某个函数,例如f()
,在这个函数中如果是将其中的一些信息打印到标准错误流中,我们实际在这个控制台是看不到任何输出。
解决方法如下:
# 将对应的标准错误流的fd关闭,这里为2
-exec p (int) close(2)
# 新建一个文件
-exec p (int) creat("log.txt", 0600)
执行这两步之后,标准错误流的信息将会重定向到 log.txt
文件中。