查看完整版本: [-- gdb如何调试Bug --]

QTCN开发网 -> Qt基础编程 -> gdb如何调试Bug [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

三只小鸡 2018-05-14 11:04

gdb如何调试Bug

偶然事件,按下按键后,程序在进入enventFilter之前就出现如下图中错误。新建了按键线程,和通讯线程,在按键线程中执行QWSServer::sendKeyEvent
正常情况下,理应进入enventFilter,但是偶然会在进入enventFilter之前死机(segmentation fault),是否会与通讯有关呢?下图是我通过gdbsever远程调试得到的最后死机的地方。有什么办法可以通过gdb找出bug位置吗?万分感谢!!
[attachment=18928]


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

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

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

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

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


查看完整版本: [-- gdb如何调试Bug --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled