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

怎么做淘宝客手机网站推广云南 网站建设

怎么做淘宝客手机网站推广,云南 网站建设,农村网站建设,做动态表情包的网站qt应用程序崩溃日志和转储文件对于定位问题 一. DMP 文件包含的信息:二. 分析 DMP 文件的主要方法:三. 生成更详细的 DMP 文件:四. 分析 DMP 文件的注意事项:五. 实用建议:六. 实战 一. DMP 文件包含的信息&#xff1a…

qt应用程序崩溃日志和转储文件对于定位问题

  • 一. DMP 文件包含的信息:
  • 二. 分析 DMP 文件的主要方法:
  • 三. 生成更详细的 DMP 文件:
  • 四. 分析 DMP 文件的注意事项:
  • 五. 实用建议:
  • 六. 实战

一. DMP 文件包含的信息:

1崩溃时的调用堆栈
2内存状态
3寄存器值
4线程信息
5加载的模块信息
6系统信息
DMP(转储)文件记录了程序崩溃时的完整内存状态,对于分析崩溃原因非常有用。以下是关于 DMP 文件的详细说明:

二. 分析 DMP 文件的主要方法:

一. 使用 Visual Studio 分析

  1. 打开 Visual Studio
  2. 文件 -> 打开 -> 文件 -> 选择 .dmp 文件
  3. 在调试器中设置符号路径(必须有对应的 PDB 文件)
  4. 点击"调试"按钮开始分析

二.使用 WinDbg 分析
基本命令:
!analyze -v # 详细分析崩溃原因
k # 显示调用堆栈
~*k # 显示所有线程的调用堆栈
!threads # 显示线程信息
lm # 显示加载的模块

三. 生成更详细的 DMP 文件:

MINIDUMP_TYPE dumpType = (MINIDUMP_TYPE)(
MiniDumpNormal | // 基本信息
MiniDumpWithFullMemory | // 完整内存
MiniDumpWithHandleData | // 句柄数据
MiniDumpWithThreadInfo | // 线程信息
MiniDumpWithProcessThreadData // 进程线程数据
);

MiniDumpWriteDump(
GetCurrentProcess(),
GetCurrentProcessId(),
hDumpFile,
dumpType, // 使用更详细的转储类型
&dumpInfo,
NULL,
NULL
);

四. 分析 DMP 文件的注意事项:

1需要符号文件(PDB)

  • 确保保存了程序的 PDB 文件
  • PDB 文件版本必须与崩溃程序版本一致
  • 设置正确的符号路径

2发布版本的准备工作
// 在 .pro 文件中添加
QMAKE_CXXFLAGS_RELEASE += /Zi # 生成调试信息
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF # 链接时包含调试信息

3常见崩溃原因分析:

  • 访问违例(空指针)
  • 内存损坏
  • 栈溢出
  • 非法内存访问
  • 未处理的异常

五. 实用建议:

1.建立版本管理

  • 保存每个发布版本的源码
  • 保存对应的 PDB 文件
  • 记录版本号和编译时间

2.添加额外信息
// 在生成 DMP 时添加自定义数据
MINIDUMP_USER_STREAM_INFORMATION userStreamInfo;
MINIDUMP_USER_STREAM userStream;
QString extraInfo = “Version: 1.0.0; Build: Debug”;
userStream.Type = CustomStreamType;
userStream.Buffer = (void*)extraInfo.toUtf8().data();
userStream.BufferSize = extraInfo.length();
userStreamInfo.UserStreamCount = 1;
userStreamInfo.UserStreamArray = &userStream;

通过正确分析 DMP 文件,你可以:
1确定崩溃的具体位置
2了解崩溃时的程序状态
3查看相关变量的值
4追踪问题的根源
这些信息对于修复程序问题非常重要,特别是在无法直接重现问题的情况下。

六. 实战

下面展示一个会崩溃的 Qt 程序示例,并说明如何生成和分析 DMP 文件。
1. 示例程序

