我的应用程序经常崩溃,我想知道确切的堆栈跟踪和变量。有一个boost stacktrace可以跟踪函数,但不能跟踪变量值。使用setrlimit设置内核转储限制应用程序中的()运行正常,并且在使用调试符号编译时生成了核心转储。我需要的是核心转储文件的特定名称(以及存储它的位置)。有没有办法在应用程序内部更改它,而不为整个系统更改它?
1mrurvl11#
不,你不能这么做,因为在核心转储生成的那一刻,你的进程已经死了,控制权在内核上,内核不再知道你的进程的配置。正如您所发现的,有一个系统范围的核心转储处理程序可以更改,但不是针对每个进程的。但是,您可以安装一个信号处理程序,它将为您转储进程(但是,如果您的进程是多线程的,则必须停止线程)。您可能需要查看Google Breakpad,以获得捕获迷你转储并将其发送到所需位置的库和系统。它使用like that
1条答案
按热度按时间1mrurvl11#
不,你不能这么做,因为在核心转储生成的那一刻,你的进程已经死了,控制权在内核上,内核不再知道你的进程的配置。
正如您所发现的,有一个系统范围的核心转储处理程序可以更改,但不是针对每个进程的。
但是,您可以安装一个信号处理程序,它将为您转储进程(但是,如果您的进程是多线程的,则必须停止线程)。
您可能需要查看Google Breakpad,以获得捕获迷你转储并将其发送到所需位置的库和系统。
它使用like that