如何在Linux上转储.NET核心应用程序

sho*_*der 23 .net linux dump .net-core

我有一个.NET应用程序,我已移植到.NET Core.我在Ubuntu 14.04上测试它.

我试图弄清楚如何在程序崩溃时获取.dmp文件或Linux等效文件.我打电话,Environment.FailFast但据我所知,这不会像在Windows上那样生成.dmp文件.根据这种情况 Environment.FailFast应该创建一个转储,但如果它是我找不到它.

另外我尝试使用手动创建转储gcore.这可行但是生成转储需要很长时间(我的应用程序不是那么大)并且我无法在gdb之后获得正确的callstacks,因为当我将gdb指向我的应用程序时它无法识别它.

在Linux上获取.NET Core应用程序转储的最佳方法是什么?

谢谢!

chr*_*isn 5

linux coredumps 的生成由/proc/sys/kernel/core_pattern. 如果某些信号(例如SIGSEGVSIGQUIT)导致进程终止,则进程内存的映像基本上会写入该文件。如果它以管道符号开头|,则可以将其流式传输到执行转储分析的应用程序中。它记录在这里:http : //man7.org/linux/man-pages/man5/core.5.html

如果你这样配置:

   echo coredump > /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)

它会将一个名为的文件写入coredump当前目录。

如果你这样配置:

   echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern
Run Code Online (Sandbox Code Playgroud)

它将创建一个文件/tmp/cores/core.bash.8539.drehbahn-mbp.1236975953(参见https://sigquit.wordpress.com/2009/03/13/the-core-pattern/

正如其他人所建议的,也设置ulimit -S -c unlimited为允许任何大小的核心转储。

这是一篇博客文章,展示了如何在 linux 下创建和分析 .NET Core coredumps:http : //blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-转储到 linux/


Nig*_*nns 2

你想要一个核心转储,这是内置于操作系统中的。

首先ulimit -Sc unlimited,作为您想要运行该进程的用户,以便允许创建任何大小的核心文件。然后kill -4 <pid>

这应该生成核心转储。它可能应该位于运行进程的目录中。

如果您无法以应用程序运行的用户身份登录,则需要将其放入 limit.conf 中。