VirtualBox

创建核心转储以帮助分析 VirtualBox 崩溃

核心转储是一个技术术语,指的是一个文件,其中包含应用程序在给定时间的状态的详细信息,以开发人员可以利用的形式呈现。它们对于追查应用程序崩溃的原因特别有帮助,这就是为什么许多系统可以在应用程序崩溃发生时被告知自动创建一个核心转储。

如何在 Linux 上创建核心转储

VirtualBox(从 2.0.0 版本开始)是一个系统应用程序,可以从用户帐户启动而无需特殊权限——一个所谓的“setuid”应用程序。由于通常不允许为这些敏感应用程序创建核心转储,因此您必须在启动计算机之后但在您想要核心转储的崩溃发生之前明确允许它们。这可以通过在命令行输入以下命令来完成(您的用户帐户必须被允许使用“sudo”命令)

$ echo -n 1 | sudo tee /proc/sys/fs/suid_dumpable

在 SUSE 系统上创建核心转储

https://www.suse.com/support/kb/doc/?id=3054866

在大多数 Linux 系统上,实际创建核心转储的过程是相似的,但在 Ubuntu 上,由于 Ubuntu 崩溃报告工具 (Apport) 的存在,它略有不同。

在 Ubuntu 系统上创建核心转储

在您的主目录中创建一个名为 ".config/apport/settings" 的文件,内容如下:

[main]
unpackaged=true

并运行 VirtualBox。在您创建文件后,VirtualBox 的任何崩溃都将导致在 /var/crash 中创建一个崩溃报告,名称类似 "_usr_lib_virtualbox_VirtualBox.1000.crash"。不要接受“发送错误报告以帮助解决此问题”的提议。您可以使用 "apport-unpack" 工具提取核心文件,或者如果您不确定,可以直接将完整的崩溃报告文件发送给我们。要阻止为非系统应用程序创建崩溃文件,请删除您再次创建的文件。

在非 Ubuntu 系统上创建核心转储

从命令行启动 VirtualBox(例如 xterm)

$ ulimit -c unlimited
$ echo -n 1 | sudo tee /proc/sys/fs/suid_dumpable
$ VirtualBox

或者如果可能,直接启动虚拟机

$ ulimit -c unlimited
$ echo -n 1 | sudo tee /proc/sys/kernel/core_uses_pid
$ /usr/lib/virtualbox/VirtualBoxVM -startvm VM_NAME

确保没有启动脚本(~/.bashrc, ~/.bash_profile, ~/.profile)包含诸如ulimit -c 0之类的指令,因为一旦限制设置为零就无法增加。

如果您以无头模式运行虚拟机,请使用上述的 /usr/lib/virtualbox/VBoxHeadless 而不是 /usr/lib/virtualbox/VirtualBoxVM

当 VirtualBox 或其某个进程崩溃时,会在当前目录中创建一个 core.<pid> 文件。请注意,核心转储可能非常庞大。在将其提交给错误报告之前,请压缩该文件。或者最好不要将文件附加到报告中。请注意,此核心转储可能包含您的客户机内存转储,其中可能包含敏感信息。如果压缩文件小于 5MB,请将其发送到 alexander _dot_ eichner _at_ oracle _dot_ com。否则请直接联系我,以便我们寻找其他解决方案将核心转储发送给我们。

如果创建了多个核心文件,您可以使用以下命令检查是哪个进程创建了它们:

$ file core.<pid>

以确保发送正确的文件。

如何在 Mac OS X 上创建转储

要在 Mac OS X 上创建核心转储,请从命令行启动 VirtualBox

$ ulimit -c unlimited
$ VirtualBox

或者最好直接启动虚拟机

$ ulimit -c unlimited
$ /Applications/VirtualBox.app/Contents/MacOS/VirtualBoxVM -startvm VM_NAME

确保没有启动脚本(~/.bashrc, ~/.bash_profile, ~/.profile)包含诸如ulimit -c 0之类的指令,因为一旦限制设置为零就无法增加。

或者(对于 Finder 和 launchpad)

$ launchctl limit core unlimited

或者为了永久效果,可以在 $HOME/.launchd.conf 或 /etc/launchd.conf 中指定相同的内容。

核心文件可以在 /cores 文件夹中找到。该目录必须对执行核心转储的程序可写。默认情况下,它只对 root 和 admin 组的用户可写。如果您需要普通用户能够转储核心,您可以使用以下命令使该目录对所有用户可写:

$ sudo chmod o+w /cores

如何在 Solaris 上创建转储

要在 Solaris 上启用核心转储,请以 root 身份运行以下命令

# coreadm -g /var/cores/core.%f.%p -i core.%f.%p \
  -e global -e process -e global-setid -e proc-setid -e log

核心文件将最终存储在 /var/cores/ 文件夹中。全局转储将最终存储在 /var/crash/<hostname>/ 中。

系统核心转储需要通过 dumpadm 启用。重要的是将“Savecore enabled”设置为“yes”(使用 dumpadm -y)。配置应如下所示:

