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