UE4调试手段:主动崩溃与“.pdb”解析“.dmp”文件

主动崩溃

尝试了一些做法,发现 check(false) 对于Development配置而言,是有效果的,代码如下:

// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{Super::BeginPlay();check(false); // 尝试用这个来主动崩溃
}

以Windows配置出包,并运行,能够成功崩溃:

VS解析出“.dmp”崩溃堆栈

在UE4中,PDB文件是一种调试符号文件,用于在程序崩溃或调试时提供有关代码的详细信息。PDB代表“Program Database”。

PDB文件包含了编译后的二进制可执行文件(如游戏客户端或服务器)的调试信息,包括函数、变量、类型信息以及源代码的映射关系。它与编译器生成的可执行文件相对应,可以帮助调试器在崩溃或调试时将二进制代码映射回源代码。

使用PDB文件,开发者可以在调试过程中获得更多的上下文信息,例如函数调用堆栈、变量的值和类型等。这对于定位和修复代码中的问题非常有帮助,特别是在复杂的代码库中。

在UE4中,当你构建项目时,编译器会生成PDB文件。这些PDB文件通常与生成的可执行文件一起分发给测试人员或其他开发者,以便在调试过程中使用。请注意,PDB文件通常比可执行文件本身要大,因为它们包含了额外的调试信息。

下面是解析出崩溃堆栈的实操做法:

一、使用Everything 在Demo工程中搜索到pdb如下:

{我的工程路径}\Binaries\Win64\{我的工程名}.pdb

二、找到崩溃文件:

{我的打包输出路径}\WindowsNoEditor\{工程名}\Saved\Crashes\UE4CC-Windows-9A446C114FA6E8653F612791A99C2D3E_0000\UE4Minidump.dmp

三、用VS打开我的工程.sln

四、VS中看到“仅限本机进行调试”,但点击前,需要先在VS的界面中点击“手动选择PDB”(sorry我没有截到图),并选择第一步骤里找到的pdb。再点击下图红框处

五、能够找到错误的代码:

日志中包含堆栈信息(未成功)

我希望直接在日志中打印出堆栈信息,这样就不需要主动崩溃了,但没有成功。

根据 https://zhuanlan.zhihu.com/p/374231773  、 虚幻引擎应用实例分享(十):虚幻的断言 | indienova 独立游戏  、  https://hackmd.io/@NotYet/SypDZX_SL   的介绍,使用FDebug::DumpStackTraceToLog(TEXT("日志的自定义开头H")),含义是以H字串开头的日志会自动打印堆栈,代码如下:

