Podczas kompilowania kodu źródłowego C za pomocą gcc lub Clang, zawsze używam -g
flagi do generowania informacji debugowania dla gdb.
gcc -g -o helloworld helloworld.c
Zauważyłem, że niektórzy -g3
zamiast tego polecają . Jaka jest różnica między flagami -g
i -g3
? Czy jest też różnica między -g
i -ggdb
?
Odpowiedzi:
Z dokumentów :
źródło
tl; dr: Aby odpowiedzieć na Twoje konkretne pytanie,
-g3
„zawiera dodatkowe informacje, takie jak definicje makr ... Niektóre debugery obsługują rozwijanie makr, gdy używasz-g3
”,-g
ale nie zawierają tych dodatkowych informacji.Szersza odpowiedź jest taka, że gcc obsługuje cztery poziomy informacji debugowania, od
-g0
(informacje debugowania wyłączone) do-g3
(maksymalne informacje debugowania).Określanie
-g
jest równoważne z-g2
. Co ciekawe, dokumentacja gcc niewiele mówi o tym, jakie informacje-g
/-g2
zawierają lub wykluczają:źródło