当前位置: 首页 > news >正文

东莞学做网站整站排名服务

东莞学做网站,整站排名服务,设计方案审核合格后由谁签字确认,网页qq官网文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…

文章目录

  • 一、Pdb生成及Dump文件使用示例图
    • 1.Pdb文件生成
    • 2.Dump文件调试
    • 3.参数不全Pdb生成的Dump文件调试
  • 二、个人理解
    • 1.生成Pdb文件的方式
    • 2.Dump文件不生产的情况
  • 三、源码
    • Pro文件
    • mian.cpp
    • MainWindow
    • Ui文件
  • 总结

一、Pdb生成及Dump文件使用示例图

1.Pdb文件生成

下图先通过构建生成Pdb文件,然后运行程序,通过提前准备的崩溃按钮使得程序崩溃,生成“dump文件”的演示。
123456

2.Dump文件调试

下图是先将之前生成的Pdb文件移动至dump文件同级目录,然后使用Visual Studio打开dump文件,在界面中点击使用’仅限本机’进行调试调试程序。
在这里插入图片描述

3.参数不全Pdb生成的Dump文件调试

下图使用的Pdb文件为是在缺少相关参数的状态下生成的(只有生成Pdb文件的命令符),可以看到打开后点击使用’仅限本机’进行调试调试程序显示的崩溃位置是异常的。
在这里插入图片描述

二、个人理解

1.生成Pdb文件的方式

我整合的的生成Pdb方式有多种,如下:

  1. 在Qt项目内容中配置添加"CONFIG += force_debug_info"(如下图),参考Qt-生成dump文件,该链接中还额外添加了"CONFIG+=separate_debug_info"的内容,但是我个人测试只添加"CONFIG += force_debug_info"也可以调试测试(测试范围不全面,欢迎指正)。(注:配置内容仅支持当前位置的项目,更换项目或者更换位置,都需要重新添加。)
    在这里插入图片描述
  2. 在pro文件添加CONFIG += force_debug_info也可生成Pdb文件用于调试。(注:在Pro文件添加后,该项目任意位置可生成Pdb文件。)
    在这里插入图片描述
  3. 在pro文件添加QMAKE_CXXFLAGS_RELEASE += Q M A K E C F L A G S R E L E A S E W I T H D E B U G I N F O 和 Q M A K E L F L A G S R E L E A S E + = QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO和QMAKE_LFLAGS_RELEASE += QMAKECFLAGSRELEASEWITHDEBUGINFOQMAKELFLAGSRELEASE+=QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO可生成Pdb文件用于调试。**(注:在Pro文件添加后,该项目任意位置可生成Pdb文件,在添加QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO后是可以生成Pdb文件,但是生成的Pdb文件会有异常,可参考“第一段 第三节 参数不全Pdb生成的Dump文件调试效果”。)**参考链接QT如何在Release编译下生成pdb文件
    在这里插入图片描述
  4. 可更新Qt安装目录下对应编译器的msvc-desktop.conf文件,更新QMAKE_CFLAGS_RELEASE为:QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -MD -O2 -MD -Zi(如下图一),更新QMAKE_LFLAGS_RELEASE为:QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG(如下图二)。 ** (注:更新msvc-desktop.conf文件后,当前编译器所编译的所有项目都会生成Pdb文件,仅更新QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /DEBUG也可生成Pdb文件,同样生成的Pdb文件会有异常,可参考“第一段 第三节 参数不全Pdb生成的Dump文件调试效果”。)**参考链接QT如何在Release编译下生成pdb文件
    在这里插入图片描述
    在这里插入图片描述

2.Dump文件不生产的情况

有些电脑中同一种状态不会崩溃,可能是被Qt事件循环接收处理了。
如本文中的情况,我个人在公司的电脑和我家的电脑运行就是只有一个生成Dump文件。
我个人测试(无法生成Dump文件的电脑),使用纯C++的代码可进入指定的Dump生成函数,只要进入Qt事件循环后就无法进入Dump生成函数,猜测是被Qt事件循环接收处理了

三、源码

Pro文件

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11#################### 1 #########################
## 在“Pro”文件中添下方代码后可生成PDB文件(影响当前项目)
## 生成PDB PdbDumpTest.pdb PdbDumpTest.vc.pdb
CONFIG += force_debug_info#################### 2 #########################
## 生成PDB PdbDumpTest.pdb
#QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
#QMAKE_LFLAGS_RELEASE += $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO#################### 3 #########################
## 在“构建设置”中“Build的步骤”中的“Additional arguments”添下方代码后可生成PDB文件(影响当前目录的当前项目)
# "CONFIG += force_debug_info"#################### 4 #########################
## 在下方对应目录文件中,参考如下更新文件的QMAKE_LFLAGS_RELEASE的赋值数据即可(影响所有项目)
## C:\Qt\Qt5.xx.xx\5.xx.xx\msvc2017_64\mkspecs\common\msvc-desktop.conf
#QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE (-MD -O2 -MD -Zi)
#QMAKE_LFLAGS_RELEASE    = /INCREMENTAL:NO (/DEBUG)# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

mian.cpp

