CLion教程-Core Dump调试

=CLion支持使用核心转储(macOS、Linux)和minidump(Windows)文件进行事后调试。这些文件是系统在程序崩溃或以异常方式终止时捕获的进程内存的副本。
由于唯一可用的数据是崩溃时的内存快照,因此无法逐步执行程序,但您可以调查相应的源代码、帧和变量。还可以使用内存视图、反汇编视图和调试器控制台。
配置核心转储调试会话
使用以下选项之一:
从主菜单中选择Run | Open Core Dump,或者从Help | Find Action (CtrlShift+A)调用此操作。
- 如果项目中没有核心转储调试配置,将立即显示“打开核心转储”对话框。否则,从弹出菜单中选择“新建核心转储”。
- 按照第2步中的说明进行操作。
- 如果项目中没有核心转储调试配置,将立即显示“打开核心转储”对话框。否则,从弹出菜单中选择“新建核心转储”。
- 手动创建核心转储调试配置。转到Run | Edit Configurations,单击
,然后从模板列表中选择核心转储调试。
配置以下设置:
调试器
- 选择要使用的调试器:捆绑的LLDB、捆绑的GDB、工具链的GDB或自定义外部GDB。
- 默认调试器是捆绑的LLDB,如果默认工具链配置为LLDB,否则是捆绑的GDB。
不能使用GDB调试Windows minidumps。选择GDB作为调试器的选项适用于在Windows上打开Linux/macOS核心转储文件的情况。
- 核心转储
提供核心转储文件的路径,或使用文件选择器选择它。确保文件具有读取访问权限。
在Windows上,核心转储文件存储在%LOCALAPPDATA%CrashDumps目录中。
符号文件(LLDB可选,GDB需要)
- 符号文件对于CLion正确识别程序符号并导航到正确的源代码位置很重要。这可以是具有调试信息的程序二进制文件或单独的符号文件。
- 请注意,链接库的符号如果没有调试信息构建,则仅当相关的调试符号位于默认搜索目录中时才可用。
如果您正在调试一个没有调试信息的二进制文件中的共享对象库,请避免将.so文件指定为符号文件。使用.so作为符号文件,调试器会将源位置解析为两个位置:一个是内存中的实际地址,另一个是.so文件内的文件地址,而后者不是有效的内存地址。结果,逐步执行和其他调试操作不会正常工作。
LLDB
- LLDB可以检测到与所选核心转储对应的二进制文件。
- 但是,如果您要调查的崩溃发生在没有调试符号的二进制文件中,您需要明确地向LLDB提供它们。为此,请指定非剥离版本的二进制文件或单独的符号文件的路径。
- GDB
对于GDB,必须手动指定非剥离的二进制文件或单独的符号文件。
- Sysroot
如果您要调试从另一台具有非默认位置的库的二进制文件构建的核心转储,请指定sysroot
路径。 - 路径映射
如果二进制文件在具有不同文件/目录名称或路径的其他计算机上构建,则使用此窗格设置路径映射。
启动核心转储会话
对于"打开核心转储"操作,CLion会自动创建相应的配置并启动它。
- 如果在项目中存在现有配置,它将打开这些配置的列表,提供创建新配置的选项:
- 如果在项目中存在现有配置,它将打开这些配置的列表,提供创建新配置的选项:
- 如果您手动创建了核心转储调试配置,请在切换器中选择它,然后按
(ShiftF9)。
核心转储调试过程
当您开始核心转储调试会话时,CLion会自动打开相应的源代码和调试工具窗口。与常规调试会话类似,您可以使用“Frames”选项卡和“Variables”窗格,以及Memory和Disassembly视图。还可以使用调试器控制台运行调试器命令。
请注意,逐步执行已禁用,控制台选项卡中不显示进程输出。
当前问题和限制
- 远程核心转储调试目前正在开发中。
- 在macOS上,捆绑的GDB可能无法启动,出现“没有核心文件处理程序识别格式”错误,这是GDB在macOS上的一个已知问题。
- 评估表达式功能可能受到限制。