GCC -g vs -g3 GDB Bayrağı: Fark Nedir?


104

C kaynak kodunu gcc veya Clang ile derlerken, -ggdb için hata ayıklama bilgisi oluşturmak için her zaman bayrağı kullanırım.

gcc -g -o helloworld helloworld.c

Bunun -g3yerine bazılarının tavsiye ettiğini fark ettim . -gVe -g3bayraklar arasındaki fark nedir ? Ayrıca -gve arasında bir fark var -ggdbmı?


15
Buraya geldim çünkü başka birinin makefile dosyasını kullanıyorum ve dokümantasyon başlamak için bir canavar. Google'dan kolay bir yanıt bulmak için StackOverflow'da olması iyi bir soru.
GreenAsJade

Yeterince derinlemesine araştırma yapmaya istekli olduğunuz sürece, SO ile ilgili çok sayıda soru "benim belgelerimi kapsar". Bu, bir soruyu reddetmek için geçerli bir neden değil.
BeeOnRope

Yanıtlar:


105

Gönderen docs :

-g

İşletim sisteminin yerel biçiminde (stabs, COFF, XCOFF veya DWARF 2) hata ayıklama bilgileri üretin. GDB bu hata ayıklama bilgileriyle çalışabilir. Stabs biçimini kullanan çoğu sistemde -g, yalnızca GDB'nin kullanabileceği fazladan hata ayıklama bilgilerinin kullanılmasını sağlar; bu ekstra bilgi, hata ayıklamanın GDB'de daha iyi çalışmasını sağlar, ancak muhtemelen diğer hata ayıklayıcıların çökmesine veya programı okumayı reddetmesine neden olur. Ekstra bilgi oluşturup oluşturmayacağınızı kesin olarak kontrol etmek istiyorsanız, -gstabs +, -gstabs, -gxcoff +, -gxcoff veya -gvms kullanın (aşağıya bakın).

...


-ggdb

GDB tarafından kullanılmak üzere hata ayıklama bilgileri üretin. Bu, mümkünse GDB uzantıları da dahil olmak üzere, mevcut en etkileyici biçimi (DWARF 2, stabs veya bunların hiçbiri desteklenmiyorsa yerel biçim) kullanmak anlamına gelir.


-gvmslevel

Hata ayıklama bilgisi isteyin ve ayrıca ne kadar bilgi olduğunu belirtmek için düzey kullanın. Varsayılan düzey 2'dir. Düzey 0 hiçbir şekilde hata ayıklama bilgisi üretmez. Böylece -g0, -g'yi olumsuzlar.

....

Seviye 3, programda bulunan tüm makro tanımları gibi ekstra bilgileri içerir. Bazı hata ayıklayıcılar, -g3 kullandığınızda makro genişletmeyi destekler.


8
Yine de açıklamak mümkün, örneğin "en etkileyici format" ve "ekstra bilgi" arasındaki fark nedir? Bu parametreler ücretsiz mi? Birçoğu GDB'den bahsediyor ... Teşekkürler!
rogerdpack

28

tl; dr: Sorunuzu yanıtlamak için, -g3"makro tanımları gibi ekstra bilgiler içerir ... Bazı hata ayıklayıcılar -g3, kullandığınızda makro genişletmeyi destekler ", ancak -gbu ekstra bilgileri içermez.

Daha geniş cevap, gcc'nin -g0(hata ayıklama bilgileri devre dışı bırakılır) ile -g3(maksimum hata ayıklama bilgisi) arasında dört düzeyde hata ayıklama bilgisini desteklemesidir .

Belirtmek -geşdeğerdir -g2. Merakla, gcc belgeleri hangi bilgilerin bulunduğu -g/ -g2içerdiği veya hariç tuttuğu konusunda çok az şey söylüyor :

Hata ayıklama bilgisi isteyin ve ayrıca ne kadar bilgi olduğunu belirtmek için düzey kullanın. Varsayılan düzey 2'dir. Düzey 0 hiçbir şekilde hata ayıklama bilgisi üretmez. Böylece -g0, -g'yi olumsuzlar.

Düzey 1, programın hata ayıklamayı planlamadığınız bölümlerinde geri izleme yapmaya yetecek kadar minimum bilgi üretir. Bu, işlevlerin ve harici değişkenlerin açıklamalarını ve satır numarası tablolarını içerir, ancak yerel değişkenler hakkında bilgi içermez.

Seviye 3, programda bulunan tüm makro tanımları gibi ekstra bilgileri içerir. Bazı hata ayıklayıcılar, -g3 kullandığınızda makro genişletmeyi destekler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.