vscode中调试Python和C++的混合代码

使用流程参考

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文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值