【发布时间】:2020-05-07 18:40:24
【问题描述】:
当 gcc/g++ 遇到 ICE(内部编译器错误)时,最新版本的编译器会在退出前打印出整洁的堆栈跟踪。
问题:使用什么技术来实现它? GCC 是用 C++ 编写的,afaik 一些保守的修订版本,如 C++03。
特别是
GCC 不使用 Boost。
据我所知,GCC 不使用 linunwind 或 libexcept 等外部库。
GCC 不一定使用 glibc。例如,我可以在 linux 上为主机 mingw32 交叉编译 GCC,并且堆栈跟踪工作得很好。
所以在盲目关闭这个问题之前,请确保链接的答案不需要任何这些库。
【问题讨论】:
-
是什么让您认为 GCC 使用任何公开可用的库来进行堆栈跟踪?如果有的话,我敢打赌这些库是基于 GCC 的实现。
-
@Blindy 我的第一个问题以指向另一个问题的指针结束,该问题提出了 GCC 不使用的所有花哨的东西。 GCC 需要的只是 GMP、MPFR、MPC,它们与所讨论的功能无关。
-
@KamilCuk 据我了解,mingw 使用 msvcrt 而不是 glibc。
-
你读过GCC的源代码吗?特别是libbacktrace子目录下的代码?