当 MATLAB 意外终止时
如果 MATLAB® 检测到内部错误,MATLAB 将会显示以下两个对话框之一:MathWorks® 崩溃报告程序或 MathWorks 崩溃分析程序。在这两种情况下,MATLAB 的内部状态均不可靠,因此不适合继续使用。如果这些对话框未出现,则您可以手动查找并发送崩溃文件。
MathWorks 崩溃报告程序
如果 MATLAB 崩溃,MathWorks 崩溃报告程序对话框将出现,提示您将崩溃报告发送到 MathWorks 技术支持。您可以选择提供再现步骤或描述在崩溃发生时您正在执行的操作。如果您点击发送报告并提供有效的电子邮件地址,您将很快收到一封自动电子邮件。如果您需要有关崩溃的帮助,请回复该电子邮件,技术支持人员将与您联系。如果您未收到电子邮件,您可以直接在 MathWorks 联系支持页上联系 MathWorks 技术支持。
崩溃报告程序显示与诊断问题原因相关的信息,这些信息因导致 MATLAB 崩溃的原因而异。如果您知道崩溃的原因,则可以在 MathWorks Bug 报告数据库中查找相关信息。
MathWorks 崩溃分析程序
如果 MATLAB 意外终止,MATLAB 将在您的计算机本地分析崩溃报告,以确定可能的原因。如果存在可能的解决方案,MATLAB 将显示 MathWorks 崩溃分析程序对话框。点击查看解决方案,以在您的浏览器中打开一个指向相关 MATLAB Answers™ 页面或 MathWorks 错误报告数据库的网页。要应用修复,必须重新启动 MATLAB。
如果提供的解决方案不适用,则点击发送报告并在窗口中输入再现步骤。
如果您应用修复后仍遇到崩溃,则点击发送报告或通过在 MathWorks 联系支持页上联系 MathWorks 技术支持创建一个支持案例。
手动发送崩溃文件
在某些情况下,崩溃报告程序不会打开。例如,如果您使用 -nodisplay 选项启动 MATLAB,则崩溃报告程序不可用。根据 MATLAB 崩溃的方式,它会生成文本崩溃报告或小型转储崩溃报告。它还可能生成其他日志文件。您可以将崩溃报告和日志文件通过电子邮件发送给 MathWorks 技术支持。
查找崩溃日志文件
当 MATLAB 崩溃时,它可能生成最多三个日志文件,其名称如下:
matlab_crash_dump.processIDjava.log.processIDhs_error_pidprocessID.log
在这些文件名中,processID 表示一个四位数的进程 ID。例如,您可能会看到名为 matlab_crash_dump.3944、java.log.3944 和 hs_error_pid3944.log 的崩溃转储。崩溃日志文件的位置取决于您的操作系统。您可以使用 MATLAB 命令行窗口或使用您的操作系统导航到它们。
您可以使用以下代码直接从 MATLAB 命令行窗口查找崩溃日志文件。以下代码返回表 files,其中包含您的崩溃日志。使用 date 列来确定哪些崩溃日志与您的崩溃相关。
prefixes = ["matlab_crash_dump"; "java.log"; "hs_err"]; files = struct; log_dir = "~"; if ispc log_dir = tempdir; end for i = 1:length(prefixes) log_pattern = fullfile(log_dir,prefixes(i)+"*"); if ~isempty(dir(log_pattern)) files = struct2table(dir(log_pattern)); files = sortrows(files,"datenum","descend") end end
您也可以使用以下方法在操作系统中手动搜索崩溃日志文件。
平台 | 系统导航 |
|---|---|
Windows® | 在 Windows 平台上,崩溃日志文件位于操作系统存储临时文件的文件夹中。要打开您的 %temp% C:\Users\%username%\AppData\Local\Temp |
| macOS | 在 macOS 平台上,崩溃日志文件保存到您的主文件夹。从 Finder 菜单栏中,选择转至 > 个人以打开您的个人文件夹。或者,从终端输入 |
| Linux® | 在 Linux 平台上,崩溃日志文件保存到您的主文件夹。从终端输入 |
查找崩溃报告文件夹
自 R2025a 起
如果您在上一节中列出的位置无法找到相关的崩溃日志文件,您的 crash_reports 文件夹中可能存放有小型转储文件。小型转储文件名是通用唯一标识符 (UUID),由一长串字母、数字和破折号组成,后跟文件扩展名 .dmp。例如,您可能会看到类似 ac60e913-886c-466b-ae99-bceef3c25f19.dmp 的小型转储文件名。您可以使用 函数查找您的 matlab.crashhandling.crashReportFoldercrash_reports 文件夹,您也可以手动导航到它。
您可以使用以下命令从 MATLAB 命令行窗口查找崩溃报告文件夹。
平台 | 文件夹 |
|---|---|
| Windows | cd(fullfile(matlab.crashhandling.crashReportFolder,"reports")) |
| macOS 和 Linux | cd(fullfile(matlab.crashhandling.crashReportFolder,"completed")) |
您可以使用以下代码返回所有小型转储。以下代码返回表 files,其中包含您的小型转储。使用 date 列来确定哪些小型转储与您的崩溃相关。
files = struct; report_dir = "completed"; if ispc report_dir = "reports"; end pattern = fullfile(matlab.crashhandling.crashReportFolder,report_dir,'*.dmp'); if ~isempty(dir(pattern)) files = struct2table(dir(pattern)); files = sortrows(files,"datenum","descend") end
您也可以手动导航到 crash_reports 文件夹。
平台 | 文件夹 |
|---|---|
| Windows | %LOCALAPPDATA%\MathWorks\release-hash\crash_reports |
| macOS | $HOME/Library/Application Support/MathWorks/release-hash/crash_reports |
| Linux | $HOME/.MathWorks/release-hash/crash_reports |
在这些文件夹路径中,release-hash 表示每个 MATLAB 安装的唯一标识符。因此,您可能会找到多个包含崩溃转储文件的文件夹。要找到相关的崩溃转储,请检查每个文件夹中是否有时间戳接近崩溃时间的 .dmp 文件。