2011-02-09 18 views
11

Günaydın, bir programa adım atmak için Valgrind hata ayıklayıcısını kullanmaya çalışıyorum.Valgrind hata ayıklayıcısını bir program aracılığıyla adım adım yapmak

Benim valgrind komut satırı ben Centos Linux üzerinde valgrind-3.5.0 kullanıyorum valgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

olan gdb sürümü 7,0.1-23.el5_5.2 ile 5.5 bırakın.

Valgrind, Hata Ayıklayıcıya Soruyu sorduğunda Evet giriyorum. Ben valgrind komut satırında valgrind --single-step=yes ayıklayıcı seçeneğini kullanmaya çalıştığınızda 4428: return new tuple2<int,A>(2, i++, p->next());

Ben gdb adımı kullanın veya komut devam etmek deneyin valgrind

[New Thread 0x410fd10 (LWP 6548] Cannot find user-level thread for LWP 6551: generic error.

diyor: ile Ardından, valgrind ayıklayıcı döndürür , valgriind Bad option aborting diyor.

Değerli kullanıcılar, C++ kaynak kodunu nasıl değiştirebileceğimi veya bir programa nasıl devam edeceğimi gösterebilir mi? Teşekkür ederim.

+0

Programda, hata ayıklamaya çalıştığım herhangi bir çoklu okuma kullanmıyorum. Teşekkür ederim. – Frank

+0

Bir x86_64 makinede 32 bit bir uygulamada hata ayıklamaya çalışıyor musunuz? eğer öyleyse, o zaman [bu] ile ilgilenebilirsiniz (http://sourceware.org/bugzilla/show_bug.cgi?id=9069). – diverscuba23

+0

@diverscuba, Cevabınız için teşekkür ederiz. Bir valgind geliştiricisi ile konuştum ve geliştirici bana valgrind 3.5 bir valgrind 3.6.0 hata ayıklayıcısına yükseltme nasıl anlattı. – Frank

cevap

11

Ayrıca vgdb'yi 3.7.0 sürümünde de alabilirsiniz. Sürüm notlarından:

  • GDB sunucusu: Valgrind şimdi gömülü bir GDB sunucusuna sahiptir. Yani, , GDB'nin yapabildiği her zamanki yaptıklarını (tek adımlı, kesme noktaları, veri, vb inceleyerek) GDB'den bir Valgrind çalışmasını kontrol etmek anlamına gelir. Araca özgü işlevsellik de mevcuttur. örneği için, değişkenlerinin tanımlılık durumunu veya Memcheck'i çalıştırırken GDB'nin içinden belleği sorgulamak mümkündür; rasgele büyük bellek izleme noktaları vb. desteklenir. GDB sunucusunu kullanmak için, bayrak --vgdb-error = 0 ile Valgrind'i başlatın ve ekrandaki talimatlarını izleyin.

Valgrind çevrimiçi el kitabında daha fazla bilgi var.

+0

Takip için teşekkürler! –

+1

Valgrind çok harika. – notlesh

12

Valgrind geliştiricilerine nasıl bir valgrind hata ayıklayıcısını oluşturduğunu sordum. İşte söyledikleri;

  1. 3.6.0 kaynak dosyalarını valgrind web sitesinden indirin.

  2. Sonra 214909.

  3. kez hata düzgün derlenmiş olan yama uygulamak zorunda, bu gibi uygulamayı başlatmak:

    valgrind --vgdb=yes --vgdb-error=0 ./prog 
    

    ve daha sonra başka bir pencerede:

    gdb ./prog 
    target remote | vgdb 
    
  4. Harici bir gdbserver başlatmayın: yama ne gdbserver valgrind içine entegre etmektir. Bu gdbserver valgrind içine entegre edildi --vgdb = yes.

İlgili konular