标题:下标越界导致的崩溃怎么定位触发的代码行数?
作者:apud
日期:2020-03-17 21:28
内容:
新手写的软件各种不稳定,应该是家常便饭的事情,本人也属于这一范围 ,偶尔折腾下Qt,业余爱好者。
软件崩溃的原因,内存泄漏、未初始化、下标越界应该是常见的原因之一。前段时间给软件加上的日志保存上报系统的功能,
以下是软件近期捕获到的日志:
Fatal: File:(global\qglobal.cpp) Line:(2127) ASSERT: "uint(i) < uint(size())" in file D:\Qt\Qt5.3.2\5.3\mingw482_32\include/QtCore/qstring.h, line 788 (2020-03-16 22:07:44 周一)
很明显是QString访问下标越界了,不过从这个报错信息,找不到代码调用方是第几行。代码中涉及QString下标访问的有几十处……正常使用中根本找不到,也触发不到,只有在某种场合下可能会遇到。没有精确的报错行数,无法定位问题。
求各位大神解惑!感激不尽!
#1 [liulin188 03-17 22:37]
楼主这种报错信息是怎么生成的,能不能教教我
#2 [firebolt 03-18 18:23]
查看看调用栈啊
#3 回 liulin188 的帖子 [apud 03-18 19:47]
liulin188:楼主这种报错信息是怎么生成的,能不能教教我 (2020-03-17 22:37)
就是qtDebug信息重向件到文件。
#4 回 firebolt 的帖子 [apud 03-18 19:54]
firebolt:查看看调用栈啊 (2020-03-18 18:23)
objdump 生成asm的方式,根据报错地址去找倒是可以定位到引起异常的代码,不过这种对下标越界的无效,只能处理/0等等异常信息。还有其它方便的方法吗?前提是软件已经打包出去给用户使用了,而不是在调试界面。这方面了解不是很多,可以指导下吗
#5 回 apud 的帖子 [firebolt 03-18 20:11]
apud:objdump 生成asm的方式,根据报错地址去找倒是可以定位到引起异常的代码,不过这种对下标越界的无效,只能处理/0 等等异常信息。还有其它方便的方法吗?前提是软件已经打包出去给用户使用了,而不是在调试界面。这方面了解不是很多,可以指导下吗 (2020-03-18 19:54)
看你的描述是随机错误,你要检查一下代码了,几十处真不算多啊。QString使用的是COW机制,下标操作有两种状态,一种是读,一种是写,估计你的问题是出在读操作上了。代码里加上异常捕获,然后写日志查一下吧。最终还是要改代码的。