C++项目中调试时断点未命中

-1 投票
1 回答
45 浏览
提问于 2025-04-14 17:44

我现在正在调试一个Python应用,这个应用用到了C++的功能,使用的是pybind11这个工具。

我是在一个Linux的Docker环境下进行调试。

我已经设置好了调试器,配置文件是launch.json,内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python",
            "type": "debugpy",
            "request": "launch",
            "program": "myscript.py",
            "console": "integratedTerminal"
        },
        {
            "name": "(gdb) Attach",
            "type": "cppdbg",
            "request": "attach",
            "program": "/usr/local/bin/python",
            "processId": "${command:pickProcess}",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
        }
    ]
}

这是我的setup.py文件:

import os
from distutils.core import setup
from pybind11.setup_helpers import Pybind11Extension

os.environ["CPPFLAGS"] = "-g"

setup(name="my_add",
      version="1.0.0",
      ext_modules=[Pybind11Extension("my_add", ["add.cpp"]],
      )

调试器运行得很好,我可以在C++和Python文件之间切换。不过,我遇到了一个问题,就是在add.cpp文件中设置的断点没有被触发。正如提供的截图所示,调试器似乎直接跳过了这些断点,没有暂停执行:

在这里输入图片描述

1 个回答

0

编译器对cpp文件进行了优化。为了解决这个问题,我添加了一个叫做-O0的标志,这个标志告诉gcc/g++不要对代码进行优化。所以我把setup.py修改成了下面这样:

import os
from distutils.core import setup
from pybind11.setup_helpers import Pybind11Extension

os.environ["CPPFLAGS"] = "-O0 -g"

setup(name="my_add",
      version="1.0.0",
      ext_modules=[Pybind11Extension("my_add", ["add.cpp"]],
      )

撰写回答