• 2759阅读
  • 3回复

[提问]gdb如何调试Bug [复制链接]

上一主题 下一主题
离线三只小鸡
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-14
回复本帖可获得1RMB金钱奖励!
每人最多可获奖3次,奖池剩余15RMB金钱 (中奖几率30%)
偶然事件,按下按键后,程序在进入enventFilter之前就出现如下图中错误。新建了按键线程,和通讯线程,在按键线程中执行QWSServer::sendKeyEvent
正常情况下,理应进入enventFilter,但是偶然会在进入enventFilter之前死机(segmentation fault),是否会与通讯有关呢?下图是我通过gdbsever远程调试得到的最后死机的地方。有什么办法可以通过gdb找出bug位置吗?万分感谢!!


离线jigetage

只看该作者 1楼 发表于: 2018-05-16
1,操作ui资源尽量不要用事件触发,换成信号-槽触发
2,把pdb一起打包发布就可以看到,或者本地保存一份和发布程序相同版本的pdb文件
4条评分好评度+1贡献值+1金钱+10威望+1
三只小鸡 好评度 +1 - 2018-05-17
三只小鸡 贡献值 +1 - 2018-05-17
三只小鸡 威望 +1 - 2018-05-17
三只小鸡 金钱 +10 - 2018-05-17
离线三只小鸡

只看该作者 2楼 发表于: 2018-05-17
回 jigetage 的帖子
jigetage:1,操作ui资源尽量不要用事件触发,换成信号-槽触发
2,把pdb一起打包发布就可以看到,或者本地保存一份和发布程序相同版本的pdb文件 (2018-05-16 10:44) 

十分感谢你的解答
然后我还有些疑问:
1,你的意思是QWSServer::sendKeyEvent 是ui资源吗?所以要把它放到主线程中执行?其实我试过用信号-槽机制把它QWSServer::sendKeyEvent放到主线程中执行,测试了几天都不死机,一放回次线程测试一段时间就死机。所以我干脆把整个按键任务实例留在主线程执行,本来是moveToThread到按键读取线程的。但是我还不明白其中的原理。也不知道是不是已经解决了问题,因为这个bug本身就是很偶尔性。
2,pdb是什么?还没听过
离线jigetage

只看该作者 3楼 发表于: 2018-05-23
回 三只小鸡 的帖子
三只小鸡:十分感谢你的解答[表情]
然后我还有些疑问:
1,你的意思是QWSServer::sendKeyEvent 是ui资源吗?所以要把它放到主线程中执行?其实我试过用信号-槽机制把它QWSServer::sendKeyEvent放到主线程中执行,测试了几天都不死机,一放回次线程测试一段时间就死机。所以我干脆把整个按键 .. (2018-05-17 10:57) 

1,看你的描述,按键应该是qpushbutton吧,肯定是ui资源
2,主贴没看清楚。。。你用的gdb调试,所以不在windows平台吧。pdb文件存储了vs编译出的可执行文件的堆栈信息,可以找到异常出现位置的前后有关代码
快速回复
限100 字节
 
上一个 下一个