【问题标题】:gdb unable to set breakpointgdb 无法设置断点
【发布时间】:2011-02-14 15:04:47
【问题描述】:

我正在使用 g++ 4.1.2 和 gdb 7.2

我正在调试使用 Xerces 的代码,我使用相同的工具构建了该代码,但可能没有调试。

GDB 可以很好地单步执行我的代码,但当然不会单步执行 Xerces,因为它可能没有调试信息,而且绝对不知道源目录在哪里。但我只想在 Xerces(回调解析器)调用回调对象时设置断点。

它们的基类是 DefaultHandler

我有一个类 ContentHandlerBase : public DefaultHandler 然后叶子类继承自 ContentHandlerBase。这些叶类位于命名空间 A 中,例如

在 gdb 中我尝试设置断点。

b A::LeafContentHandler::LeafContentHandler b A::LeafContentHandler::endElement

第一个断点有效,因为代码是内联的(在标题中定义)。

第二个断点不起作用,这意味着 gdb 声称不存在这样的符号,尽管它显然存在。它是 Xerces 库中定义的一个虚函数,如果有区别的话。在我重新编译 Xerces 之前,它是用 g++3.4.6 构建的,我在 gdb 中找不到该符号。现在,gdb 找到了符号(我可以点击标签),但它说它不存在,我应该等待库加载。

谁能告诉我我必须做些什么才能让它工作?我不希望通过调试来构建所有的 xerces。

请注意,在某些情况下,使用 .cpp 文件中的构造函数,由于某种原因它也可以工作,然后,因为它在同一个文件中,我可以在 linenumber 处设置一个后续断点,并且有效。

【问题讨论】:

  • 这是宏扩展的机会吗?似乎 gdb 不适合宏。

标签: gdb g++ debugging xerces


【解决方案1】:

尝试 gdb 7.1 - 在 gdb 7.2 中按函数名设置断点似乎存在一些问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 2016-11-26
    • 2015-09-22
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多