#include "mainwindow.h"#include <QApplication>
#include <QDebug>
#include <QDir>
#include <QDateTime>
#include <QSharedMemory>
#include <QProcess>
#include <QMessageBox>#ifdef Q_OS_WIN
#include <Windows.h>
#include <DbgHelp.h>
#pragma comment(lib, "dbghelp.lib")
#endifLONG WINAPI SystemExceptionCall(_EXCEPTION_POINTERS* ExceptionInfo)
{// 获取生成路径QString logFile = QApplication::applicationDirPath() + "/dump";// 判断路径是否存在if (!QDir(logFile).exists()){// 路径不存在则创建QDir().mkpath(logFile);}// 生成dump文件路径及名称QString dumpName = QString("%1/%2.dmp").arg(logFile).arg(QDateTime::currentDateTime().toString("yyyyMMdd-hh_mm_ss"));// 创建dump文件
#if 0// 使用CreateFile创建Dump文件,适用于包含详细参数的文件创建HANDLE hDumpFile = CreateFile(dumpName.toStdWString().c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
#else// Pdb文件的配置参数(如文件显隐,编辑状态等)LPCREATEFILE2_EXTENDED_PARAMETERS fileParam = Q_NULLPTR;// 使用CreateFile2创建Dump文件,适用于普通文件创建,通常不需要其他配置参数使用该函数更为快捷HANDLE hDumpFile = CreateFile2(dumpName.toStdWString().c_str(), GENERIC_WRITE, FILE_SHARE_READ, CREATE_ALWAYS, fileParam);
#endifif (hDumpFile != INVALID_HANDLE_VALUE){MINIDUMP_EXCEPTION_INFORMATION dumpInfo;dumpInfo.ThreadId = GetCurrentThreadId();   // 当前现场IddumpInfo.ExceptionPointers = ExceptionInfo; // 当前异常指针dumpInfo.ClientPointers = TRUE; // 写入Dump文件时,可以直接引用相关内存地址// 创建Dump文件MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpWithDataSegs, &dumpInfo, Q_NULLPTR, Q_NULLPTR);// 关闭文件句柄CloseHandle(hDumpFile);}return EXCEPTION_EXECUTE_HANDLER;
}int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN//! 注册异常奔溃回调SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)SystemExceptionCall);
#endifQApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

MainWindow

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btnCrash_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btnCrash_clicked()
{
//    qCritical("test");qDebug() << "123456" << __FUNCTION__;int b = 10;int a = 10/(b-10);qDebug() << "123456" << a;
}

Ui文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>330</width><height>207</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><widget class="QWidget" name="centralwidget"><layout class="QGridLayout" name="gridLayout"><item row="0" column="1"><spacer name="verticalSpacer"><property name="orientation"><enum>Qt::Vertical</enum></property><property name="sizeHint" stdset="0"><size><width>20</width><height>52</height></size></property></spacer></item><item row="1" column="0"><spacer name="horizontalSpacer"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>110</width><height>20</height></size></property></spacer></item><item row="1" column="1"><widget class="QPushButton" name="btnCrash"><property name="text"><string>崩溃</string></property></widget></item><item row="1" column="2"><spacer name="horizontalSpacer_2"><property name="orientation"><enum>Qt::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>109</width><height>20</height></size></property></spacer></item><item row="2" column="1"><spacer name="verticalSpacer_2"><property name="orientation"><enum>Qt::Vertical</enum></property><property name="sizeHint" stdset="0"><size><width>20</width><height>51</height></size></property></spacer></item></layout></widget><widget class="QMenuBar" name="menubar"><property name="geometry"><rect><x>0</x><y>0</y><width>330</width><height>23</height></rect></property></widget><widget class="QStatusBar" name="statusbar"/></widget><resources/><connections/>
</ui>

总结

通过配置编辑项目,并使用系统提供的接口设置Dump文件生成函数,最后使用Vs调试代码即可。

友情提示——哪里看不懂可私哦,让我们一起互相进步吧
(创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。
注:如有侵权,请联系作者删除

http://www.hkea.cn/news/703809/

相关文章:

  • wordpress简单企业站seo怎么刷排名
  • 网站建设与运维泉州全网推广
  • 网站建站哪个公司好一点营销咨询服务
  • 值得玩的网页游戏北京seo营销培训
  • 中国建设银行网站分期通百度推广登录平台网址
  • 公司内部网站源码新闻软文推广案例
  • vf建设银行网站谷歌seo排名
  • 如何申请商业服务器武汉seo工厂
  • 祥云平台英文网站微博指数查询入口
  • 公司网站建设准备资料今日重大财经新闻
  • 发布网站后备案免费网站建站页面
  • 浙江建设职业技术学院迎新网站做一个网站要多少钱
  • axure做网站好不好手机百度问一问
  • 开发微信小程序的流程广州seo优化电话
  • 小企业网站建设和管理全能搜
  • 无棣县建设局网站游戏优化大师下载安装
  • 小额贷款 网站模板品牌推广软文
  • 网站建设开发成本天津百度搜索网站排名
  • 做的好的营销型网站有哪些内容外贸网站外链平台
  • 东营网站建设预算价格百度网盘网页版入口官网
  • 网站建设中标公告18款禁用看奶app入口
  • 网站运营人员岗位职责长沙正规seo优化价格
  • cnzz统计代码放在后台网站为什么没显示seo的英文全称是什么
  • 杭州企业网站建设方案广告门
  • 自己免费做网站(二)seo优化公司信
  • 广州外贸b2b网站建设刷钻业务推广网站
  • 做企业网站用什么怎样宣传自己的品牌
  • 濮阳做网站的公司我的百度账号
  • 美食网站开发如何做好网络营销工作
  • 网站建设案例资料今天的新闻内容