我是否可以使用GDB调试同一对象类型的多个实例?

时间:2010-05-18 23:26:35

标签: c++ c qt gdb

程序运行正常。当我设置断点时,会生成分段错误。是我还是GDB?在运行时,这永远不会发生,如果我只实例化一个对象,那么没有问题。

我在ubuntu x86_64 karmic考拉上使用QtCreator。

UPDATE1:

我制作了一个包含该类简化版的小程序。您可以在以下网址下载:

example program

只需在名为drawChart()的函数的第一行放置一个断点,然后单步执行以查看段错误发生

UPDATE2:这是另一个小程序,但它实际上与mandlebrot示例相同,但它仍在发生。你可以用mandlebrot来区分它,看看差别很小。

almost the same as mandlebrot example program

2 个答案:

答案 0 :(得分:2)

回答你的问题:是的,你应该能够使用GDB调试多个线程。这取决于并发设计是否合理。

您的线程可能会访问的数据存在竞争条件。正常运行程序时可能无法显示问题,但附加调试程序会更改计时和计划。即便如此,您应该能够使用调试器在发生段错误时中断。了解这种情况可以告诉您有关种族状况或腐败的信息,无论情况如何。

值得研究的是,即使它在大多数“运行时”条件下都没有发生,它也可能在不同的系统负载条件下出现。

答案 1 :(得分:0)

你是从多个线程调用Qt的绘图代码吗? (特别是小部件方法)

http://doc.qt.nokia.com/4.3/threads.html#reentrancy-and-thread-safety

似乎Qt就像GTK +,你应该只从一个线程(特别是主线程)触摸GUI东西

我对Qt不太熟悉,无法为您提供有关如何更改代码的建议,但我建议将其更改为基于事件(即渲染开始以响应事件,然后在主要事件中触发事件线程完成后,每个线程都有自己的主循环)这样你就可以完全避免互斥和同步。