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

我有一个.NET应用程序,我已经移植到.NET核心。 我正在Ubuntu 14.04上testing它。

我想弄清楚如何得到一个.dmp文件或当程序崩溃的Linux等价物。 我打电话给Environment.FailFast但据我所知,这不会像在Windows上生成.dmp文件一样。 根据这种情况 Environment.FailFast应该创build一个转储,但如果是我找不到它。

另外我已经尝试使用gcore手动创build转储。 这工作,但它需要很长时间来生成转储(我的应用程序不是那么大),我无法得到正确的调用堆栈在gdb之后,因为当我指向我的应用程序的DLL GDB不能识别它。

他在Linux上获得.NET Core应用程序的最佳方式是什么?

谢谢!

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

第一个ulimit -Sc unlimited作为你想运行这个进程的用户,因此可以创建任意大小的核心文件。 然后kill -4 <pid>

这应该会产生核心转储。 它应该可能在进程运行的目录中。

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

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

如果你这样配置: echo coredump > /proc/sys/kernel/core_pattern它会把一个名为coredump的文件写入当前目录。

如果你这样配置它: echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern它会创建一个像/tmp/cores/core.bash.8539.drehbahn-mbp.1236975953这样的文件/tmp/cores/core.bash.8539.drehbahn-mbp.1236975953 (见https://sigquit.wordpress.com/2009/03/13/the-core-pattern/

正如别人建议,也设置ulimit -S -c unlimited以允许任何大小的coredumps。

这里是一个博客文章,展示了如何在Linux下创建和分析.NET核心coredumps: http : //blogs.microsoft.co.il/sasha/2017/02/26/analyzing-a-net-core-core-翻斗上的Linux /