2012-05-06 13 views
58

C kaynak kodunu gcc veya Clang ile derlerken, gdb için hata ayıklama bilgisi oluşturmak için her zaman -g bayrağını kullanırım.GCC -g vs -g3 GDB Bayrağı: Fark nedir?

gcc -g -o helloworld helloworld.c

Bazı insanlar yerine -g3 tavsiye fark ettim. -g ve -g3 bayrakları arasındaki fark nedir? Ayrıca -g ve -ggdb arasında bir fark var mı? docs kaynaktan

+7

Dokümantasyonda yer almayan şeyleri bilmek ister misiniz? –

+7

Buraya geldim çünkü başkasının makefile kullanıyorum, ve belgeleme başlamak için bir canavar. Google'dan kolay bir cevap bulmak için StackOverflow üzerinde iyi bir soru. – GreenAsJade

cevap

64

: İşletim sisteminin doğal biçiminde

-g

üretin ayıklama bilgileri (stabs COFF, XCOFF veya DWARF 2). GDB bu hata ayıklama bilgisi ile çalışabilir. Stabs formatını kullanan çoğu sistemde, -g sadece GDB'nin kullanabileceği ekstra hata ayıklama bilgilerinin kullanılmasını sağlar; Bu ek bilgi, hata ayıklama işleminin GDB'de daha iyi çalışmasını sağlar, ancak muhtemelen , diğer hata ayıklayıcılarının programı okumasını engellemekte veya reddetmektedir. 'un ek bilgi üretip üretmeyeceğini kontrol etmek için -gstabs +, -gstabs, -gxcoff +, -gxcoff veya -gvms (aşağıya bakınız) kullanın.

...

-ggdb

GDB tarafından kullanılmak üzere bilgi ayıklama üretin. Bu, mümkün olan en etkileyici formatı (DWARF 2, zımbalar veya bunların hiçbiri desteklenmiyorsa yerel formatı), yani mümkün ise GDB uzantıları dahil olmak demektir. Ayrıca


-gvmslevel

Talebi ayıklama bilgileri ve

ne kadar bilgi belirtmek için düzeyi kullanın. Varsayılan seviye 2'dir. Seviye 0 hiç hata ayıklama bilgisi üretmez. Böylece, -g0 negates -g.

....

Seviye 3 tür mevcut programında tüm makro tanımları gibi ekstra bilgiler içerir. Bazı hata ayıklayıcılar, -g3'ü kullandığınızda makro genişletmeyi destekler.

+5

Örnek olarak "en etkileyici biçim" ve "ekstra bilgi" arasındaki farkın ne olduğunu açıklamak mümkün mü? Bu parametreler ücretsiz mi? Birçoğu GDB'den bahsetmiş ... Teşekkürler! – rogerdpack

8

tl; dr: özel soruya cevap vermek için, -g3 "Böyle makro tanımları gibi ekstra bilgileri içerir Eğer -g3 kullandığınızda, bazı hata düzeltici makro genişleme destekliyoruz." -g değil iken,.

Gcc, -g0'dan (hata ayıklama bilgisi devre dışı bırakılmış) -g3 (maksimum hata ayıklama bilgisi) üzerinden dört düzey hata ayıklama bilgisini desteklemektedir.-g belirtilmesi

-g2 eşdeğerdir. Merakla, gcc docs, -g/-g2'un içerdiği veya hariç tuttuğu bilgiler hakkında çok az şey söyler.

Hata ayıklama bilgisi isteyin ve ayrıca ne kadar bilgi belirtmek için seviye kullanın. Varsayılan seviye 2'dir. Seviye 0 hiç hata ayıklama bilgisi üretmez. Böylece, -g0 negates -g.

Seviye 1 debug düşünmüyorsanız programın bölümlerinde geriye dönük izleme yapmak için yeterli asgari bilgiyi üretir. Bu, işlevlerin ve dış 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 tür programında bulunan tüm makro tanımları gibi ekstra bilgiler içerir. Bazı hata ayıklayıcılar -g3'ü kullandığınızda makro genişletmeyi destekler.