8

Linux がプログラムを起動する方法を理解しようとしています。glibc の一部の関数がメイン関数を呼び出すことをどこかで読みました。callgrind でプロファイリングし、Kcachegrind の呼び出しグラフを見ると、below mainどの呼び出しがメインかがわかります。しかし、私はこれを理解していません。関数にそのような名前を付けることはできません。したがって、私の質問は、glibc のどの関数が実際にメイン関数を開始するかということです。

4

1 に答える 1

11

valgrind 自身のヘルプに従うと、オプション--show-below-main の説明が見つかります。

デフォルトでは、エラーのスタック トレースには main の下に表示される関数は表示されません。または、メインがスタック トレースに存在しない場合、スタック トレースは、glibc の __libc_start_main などのメインのような関数の下に関数を表示しません。さらに、メインのような関数がトレースに存在する場合、出力をより確定的にするために、(メインの下) として正規化されます。

そのため、以下の mainは main 自体を呼び出す関数ではなく、__libc_start_mainです。

于 2012-05-17T20:24:55.643 に答える