UNIX'te C/C++ üzerinde çalışıyorum ve çoğunlukla çekirdek dosyaları gördüm. Çekirdek dosyalarının çoğu zaman, çekirdek ya da bölümleme hatasının gerçek nedenini bulmak için hata ayıklaması zordur. Lütfen bana verimli bir hata ayıklayıcıyı önerir misiniz?C ve C++ için en iyi hata ayıklama aracı
cevap
Ben nesne dosyaları içindeki sembolleri ayıklama dahil etmek * Nix destek -g
çoğu tatlar en C derleyiciler düşünüyorum, bu yüzden bunu yaparsanız:
cc -g -c file1.c
cc -g -c file2.c
cc -g file1.o file2.o -o program
./program
program çalıştırdığınızda O zaman bunun bir üretmelidir çökerse Daha kolay hata ayıklama çekirdek dosya. İlk iki satır sadece kaynak dosyaları derler (.o dosyaları üretir), üçüncü satır derleyiciye kaynak dosyaları bir yürütülebilir dosyaya bağlamak için bağlayıcıyı çağırmasını söyler (buradaki -g
ileticinin yapması gerekmiyorsa, aslında hiçbir şey yapamaz. hata ayıklama sembolleri ile bir yürütülebilir üretmek için özel bir şey, ama hiçbir şey zarar vermemelidir) ve son satır programı çalıştırır. Derleyiciye, hata ayıklamaya çalıştığınızda (optimizasyonlar açık olmadıkça hataların bulunmadığını fark etmedikçe) optimizasyonlar yapmamasını sağladığınızdan emin olmanız gerekir, çünkü optimizasyonlar genellikle izlemeyi daha zor hale getirir.
Hangi platformda olduğunuzu veya hangi araçların bulunduğunu (ya da gerçekten C derleyicisini kullandığınız) bilmediğimden, daha spesifik tavsiyeler vermek zordur. Komiserliğiniz için man sayfasını (el ile) okumalısınız.
man cc
Ve bu sisteminizde derleyici hakkında çok şey söyleyen bir kılavuz sayfasını getirecektir: Komut satırı türünden. Bu, derleyiciye programlarınızı çalıştırmadan önce hatalarınızı bulmanıza yardımcı olabilecek daha fazla uyarı mesajı üretmesini nasıl söyleyeceğinizi size söyleyebilir. (bazı optimizasyonların sadece belirli optimizasyonları açtığınızda üretilebileceğini unutmayın, bu yüzden optimize edilmiş programın hatalarını ayıklamak istemeyseniz bile optimizasyonlarla derlemek isteyebilirsiniz. sana bir şey söyle).
Unix sisteminizde muhtemelen bir tür hata ayıklayıcısı kurulu. C geliştirme için kurulan çoğu Linux makinesinin kurulu olduğu gdb
vardır. gdb
, programınızı hata ayıklama modunda çalıştırmak veya bir çekirdek dosyasını analiz etmek için kullanılabilir.Eğer gdb'niz varsa, programınızı çalıştırmaya hazır olursunuz:
gdb ./program ./core
Eğer hata ayıklama ve program çöktü sanki olacağı haricinde benzer bir şekilde çalışır. Bu durumda itibaren yapabileceğiniz en hızlı ve en yararlı şey İşte
(gdb) bt
(gdb)
için istemi ve bt
bir arka iz üretmek için yazan bir komut olmasıdır. Bu, başarısızlık olduğunda programın hangi işlevi yürüttüğünü gösteren bir çağrı yığını ve bu işlev olarak adlandırılan işlevi ve bu işlev olarak adlandırılan işlevi ve ilk işleve kadar olan işlevi gösterir. Bu, kafa karıştırıcı olabilir, çünkü çoğunlukla en son aranan kitaplık işlevlerini gösterecektir, ancak bu genellikle soruna neden olan yol boyunca birtakım kötü verilerden geçtiğiniz anlamına gelir.
gdb
büyük ve karmaşık bir programdır, bu yüzden sisteminizde bulunuyorsa okumaya zaman ayırmalısınız.
Sisteminizde değilse, benzer araçların neler olduğunu öğrenmelisiniz. Bazı grafik hata ayıklayıcıları (IDE içinde olsun ya da olmasın) komut satırı ayıklayıcılarına komut vermek için ön uç görevi görür ve hatta bazı farklı komut satırı hata ayıklayıcılarını destekler, bu nedenle grafik hata ayıklayıcılarından birini kullanabiliyorsanız, endişelenmenize gerek olmayabilir. gerçek arka uç komut satırı hata ayıklayıcısının kullanıldığı hakkında.
Genel olarak, gdb
mükemmel bir hata ayıklayıcısıdır (öğrenmesi biraz gerekir). Ayrıca DDD veya cgdb gibi bir GUI'ye sahip çeşitli ön cepheler de vardır.
Özellikle sorun yaşadığınız yeri açıklarsanız, hangi hata ayıklayıcınızın size en iyi şekilde yardımcı olacağını daha iyi önerebiliriz.
gdb'u kullanın. Bu, standart Unix C/C++ hata ayıklayıcıdır ve 7.0 sürümünden itibaren tersine çevrilebilir hata ayıklama özelliklerine sahiptir (geriye doğru zamanda gidebilirsiniz). Bu nedenler tek başına kontrol etmek için en azından faydalıdır.
Segmentasyon hataları, bellek sızıntısı, başlatılmamış veri ve bunun için programınızı valgrind aracılığıyla çalıştırmak her zaman iyi bir fikirdir. Özellikle bellek sızıntılarıyla ilgileniyorsanız, "--leak-check = full" seçeneği kapanır.
Ve evet, gdb'yi öğren. Biraz zaman alır, ama buna değer.
Not Bu, bir çekirdeği çoğaltmanın tutarlı bir yoluna sahipseniz ve sebebi belirlemek istediğinizde yapabileceğiniz bir şeydir. valgrind, önceden oluşturulmuş çekirdek dosyalarını işlemez. – aschepler
Totalview'i gerçekten çok seviyorum. Paralel hata ayıklama özellikleri, beni benim yaptığım kadar sevdiren özellikler.
- 1. Hata ayıklama C++ dll C#
- 2. Makale hata ayıklama aracı
- 3. Aracı C# koduna dönüştürmek için aracı
- 4. Xcode C++ hata ayıklama
- 5. C ve C++ için en iyi duruma getirme araçları
- 6. iOS - görünümü algılamak için hata ayıklama aracı
- 7. En İyi C# bağlamaları?
- 8. En iyi yol C#
- 9. gdb kullanarak hata ayıklama - En iyi yöntemler
- 10. C/C++ 'da bir unix/linux komut satırı aracı oluşturmak için en iyi uygulama nedir?
- 11. Komut satırında hata ayıklama C#
- 12. GDB ve C için çok iş parçacıklı hata ayıklama öğreticisi
- 13. Hata ayıklama sırasında C# Düzenleme
- 14. Hata ayıklama Trace in C#
- 15. PHP MySQL Hata ayıklama ve işleme - en iyi uygulama
- 16. C#: En İyi Yöntemler Debug.Print
- 17. 'Anonim ad alanlarında' hata ayıklama (C++)
- 18. Güvenlik Kritik Sistemler Geliştirme (C/C++) hakkında bilgi edinmek için en iyi kaynak nedir? (C/C++)
- 19. Çevrimiçi HTTP günlüğü/hata ayıklama aracı?
- 20. MySQL hata ayıklama aracı yavaş sorgular?
- 21. C# projesinde hata ayıklama neden C++/CLI sembolleri görüntüler?
- 22. Kakao/Bindings'de hata ayıklama aracı Kakao
- 23. C girinti aracı
- 24. Satır tarafından satır c - C++ kod hata ayıklama Linux ubuntu
- 25. C# web uygulamasında "System.Net.WebException" hata ayıklama nasıl?
- 26. Hata ayıklama C++ 11 rdue referansları gdb
- 27. C# Sihirli Değnek Aracı
- 28. En iyi İş Akışı aracı nedir
- 29. YüklemeKodu Dosyaya Belleğe Gönderme ve Yürütme C - mprotect Hata Ayıklama
- 30. En iyi OAuth2 C# kitaplığı nedir?
Hangi derleyiciyi kullanıyorsunuz? Hata ayıklayıcının, derleyiciniz tarafından oluşturulan hata ayıklama sembollerini okuması gerekir. Genel olarak gdb gcc, Sun CC, vb. Ile en iyi şekilde çalışır. – Rup
UNIX –
üzerinde cc kullanıyorum Sachin: Bu aslında bize pek bir şey söylemiyor. Hangi cc? Hangi UNIX? – Ken