# dumpadm
      Dump content: kernel pages
       Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/myhostname
  Savecore enabled: yes
   Save compressed: on

现在要获取虚拟机进程的核心转储,请运行:

VBoxManage startvm <vmname>

强制 VirtualBox 以核心转储终止

有时需要强制 VirtualBox 进程终止,例如,虚拟机因某种未知原因挂起。在 Linux 上,可以按如下方式完成:

$ ulimit -c unlimited
$ sudo echo -n 1 > /proc/sys/fs/suid_dumpable
$ /usr/lib/virtualbox/VirtualBoxVM -startvm VM_NAME &
$ pidof VirtualBoxVM
7145
$ kill -4 7145

作为 kill 的替代,您可以执行

$ pidof VirtualBoxVM
7145
$ gcore 7145

在 Mac OS X 上

$ ulimit -c unlimited
$ /Applications/VirtualBox.app/Contents/MacOS/VirtualBoxVM -startvm VM_NAME &
$ ps aux|grep VirtualBoxVM
... 7145 ... VirtualBoxVM ...
$ kill -4 7145

在 Solaris 上

# ulimit -c unlimited
# /opt/VirtualBox/amd64/bin/VirtualBoxVM -startvm VM_NAME &
# ps -ef|grep VirtualBoxVM
... 7145 ... VirtualBoxVM ...
# kill -4 7145

您可以根据 coreadm 中指定的位置找到结果核心文件

# coreadm

传递信号编号 4 (SIGILL) 是必不可少的!同样的规则也适用于替代前端 VBoxHeadlessVBoxSDL

Windows 上的小型转储

在 Windows 上,所谓的 Mini Dumps 可用于应用程序崩溃和/或调查目的。为了启用为特定应用程序创建此类 Mini Dumps,Windows 提供了以下工具:

  • 对于 Windows XP、Vista、7、8(.1) 和 Windows 10:Windows 错误报告 (WER)
  • 对于较旧的 Windows 版本,例如 Windows NT 4 或 Windows 2000:Dr. WatsonVirtualBox 在这些平台上已不再支持。

如果您遇到了蓝屏 (BSOD),这意味着您的电脑在您使用 VirtualBox 后无法恢复并需要重新启动,那么您需要获取内核转储

使用 Windows 错误报告 (WER) 启用小型转储

  • 以管理员身份打开 regedit.exe 并创建键
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
    
    如果它尚不存在。
  • 创建一个名为 DumpType 的 REG_DWORD 注册表值,值为 2(表示完整转储)。
  • 创建一个名为 DumpFolder 的 REG_SZ 注册表值,其中包含用于存储小型转储的文件夹路径,例如 C:\Windows\Temp

下次 VirtualBox 崩溃时,您会在上面指定的文件夹中找到新创建的小型转储。但是,在将这些小型转储发送给我们之前,请先用 ZIP(例如 7zip)或 RAR 压缩它们,以减小总文件大小。这也为您节省了上传文件的时间!

欲了解更多详细信息,请访问页面。

使用进程资源管理器

进程资源管理器(Windows Sysinternals)允许使用上下文菜单创建小型转储或完整的应用程序转储。当然,这仅在进程未因崩溃而终止时才有用。

当发生蓝屏 (BSOD) 时创建内核转储

如果发生蓝屏,Windows 应自动为您创建内核转储。但是,您可能希望启用创建更详细的内核转储,这将对我们更有帮助。

为此,请(以管理员身份)通过以下方式进入系统故障设置:

Start -> Control Panel -> System -> Advanced system settings (left side) -> Tab "Advanced" -> "Startup and Recovery"

在此页面的“系统故障”区域,您可以将“写入调试信息”更改为“内核内存转储”。“转储文件”路径会显示此文件将创建的位置——默认位置是 C:\Windows\MEMORY.DMP

请注意,每次发生蓝屏时,上述文件都会被覆盖!这意味着,如果您想向我们提供正确的信息,则应将此文件复制到安全位置,以免丢失。此外,您电脑上的其他应用程序也可能导致蓝屏,因此请仅向我们发送在使用 VirtualBox 时直接创建的内核转储(并且您的电脑显示了蓝屏)。

注意:但是,在将这些内核转储发送给我们之前,请首先使用 ZIP(例如 7zip)或 RAR 压缩它们,以减小总文件大小。这也为您节省了上传文件的时间!

隐私信息:另请注意,上述内核转储可能包含与您和您的系统无关的敏感和私人信息,例如内存中存储的密码。不幸的是,在这种情况下这是不可避免的,因为内核转储本质上是您计算机 RAM(主内存)的未修改和未过滤部分。

上次修改时间 5 天前 上次修改于 2025 年 07 月 18 日下午 02:53:22
注意: 查看 TracWiki 获取使用维基的帮助。

© 2025 Oracle 支持 隐私 / 不要出售我的信息 使用条款 商标政策 自动化访问礼仪