我正在使用g ++ 4.1.2和gdb 7.2
我正在调试使用Xerces的代码,我使用相同的工具构建了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中设置一个后续断点,这样就可以了。 / p>
答案 0 :(得分:1)
尝试gdb 7.1 - 在gdb 7.2中按函数名设置断点似乎存在一些问题