【发布时间】: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 不适合宏。