C# 如何从mono内部打印线程堆栈
我在OSX上使用Mono 3.2.7。我希望我的程序能够触发诊断导出的线程转储C# 如何从mono内部打印线程堆栈,c#,mono,dllimport,C#,Mono,Dllimport,我在OSX上使用Mono 3.2.7。我希望我的程序能够触发诊断导出的线程转储 [DllImport("libmono", EntryPoint = "_mono_threads_request_thread_dump")] public static extern void MonoThreadsRequestThreadDump(); 调用此函数时,不会向stdout写入任何内容 删除前导下划线会导致Mono中出现预期的本机异常 我做错了什么,或者实现目标的更好方法是什么?使用[DllIm
[DllImport("libmono", EntryPoint = "_mono_threads_request_thread_dump")]
public static extern void MonoThreadsRequestThreadDump();
调用此函数时,不会向stdout写入任何内容
删除前导下划线会导致Mono中出现预期的本机异常
我做错了什么,或者实现目标的更好方法是什么?使用[DllImport(“\uu Internal”)]
而不是libmono。调用此方法是可行的,但仍然存在刷新标准输出的问题
更简单的方法是发送SIGQUIT信号,它将向stdout写入完整的线程转储。您可以发送自己的进程
SIGQUIT
信号(如上所述)。@Christian.K“您不应该期望它保持可用/稳定”是一个破坏交易的因素。是的,它会。但我不会对回答另一个问题的人有任何冒犯,我不会盲目地认为这是理所当然的。仅仅处理SIGQUIT并不是变得不稳定的理由。我会先做我自己的研究。SIGQUIT处理程序最后调用的函数似乎就是您提到的那个函数。我正尝试着做同样的事情,最好是从c#开始,但现在从gdb开始尝试。我可以得到线程的完整输出,但我必须持续刷新stdout几秒钟<代码>(gdb)调用fflush(0)