我试图了解 Linux 如何启动程序。我在某处读到 glibc 中的某些函数调用主函数。使用 callgrind 进行分析并查看 Kcachegrind 中的调用图,我看到below main
了哪些调用 main。但我不明白这一点,一个函数不能这样命名。所以我的问题是 glibc 中的哪个函数实际上启动了 main 函数。
问问题
946 次
1 回答
11
在 valgrind 自己的帮助下,您会找到对选项--show-below-main的解释:
默认情况下,错误的堆栈跟踪不会显示出现在 main 下方的任何函数,因为大多数时候它是无趣的 C 库内容和/或 gobbledygook。或者,如果 main 不存在于堆栈跟踪中,堆栈跟踪将不会显示任何低于 main 类函数的函数,例如 glibc 的 __libc_start_main。此外,如果跟踪中存在类似 main 的函数,则将它们归一化为(低于 main),以使输出更具确定性。
因此,在 main 下面不是调用 main 本身的函数,而是__libc_start_main。
于 2012-05-17T20:24:55.643 回答