首页
社区
课程
招聘
[原创][Qt] 01_Qt日志信息打印
发表于: 2019-4-9 23:32 3598

[原创][Qt] 01_Qt日志信息打印

2019-4-9 23:32
3598

调试是编程中常见的定位手段,打印合适的调试信息能帮助我们快速定位问题,大多数程序都会有很多调试日志代码,Qt中使用qDebug进行日志调试,通过qInstallMsgHandler和qInstallMessageHandler进行调试信息定制,我们也将根据这两个函数将程序中未显示的调试信息显示出来。其它程序可以根据hook指定的函数实现调试信息的显示。

在窗口程序中创建一个按钮,并实现其点击功能,打印几行信息,代码及效果图如下所示:

示例程序点击按钮及代码

有了上面的代码,默认还是会将调试内容直接输出到dbgview中,所以,我们调用函数qInstallMessageHandler先将程序的调试信息隐藏不输出。

由于我使用的MingW的工程写的Demo,我们这里也使用MingW的编译器创建工程mydll,工程为dll工程。内容很简单,创建一个类Mydll,并创建个全局对象Mydll g_dll;,在构造函数中调用保存文件的逻辑,具体代码如下:

同上节一样,使用代码注入器将mydll.dll注入到目标进程Demo.exe。然后点击按钮打印,查看dbgview可以查看到调试信息。

其实编写注入模块mydll.dll并不一定必须要使用QtCreator,只要让程序能调用目标进程的功能函数就可以了。下面我们使用另一个函数qInstallMsgHandler实现日志打印。

首先我们分析下qInstallMsgHandler和qInstallMessageHandler,前者是旧版本的日志接口,函数原型为qInstallMsgHandler(void ()(QtMsgType, char const)),传入的参数为两个参数的函数指针,在Qt5中不能直接被调用,会编译失败。而qInstallMessageHandler参数为三个参数的函数指针,多了一个QMessageLogContext参数。如果使用VS,我们当然使用简单的qInstallMsgHandler函数来实现了,具体代码如下:

九分出品,欢迎吐槽。更多精彩,可以前往博客地址


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//