是否可以在程序崩溃后执行代码?
Is it possible to execute code after a program has crashed?
我希望能够在发生崩溃时从应用程序转储信息。 是否可以做一些事情,比如分配一个回调,在程序崩溃时调用? 回调将从应用程序转储数据。 转储的数据将是特定于应用程序的数据,可能位于堆栈转储中,但非程序员更容易读取。
操作系统是Windows 10。
程序崩溃后是否可以执行代码?
通常,根据操作系统的不同,进程将在终止之前从操作系统接收信号。信号处理程序(如果已注册并且信号未被屏蔽)有机会在进程终止之前执行代码。
终止后,进程不存在,无法执行代码,并且其内存不再可访问。
可以在信号处理程序中安全使用的功能是有限的。C++标准保证了以下功能的安全性(如果我错过了一些功能,可能并不详尽):
_Exit
abort
forward
initializer_list functions
memcpy
memmove
move
move_if_noexcept
numeric_limits members
quick_exit
signal
type traits
plain lock-free atomic operations
请注意,标准保证的任何功能都不能输出。您的操作系统也可能允许其他功能,并且应该有列出它们的文档。POSIX标准保证了open
和write
功能的安全性,可用于输出。
以上假设崩溃的来源在程序之外(例如,用户请求从操作系统终止,或者您的进程访问无效内存并且操作系统对此做出反应)。如果崩溃的来源来自程序内部,特别是如果std::terminate
是由您或标准库调用的,那么您可以改为注册一个std::terminate_handler
,它不像信号处理程序那样受到限制。
Windows程序的一个可能的解决方案是使用MiniDumpWriteDump函数。 本页介绍在 Windows 中发生崩溃时编写小型转储的不同替代方法 - https://learn.microsoft.com/en-us/windows/desktop/dxtecharts/crash-dump-analysis
相关文章:
- 需要将此代码更改为执行代码
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- 单步执行代码时重复上一行
- 如何使用介子在C++中执行代码覆盖?
- Visual Studio 2017,C++,在单步执行代码时指向错误的行
- 在 R 中执行C++代码
- 通过 dll 注入在主线程中执行代码
- 无法在 c++ 中循环后执行代码
- 执行C 代码时快速频繁的文件访问
- 执行 C++ 代码后出错
- 一个人如何从代表函数的字符串中执行运行时执行C 代码
- 是否可以在程序崩溃后执行代码?
- 第一次在 Linux 上执行 c++ 代码的时间非常慢
- 计算 JSON 中的条目数并相应地执行代码
- 将在 CATCH 块之后执行代码
- 分析执行C++代码的每一行所花费的确切时间
- 我在执行代码时不断得到"Bus Error"?
- c while()..执行代码行的条件
- 从并行线程在主 Maya 线程上执行代码
- 在调用GNUPLOT之后,如何继续执行C 代码