// main.cpp
#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QDebug>
#include <windows.h>
#include <dbghelp.h>
#include <QDateTime>// DMP文件生成函数
LONG WINAPI createMiniDump(EXCEPTION_POINTERS* pExp)
{QString dumpPath = QCoreApplication::applicationDirPath() + "/crash_" + QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss") + ".dmp";HANDLE hDumpFile = CreateFileW(dumpPath.toStdWString().c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);if (hDumpFile != INVALID_HANDLE_VALUE) {MINIDUMP_EXCEPTION_INFORMATION dumpInfo;dumpInfo.ExceptionPointers = pExp;dumpInfo.ThreadId = GetCurrentThreadId();dumpInfo.ClientPointers = TRUE;// 生成更详细的DMP文件MINIDUMP_TYPE dumpType = (MINIDUMP_TYPE)(MiniDumpNormal |MiniDumpWithFullMemory |MiniDumpWithHandleData |MiniDumpWithThreadInfo |MiniDumpWithProcessThreadData);MiniDumpWriteDump(GetCurrentProcess(),GetCurrentProcessId(),hDumpFile,dumpType,&dumpInfo,NULL,NULL);CloseHandle(hDumpFile);}return EXCEPTION_EXECUTE_HANDLER;
}// 故意制造崩溃的类
class CrashTest : public QMainWindow
{
public:CrashTest(){QPushButton* btn = new QPushButton("点击崩溃", this);setCentralWidget(btn);connect(btn, &QPushButton::clicked, this, &CrashTest::makeCrash);resize(200, 100);}void makeCrash(){// 方式1:空指针访问int* p = nullptr;*p = 100;// 方式2:数组越界// int arr[5];// arr[1000000] = 1;// 方式3:除零错误// int a = 0;// int b = 100 / a;}
};int main(int argc, char *argv[])
{// 设置异常处理函数SetUnhandledExceptionFilter(createMiniDump);QApplication a(argc, argv);CrashTest w;w.show();return a.exec();
}

2. 项目文件配置

# crash_test.pro
QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17
CONFIG += force_debug_info  # 强制生成调试信息SOURCES += main.cpp# 添加 dbghelp 库
LIBS += -ldbghelp# 生成PDB文件的配置
QMAKE_CXXFLAGS_RELEASE += /Zi
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF

3. 编译和运行步骤
1.使用 Qt Creator 打开项目
2.选择 Release 模式编译
3.运行程序
4.点击"点击崩溃"按钮
5.程序会崩溃并在程序目录生成 .dmp 文件

4. DMP 文件分析步骤
1.使用 Visual Studio 分析

  1. 打开 Visual Studio
  2. 文件 -> 打开 -> 文件 -> 选择生成的 .dmp 文件
  3. 在"解决方案资源管理器"中设置符号路径:
    • 工具 -> 选项 -> 调试 -> 符号
    • 添加包含 PDB 文件的文件夹路径
  4. 点击"调试"按钮
  5. Visual Studio 会显示崩溃位置和调用堆栈

2.使用 WinDbg 分析

  1. 打开 WinDbg
  2. 文件 -> 打开崩溃转储
  3. 设置符号路径:.sympath+ [PDB文件路径]
  4. 输入命令:
    !analyze -v # 查看详细崩溃信息
    k # 查看调用堆栈
    ~*k # 查看所有线程的调用堆栈

5. 预期结果
在这个示例中,程序会因为空指针访问而崩溃。分析 DMP 文件时,你应该能看到:

1崩溃发生在 makeCrash() 函数中
2异常类型为访问违例(Access Violation)
3调用堆栈会显示从按钮点击到崩溃的完整路径

6. 注意事项
1确保保存了 PDB 文件
2Release 模式下也要生成调试信息
3分析时需要对应版本的源代码
4符号路径设置正确

这个例程提供了一个完整的崩溃捕获和分析流程。你可以通过修改 makeCrash() 函数来测试不同类型的崩溃情况。
完整项目我链接:qt-dmp
如果程序崩溃不容易复现难以短时间定位解决,希望崩溃后自动拉起进程,有几种方案可供选择。文章有点长,我会放在下一篇中介绍。

http://www.yayakq.cn/news/77346/

相关文章:

  • 爱奇艺做视频网站的杭州网站建设 网站设计
  • 网站建设管理要求沈阳网络推广
  • 用vue做多页面网站wordpress中间页跳转插件
  • 随州学做网站wordpress前台编辑器
  • 电商网站开发需求江西智能网站建设哪家好
  • 河南微网站建设公司哪家好中国建设银行云浮分行网站
  • 如何提高网站安全性织梦网站被挂马怎么处理
  • 淘宝网店网站建设目的制作二维码的平台
  • 创造网站软件wordpress 取消评论审核
  • 网站搭建规划推广软件是什么意思
  • 如何在手机上做自己的网站濮阳网站建设熊掌网络
  • 谷歌做网站专业定制网站公司
  • 湖南网站建设大全没有下载功能的网页视频怎么下载
  • 免费网站空间免备案秦皇岛市网站建设
  • 企业微信开发者平台深圳网站优化页面
  • 如何做好网站建设内容的策划企业开源建站系统
  • 搭建网站要不要给域名对方成都今天消息
  • 微网站 手机网站wordpress在线直播插件
  • 图库网站源码下载国基建设集团有限公司网站
  • 连锁餐饮网站建设网站运营经验分享ppt
  • 普陀做网站公司苏州网站设计公司简介
  • 门户网站做中国十大猎头公司
  • 网站建设制作与运营网页设计代码居中
  • wordpress 仿站教程建设银行网站怎么看交易记录
  • 红叶网站开发工作室汉子由来 外国人做的网站
  • 程序员建网站河北网上注册公司流程
  • 网站建设的书 推荐wordpress 控制每页显示文章数
  • 深圳网站建设公司大全软件开发公司好的有哪些
  • 清华大学绿色大学建设网站怎样免费做网站
  • 公司网站设计解决方案哈尔滨网页设计推广