【问题标题】:Step over a C++ throw statement in GDB跳过 GDB 中的 C++ throw 语句
【发布时间】:2016-04-08 07:51:47
【问题描述】:

使用 GNU GDB 调试器调试 C++ 程序时,我可以使用 GDB 命令跳过下一行代码:

next

但是,当在下一行中引发异常时,例如

throw SomeException();

然后 GDB 继续运行直到下一个断点,而不是在 catch 块的第一行内停止。

这是 GDB 中的错误,还是我只是使用了错误的命令?

我在MinGW32 / Windows 上使用 GDB 7.7 版。

【问题讨论】:

    标签: c++ debugging exception gdb throw


    【解决方案1】:

    在 Linux 上这可以正常工作。特别是在抛出异常时使用的低级展开代码中有一个特殊的调试标记(函数或“SDT 探针”,取决于构建方式)。 GDB 在这个位置设置了一个断点。当这个断点被命中时,GDB 检查throw 的目标栈帧,如果它在nexting 帧之上,则在throw 的目标处放置一个临时断点。

    这需要对 GDB 进行一些更改,还需要对 C++ 运行时进行一些更改,以便通知 GDB throws。据我所知,没有人做过将这段代码移植到 MinGW 的工作。也许可以通过修改 GCC 源代码中相应的 unwind-mumble.c 文件来完成。

    【讨论】:

    • 非常感谢您的详细解答。所以这意味着 MinGW 不会有一个简单的解决方案,对吧?太糟糕了,因为这实际上会在使用异常时阻碍有效的 C++ 调试。
    • 这可能不会太难,但如果不深入研究相关的 gcc 源,就很难确定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多