2010-02-20 30 views
7

'u kullanırken Windows'da C kodunu Profilleme Kodumu gprof ve kprof Linux'ta profilleyebilirim. Windows'da bu uygulamalara benzer bir alternatif var mı?Eclipse

+1

Windows'da hangi derleyiciyi kullanıyorsunuz? –

+3

Windows'da gprof'u GCC derleyicisinin MinGW bağlantı noktasıyla kullanabilirsiniz. –

cevap

3

Ticari yazılımı:

  • Rasyonel Quantify (pahalı yavaş ama çok detaylı)
  • AQtime (daha az pahalı, daha az yavaş, biraz detaylı)

Ücretsiz yazılım:

Bu ticari alternatifler buna 'instrumenting' (ekleyerek kitabı) tarafından yayımlanan kodunu değiştirmek ve ilave talimatlar Withing zamanlama gerçekleştirin. Bu, uygulamanızın ciddi şekilde yavaşlamasına neden oldukları anlamına gelir.

Bu ücretsiz alternatifler örneklemeyi kullanırlar, yani daha az ayrıntılı, ancak çok hızlıdırlar. Pratikte uygulamanızdaki performans sorunlarına hızlıca bakmak için özellikle çok uykunun çok iyi olduğunu buldum.

+0

Hem Çok Uykulu hem de Luke StackWalker'ı denedim, ancak bana bir şey söyleyemiyorlar. Kaynak koduma erişimleri yok gibi görünüyorlar. Ancak gprof gayet iyi çalışıyor. Nasıl olur? GUI tabanlı profilleyicileri çok seviyorum ama çalışmıyorlar. – Pieter

+0

Bu hata Luke StackWalker tarafından üretildi: HATA: SymGetModuleInfo64, GetLastError: 1114 (Adres: 7C90E514) ' – Pieter

+0

Burada bu konuyla ilgili ayrı bir soru açtım: http://stackoverflow.com/questions/2302596/luke- stackwalker-returns-error-when-running-gprof-works-fine – Pieter

0

Evet, kod with Visual Studio

+1

Ben bir Eclipse kullanıcısıyım, bu benim için bir seçenek değil. – Pieter

+0

@Pieter: o zaman lütfen bu önemli maddeyi belirtin * sorusu * –

+2

Her durumda, Visual Studio standardı ve hızlı sürümleri bir profiler içermez. Pro ile, ayrı bir indirme olduğuna inanıyorum ve kullanımı kolay bir basit (komut satırı) profiler var. Microsoft'un ne istediği (zengin) kişilerin Team Suite'i satın almasıdır. – Steve314

3

sadece Linux varyant hemen aynı çalışır gprof'ın bir MinGW liman var profil olabilir. Ya bir MinGW installation (gprof'un dahil olduğunu ama emin değilim) veya MinGW binutils package'dan gprof alabilirsiniz.

Eclipse için, TPTP var, ancak bildiğim kadarıyla C/C++ profillerini desteklemiyor.

0

Profil oluşturma nedeniniz nedir? A) zamanları ölçmek ve bir arama grafiği almak mı, yoksa b) kodu daha hızlı hale getirmek için değişecek şeyleri bulmak mı istiyorsunuz? (Bunlar aynı değil.)

(b) Eclipse'deki Duraklat düğmesini kullanarak (b) this trick'u kullanabilirsiniz.


Eklendi: Belki performans sorunları aslında beğendikleri biraz tecrübe aktarmaya yardımcı olacağını ve nereye onları bulmak için bekleyebilirsiniz. İşte bazı basit örnekler: sıralamanın dizeleri vardır ve bir dize karşılaştırma işlevi tarafından karşılaştırılır ediliyor

  • bir ekleme sıralama (sipariş n^2). Sıcak nokta nerede? dize ile karşılaştır. Sorun nerede? Dize karşılaştırmasının çağrıldığı sıralamada. Eğer n = 10 ise problem değil, ama n = 1000 ise, aniden uzun zaman alır. Dize karşılaştırmasının denendiği nokta "soğuk" dır, ama problem budur. Çağrı yığınının az sayıda örneği kesin olarak kesin.

  • Eklentileri yükleyen bir uygulamanın başlatılması uzun zaman alır. Bir profiler temelde her şeyin "soğuk" olduğunu söylüyor. G/Ç zamanını ölçen bir şey, beklediğiniz gibi görünen neredeyse tüm G/Ç zamanı olduğunu söylüyor, bu yüzden umutsuz görünebilir.Ancak, yığın örnekleri, dize sabitlerinin yerel dile çevrilmesi amacıyla eklenti dll'lerin kaynak kısmını okuma işleminde derinlikle yaklaşık 20 kat yığını ile harcanan zamanın büyük bir yüzdesini gösterir. Daha fazla araştırmak, çevirilen dizelerin çoğunun aslında 'un çevirisine ihtiyacı olan türden olmadığını görüyorsunuz. Onlar sadece "durumda" yerine çeviri ihtiyacı duyacaklardı ve hiçbir zaman bir performans sorununa yol açabilecek bir şey olarak düşünülmediler. Bu sorunun giderilmesi, büyük bir zaman tasarrufu sağlıyor.

Yani "sıcak noktaları" ve "dar boğazlarda", ancak çoğu programlarda, özellikle büyük olanlar açısından düşünmek yaygındır, fonksiyonun şeklinde performans sorunları sahip olma eğilimi değil işi talep eden çağrıları gerçekten yapılması gerekiyor. Neyse ki, harcadıkları zaman boyunca kendilerini çağrı yığında sergiliyorlar.

+0

Kodumun hangi bölümlerinin daha uzun sürdüğünü görmek için profillemeyle ilgileniyorum, böylece sonuç verimsizlikleri keşfedebiliyorum. – Pieter

+0

@Pieter: Verimsizliklerin bulunması (b). Bunun hakkında kelime yaymaya çalışıyorum. İşte başka bir şey: http://stackoverflow.com/questions/2308026/which-has-been-the-most-reliable-fastest-windows-c-profiler-that-you-have-used/2311117#2311117 –

+0

Benim gibi bir C yeni oyuncusu için karmaşık geliyor. İdeal profilleme uygulamam, hangi komutların yürütmek için en uzun süreyi aldığını görmek için kodumun üzerinde bir ısı haritası oluşturabilmelidir. Bazı kodların daha fazla işlem süresi alması gerekiyor, biliyorum, ancak yukarıda bahsedilen verimsizliklerin tespit edilmesine yardımcı olacak birçok durum var. – Pieter