《Payday2》如何查看报错

此页面不属于【日本语教学】内容

在《Payday2》(下称“游戏”)中,多个模组(.lua)脚本很可能因为冲突而导致崩溃(crash)。 游戏崩溃后,将会生成一个崩溃日志(crashlog.txt);此文章的主题意在教学如何分析日志。

崩溃日志结构

崩溃日志的结构是固定的,每次生成的崩溃日志结构如下:

------------------------------------长虚线表示报错日志开头-------------------------------
//(此小节主要说明崩溃时间和主要原因)
Wed Feb 09 20:33:56 2022


Application has crashed: C++ exception
bad allocation

-------------------------------
//(调用栈)
Callstack:

         payday2_win32_release  (???)     zip_get_name                                        
         payday2_win32_release  (???)     ???                                                 
         payday2_win32_release  (???)     ???                                                 
         payday2_win32_release  (???)     ???                                                 
         payday2_win32_release  (???)     ???                                                 
                           ???  (???)     ???                                                 
                           ???  (???)     ???                                                 
                           ???  (???)     ???                                                 
                           ???  (???)     ???                                                 


-------------------------------
//(错误详细原因)
Current thread: Main
Script stack:
                 GetModImage()  @mods/base/req/BLTMod.lua:289                       
                        init()  @mods/base/req/ui/BLTModItem.lua:112                
                         new()  @mods/base/req/utils/UtilsClass.lua:26              
         update_visible_mods()  @mods/base/req/ui/BLTModsGui.lua:280                
                      _setup()  @mods/base/req/ui/BLTModsGui.lua:229                
                        init()  @mods/base/req/ui/BLTModsGui.lua:46                 
                         new()  @mods/base/req/utils/UtilsClass.lua:26              
                      create()  @mods/base/req/core/MenuHelper.lua:669              
       set_active_components()  lib/managers/menu/menucomponentmanager.lua:490      
       set_active_components()  @mods/base/lua/MenuComponentManager.lua:18          
                                core/lib/managers/menu/coremenulogic.lua:89         
       _execute_action_queue()  core/lib/managers/menu/coremenulogic.lua:54  
                      update()  core/lib/managers/menu/coremenulogic.lua:64         
                      update()  core/lib/managers/menu/coremenumanager.lua:155  
                      update()  lib/managers/menumanagerpd2.lua:20                  
                      update()  lib/setups/setup.lua:879  
                      update()  lib/setups/menusetup.lua:358                        
                      update()  @mods/base/lua/MenuSetup.lua:5  
                      		core/lib/setups/coresetup.lua:557                   

-------------------------------
//(系统信息)
System information:
	Application version : 1.116.69
	CPU : AMD Ryzen 7 4800H with Radeon Graphics (8 cores); SSE; SSE2; SSE3; SSSE3; SSE4.1
	DirectX : 12.0 
	GPU : NVIDIA GeForce RTX 2060 / nvldumd.dll[27.21.14.5749]
	Language : schinese
	Memory :  16253MB 324KB
	OS : 6.2.9200 () 0x300-0x1 (64 bits)
	Physics : threaded
	Renderer : DX9 threaded
	Sound : Realtek Semiconductor Corp. (WH-xm3000 (Realtek(R) Audio))



----------------------------------------------------------------------

由此可见,日志被分为4个结构

  • 崩溃时间和主要原因

  • 调用栈

  • 错误详细原因

  • 系统信息

日志的重点,当然是错误详细原因;当然崩溃时间和主要原因也可以帮你找出问题。因此,下文将会用两个小节说明如何解析这两个问题。

错误详细原因

在【Script stack】(【脚本栈】)后,会详细地将报错瞬间调用的脚本写出。 它们分为两个部分,并且按照以下结构:

举个简单的例子,像是 【weapon factory manager】与【dynamic resource manager】冲突载入引起的错误 是这个样子的:

调用函数中,说明了目前进行到了哪个步骤,如同举例:

游戏崩溃日志文件的报错,都可以通过这种办法进行翻译。

circle-exclamation

然而,前面四行并不能看出问题的所在,看来是顺利载入了。 让我们看向最后两行:

由此可见,这是两个mod在调用指针的时候冲突导致的游戏崩溃。

以上,此教程已经完成了。 但是,只有简单例子并不能很好的理解,所以再加一个常见的例子:HUD类报错

可见,在步骤(第8行)setupplayerinfohudpd2() 直译是:初始化游戏玩家HUD (此步骤属于WolfHUD创造的函数) 同时,也载入了另一个HUD 第9、10、11行: setup | loadHUD | initfinalize 即分三个步骤初始化了另一个HUD管理Mod:HUD Manager 之后,游戏在两个Mod初始化后,core/lib/setups/coresetup.lua,游戏核心停止。

根据上述部分可以推断出,是两个Hud Mod导致的游戏崩溃。

如何进行处理

在找出是何种原因导致的游戏崩溃后,你可以进行处理:

  1. 简单处理:删除冲突Mod

  2. 兼容处理:修复不兼容部分(需要一定的C++/C#/lua知识)

一般地,如果你不希望进行兼容性处理,在删除Mod后,尝试联系Mod作者,询问作者是否可以作出兼容性修复。

结语

教程已经完成。 感谢您的阅读,转载请注明出处(本网站即可)。

circle-check

最后更新于