如何使用VSCode调试Linux核心转储?

问题描述 投票:0回答:1

我故意从我正在使用VSCode编写的C ++应用程序生成核心转储。我无法弄清楚如何调试核心转储。有没有人有这方面的经验,他们愿意分享?

*****更新*****我相信我现在有效。我为核心文件创建了第二个调试配置。我需要添加指向生成的转储文件的“coreDumpPath”选项。我还需要删除始终构建新可执行文件的preLaunchTask选项。


linux visual-studio-code coredump
1个回答
2
投票

您不使用source code editor(甚至VSCode)来调试core转储(因为core文件没有文本格式)。你使用gdb(或者其他一些debugger,例如lldb)。 GDB有一个非常好的user manual,我强烈建议您阅读。你也不使用VSCode编译你的C ++代码,但compiler,如GCCClang(可能VSCode可能配置为你启动g++)。

您也不需要故意生成核心转储。在breakpoint下设置gdb通常更简单。您可以使用gcore(1)生成正在运行的进程的核心。您可以使用gdb-p选项将gdb(1)附加到正在运行的进程中。我看到极少数情况下,有意生成核心转储是有用的。但当然abort(3)(也被assert(3)使用)产生了core转储。

您的应用程序最好使用-g调试信息进行编译(使用to GCC选项DWARF或Clang)。假设您的应用程序可执行文件是一些yourapp可执行文件。然后你调试核心转储(对于core文件,请参阅core(5)了解更多;请注意gdb(1)core(5) man页面中提到,由man core命令提供)使用gdb yourapp core

一些源代码编辑器能够运行gdb(我的编辑器是emacs,它能够与gdb一起运行M-x gdb)。您应该深入了解源代码编辑器的文档,以了解如何执行此操作。

但我建议在终端的命令行中使用gdb。这是一个非常方便的工具。请参阅this对相关问题的回答。

gdb正在使用非常低级别的ptrace(2)系统调用来设置断点等等。你几乎从不需要ptrace(除非你编写自己的调试器,这可能需要多年的工作),但你使用gdb使用ptrace

PS。如何从VSCode运行gdb是一个不同的问题。由于我不使用VSCode,我无法回答它。它甚至可能不值得做。即使有30年的emacs经验,我经常在码头上运行gdb。因为它比从emacs(或VSCode)运行它更简单。

NB。这些天,在2019年,“源代码编辑器”是“IDE”的近似同义词。实践中的两个位置都指的是相同的产品,但它们的呈现方式不同。您可以将emacs称为IDE,我(和GNU社区)更喜欢将其称为源代码编辑器,但我们都将使用它来做同样的事情:很好地编写和浏览并使用source code并构建和调试它。

© www.soinside.com 2019 - 2024. All rights reserved.