从另一个进程中捕获异常

时间:2014-06-02 07:32:46

标签: linux linux-kernel operating-system

我想知道在进程中的任何进程或线程中捕获异常及其相关堆栈跟踪的可能性。甚至可能(比如在Linux中)?请看一下我想要做的一个例子:

  • 操作系统:Linux
  • P1:Java Process(在其中运行一些应用程序)
  • P2:Python Process
  • P3:C ++流程
  • P4:我的自定义监控代码(侦听可能在P1,P2,P3中发生的异常)

让我们说P1生成一个异常,它发生在代码中(比如NullPointerException),它在Java代码中正确捕获并运行相关的异常处理过程。同样,P2和P3可能会在以后发生异常。

P4(另一个进程只监听P1,P2和P3中的异常)是否可以捕获P1,P2,P3中的所有已处理/未处理的异常?它甚至可以在Linux中使用吗?如果是,那么需要做些什么呢?

2 个答案:

答案 0 :(得分:1)

在Linux OS中,您可以使用主要内置接口进行调试。查找系统调用 ptrace

来自 man ptrace

  

ptrace()系统调用提供了一种方法,通过该方法,一个进程(" tracer")可以观察并控制另一个进程(" tracee")的执行,并检查   并更改tracee的内存和寄存器。它主要用于实现断点调试和系统调用跟踪。

如果您想知道如何从正在跟踪的进程中获取内部信息,则应该从gdb源开始。也许看看gdb / linux-nat.c作为起点。

但是这会为您提供有关正在运行的内容的操作系统视图。 python脚本本身没有运行和可追踪。相反,可以跟踪python解释器。但是,从os获取的信息不会提供python语言本身的任何有用信息。调试python脚本或java字节码程序非常特殊。如果可用,您必须连接到解释器的调试接口。对于python,您可以获得调试器pdb。也许你可以开始检查这些来源如何调试python程序。

祝你好运:-)

答案 1 :(得分:-2)

实现这一目标的实用,直接的方式:

将P1-3中的所有错误记录到日志文件中。

使用P4观看这些日志文件。