bool FPakPlatformFile::Mount(const TCHAR* InPakFilename, uint32 PakOrder, const TCHAR* InPath /*= NULL*/, bool bLoadIndex /*= true*/)
{// 将 LogPakFile 开头的信息都打印出堆栈FDebug::DumpStackTraceToLog(TEXT("LogPakFile"));// 我希望有堆栈的日志:UE_LOG(LogPakFile, Error, TEXT("watch trace_info2 %s  \n \"%s\" until encryption key '%s' becomes available"),  InPakFilename, InPath);

实际运行时,看到都是Unknown。

Error: LogPakFile
Error: 
Error: [Callstack] 0x00007ff7f17f9452 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f17faad1 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f17f249e DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7eeb03adc DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f1a675c6 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f2bb6ccf DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f1ffe967 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f2b63ede DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f2a8d096 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f2a30241 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f201ef5b DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7ee186617 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7ee19d0b9 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7ee1a1c55 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7ee1a1e6a DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7ee1c4144 DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ff7f3c53ade DeltaForce.exe!UnknownFunction []
Error: [Callstack] 0x00007ffc077e7374 KERNEL32.DLL!UnknownFunction []
Error: [Callstack] 0x00007ffc08d3cc91 ntdll.dll!UnknownFunction []

暂不深究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3281415.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于 SSM 的电器网上订购系统

基于 SSM 的电器网上订购系统 开发语言:Java数据库:MySQL技术:Spring、JSP、MyBatis工具:MyEclipse/IDEA、Tomcat 课题背景 近年来,随着Internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章:最后 定义 单例模式是一种创建型设计模式,它用来保证一个类只有一个实…

python做简单爬虫的一些常用组件

文章目录 前言requestjsonbs4 前言 最近一直在做零散的一次性的爬虫工作,基本都是用python开发的,整理一下python做小规模爬虫开发常用的一些工具类 request python最简单的发http请求的包,request.get和request.post就可以搞定绝大部分的…

【Github】Github 上commit后 contribution 绿格子不显示 | Github绿格子 | Github贡献度不显示

一、Github 消失的绿点 1、贡献值为什么没了? 2、选择要显示的贡献 如下配置 二、如何解决消失的绿点? 1、添加邮箱 确保邮箱的设置必须选择一个邮箱邮箱 2、git config 添加邮箱 设置邮箱如下: git config --local user.email 316434776…

使用标量函数实现 EF Core 的实用方法

一.介绍 在构建应用程序时,您可能使用标量函数在数据库端实现一些逻辑。在 SQL 中,标量函数是一种对单个值或少量输入值进行操作并始终返回单个值作为输出的函数。这些函数本质上是可重复使用的代码块,用于对数据执行计算或操作。 以下是标…

Java面试——Tomcat

优质博文:IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和…

Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解

目录 1、前言: 2、数据库搭建 : 建表语句: 3、后端实现,将图片存储进数据库: 思想: 找到图片位置(如下图操作) 图片转为Fileinputstream流的工具类(可直接copy&#…

系统学习渗透测试:从零到精通的全面指南

渗透测试,作为网络安全领域的一项重要技术,旨在通过模拟黑客攻击来评估计算机系统的安全性。对于想要系统学习渗透测试的人来说,这既是一条充满挑战的道路,也是一次深入了解网络安全的宝贵机会。本文将从基础知识、技能提升、实战…

【释放品牌魅力,开启营销新篇章】—— 短视频矩阵营销系统源码

【释放品牌魅力,开启营销新篇章】—— 短视频矩阵营销系统在这个数字化高速发展的时代,您是否还在为品牌曝光度不足、营销效果不佳而苦恼?来吧,让我们一起探索全新的解决方案——短视频矩阵营销系统! 在这个数字化高速…

NC 缺失的第一个正整数

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个无重…

AI初学者必看: 什么是大型语言模型 (LLM)?

介绍 “人工智能(AI)”一词于 1956 年问世,如今已为大家所熟知。然而,在 ChatGPT 迅速流行之前,AI 的使用和讨论大多局限于科学研究或虚构电影。如今,AI 尤其是生成式 AI 已成为大家热议的话题。 初学者生…

详解校门外的树(树状数组)

前言 在看之前建议先看一下 【学习笔记】详解树状数组-CSDN博客 题目 思路 建立两个树状数组,维护左括号与右括号。 假设有一个长度为10的数轴,我们要将区间[ 2 , 5 ]中种树,这时,我们将 2 处放一个左括号 ” ( ” ,5处放一个 ” )” &…

3DMAX神经网络插件Neuron使用方法详解

3DMAX神经网络插件Neuron使用方法 3DMAX神经网络插件Neuron,从一系列样条曲线创建具有分支结构的几何体。适用于如神经网络、血管、树枝等形状的3D建模。 【适用版本】 3dMax2016及更高(不仅限于此范围) 【安装方法】 Neuron插件无需安装&a…

【C++】跳转语句-continue语句

continue语法特点&#xff1a; 中止循环后会继续执行下面循环&#xff08;除了continue所跳出的那些执行操作不会执行&#xff09; 这也是额continue语句和break语句最大的区别 break是直接跳出循环不再执行下面步骤 #include<iostream> using namespace std;int main…

收集树中的金币

提示 1 定义一个点的度数为其邻居个数。如果一个点的度数为 1&#xff0c;那么这个点叫做叶子节点&#xff0c;例如示例 2 的 3,4,6,7 都是叶子节点。 如果叶子节点没有金币&#xff0c;我们有必要移动到叶子节点吗&#xff1f;没有必要。 那么可以先把这些没有金币的叶子节点…

等保学习干货|等保测评2.0技术中间件自查阶段,零基础入门到精通,收藏这一篇就够了

0x01 前言 以下是根据我国网络安全体系制订的一系列保护流程进行的等级保护测评。该测评针对已有和将上线的业务服务的基础设施&#xff08;系统、数据库、中间件等&#xff09;&#xff0c;执行一系列检查以确保安全合规。本次先行分享学习等保中的技术自查阶段知识&#xff…

Android GreenDao 升级 保留旧表数据

Android GreenDao 升级 保留旧表数据 大川的川关注IP属地: 北京 0.2052019.08.05 11:54:36字数 270阅读 363 瓦力和伊娃 GreenDao升级库版本号之后&#xff0c;以前的旧数据没有了&#xff0c;为啥&#xff0c;因为GreenDao在升级的时候会删除旧库&#xff0c;创建新库&#…

【超详细含图】Ubuntu系统忘记root密码的解决方法

1.启动或者重启Ubuntu长按shift进入grub菜单&#xff1b; 选第二个&#xff0c;按住e进入 2.选择recovery mode进入Recovery Menu界面&#xff0c; 选择root Drop to root shell prompt* 3.修改root密码操作&#xff1a; #passwd 输入新密码&#xff1a;# 再输入一遍密码&…

LLM之本地部署GraphRAG(GLM-4+Xinference的embedding模型)(附带ollma部署方式)

前言 有空再写 微软开源的GraphRAG默认是使用openai的接口的&#xff08;GPT的接口那是要money的&#xff09;&#xff0c;于是就研究了如何使用开源模型本地部署。 源码地址&#xff1a;https://github.com/microsoft/graphrag 操作文档&#xff1a;https://microsoft.git…

springBoot+protobuf(全程Protocol Buffers协议)简单入门

了解Protocol Buffers协议 Protocal Buffers是google推出的一种序列化协议&#xff0c;用于结构化的数据序列化、反序列化。 官方解释&#xff1a;Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通…