qt 调试时出现

qt 调试时出现,第1张

段错误:一般由于访问了已被释放的空间或者访问了求定义的空间引起。

1、查一下,是不是定义了指针,没有为指针赋初值,或者数组下标越界。

2、Debug一下,设置断点,找出是哪里出现段错误了,再找原因。

在QT中,我们经常使用 qDebug() 、 qInfo() 等来打印调试的信息,但是当打印信息过多时,很不利于查找阅读。所以本文介绍使用 QtMessageHandler 类中的 qInstallMessageHandler() 来自定义处理调试信息。

一、在主线程中注册调试信息处理回调

这里的 outputMessage 即为自定义的触发函数,当程序有调试信息时,将会调用此函数

二、实现触发函数

说明:此函数需要接受三个参数

QtMsgType type :表示调试信息类型,包括 QtDebugMsg (调试消息)、 QtInfoMsg (信息消息)、 QtWarningMsg (警告消息和可恢复的错误)、 QtCriticalMsg (关键错误和系统错误)、 QtFatalMsg (致命错误)

const QMessageLogContext &context :表示有关日志消息的其他信息,比如文件名 contextfile 、行号 contextline 等等。

const QString &msg :表示原始的调试信息。

这样,我们就可以根据调试信息类型,自定义处理调试信息,并打印到日志文件等等。

但是有时候,我们会有这样的需求,有些类型的信息需要打印到屏幕,而有些类型的信息需要打印到日志。当注册了调试信息处理的回调,如何分类去处理呢?

查看QT文档中对于 qInstallMessageHandler() 的描述,可以知道该函数返回一个指向上一个消息处理程序,可以理解为上一个消息处理函数的指针。因此在使用 qInstallMessageHandler() 注册回调时,可以保存函数的返回,从而用之前的处理程序来处理调试信息

例如:

使用 s_messageHandler 来保存函数的返回值,即指向了上一个消息处理函数。在 outputMessage() 函数中使用 s_messageHandler

这样就实现了将Info等信息打印到日志,而debug信息打印到屏幕。

注: 以上写入日志文件的写法,并不是线程安全的,需要加锁来保证线程安全,这里就不再赘述。

正常的运行程序,日志内容如下:

实际项目中遇到了编译出的Release版本,日志输出没有文件信息、行数的问题。如下:

解决方法:

在pro文件中添加宏

一定要先删除掉之前编译的中间文件,重新qmake!这样就可以在Release版本中正确输出日志信息。

注意: 系统默认core文件的大小为0,如果在项目的目录没有产生 core 文件,则需要用 ulimit 命令查看和修改core文件的大小。使用 ulimit -a 查看大小,使用 ulimit -c unlimited 设置core文件不做限制。

就是在项目设置的时候,选择了影子构建,最后生成文件和工程不在同一目录下这时只需要打开项目——构建设置——概要——构建目录选择工程所在的目录就可以了。就是在项目设置的时候,选择了影子构建,最后生成文件和工程不在同一目录下这时只需要打开项目——构建设置——概要——构建目录选择工程所在的目录就可以了。

如果是影子工程,那么就在项目->构建设置->概要中将ShaowBuild前面的钩去掉。

如果在Qt中出现调试窗口未定义变量的情况,这通常表示代码中存在拼写错误、语法错误或逻辑错误等问题。常见的情况包括没有正确引用头文件、忘记声明变量和使用了未定义的变量等。在处理这种情况时,我们可以先从编译器输出的错误信息中找到错误提示,然后逐个排查代码中可能的问题点,打印出相关变量的值,以便排查问题的来源。此外,Qt还提供了许多调试工具,如Qt Creator中的调试器、跟踪器和QML Profiler等,这些工具可以帮助我们更快速、有效地诊断和解决问题。

1

首先,用QtCreator打开Qt工程,然后点击左下角的电脑图标,再在d出的菜单中选择“Debug”。

多图

2

接下来,在需要进行调试的代码部分设下断点。设断点的方法是在要设断点的代码行前的空白处点击鼠标。

3

如果想清除断点,则在该断点上再点击一下即可清除。

4

断点设好后,点击左下角的带放大镜的绿色三角形图标即可启动调试。

5

或者,点击菜单“调试”-“开始调试”-“开始调试”。

6

在调试过程中,若是想查看断点行某个变量的值,只需将鼠标移动到该变量上,稍后便会d出提示条显示。例如,图中的strlength()的值为1。

7

如果想继续执行,则可点击下方绿色的小按钮;如果想结束调试,则点击红色方块按钮。

以上就是关于qt 调试时出现全部的内容,包括:qt 调试时出现、QT 自定义处理调试信息、QT ---程序异常结束调试 Segmentation fault (core dumped)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9791311.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存