调试器如何在中断时设法中断?

Cat*_*kul 10 c++ linux debugging gdb exception

在GDB和其他调试器中,有可能要求调试器(使用catch throw)在该异常传递给相应的异常处理程序之前,在引发异常时停止。

通过什么机制是可能的?是否有可用于挂接的操作系统信号?是否有指向猴子补丁的函数指针允许这样做?做到这一点是否只有一步?

是否可以在调试器之外使用此机制?

Joh*_*ann 10

GDB在库函数上设置一个断点,该函数执行堆栈展开(__cxa_throw()对于x86_64)catch throw。它将使用与设置任何其他类型的代码断点相同的机制来设置此断点。

通过什么机制是可能的?是否有可用于挂接的操作系统信号?是否有指向猴子补丁的函数指针允许这样做?做到这一点是否只有一步?

都不是。这只是的正常断点__cxa_throw()。GDB使用了有关C ++运行时实现的知识,并带来了所有缺点。C ++异常不在操作系统的监视范围之内,因此操作系统不会知道它们。混淆源于以下事实:某些信号(例如segfaults)在Windows 上称为异常,并且在调试时可以以与Windows上的C ++异常非常相似的方式进行处理。但这使OS信号(例如segfault)表现得像C ++异常,而不是相反。

另请参见ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_30.html