2010-04-21 37 views
12

Std :: map var < std :: string, std :: string> cont;std :: map değeri gdb'de nasıl yazdırılır

Gdb'de ["some_key"] konusunu görmek istiyorum. Eğer operatör [] işlevi ne istediğini dönüştürülebilir edilemedi geçmeye çalışan, bağımsız değişkenlerden biri: Ben

p devam uyarıcısı [ "some_ket"]

bu mesajı alıyorum çalışıyorum zaman.

GNU gdb Red Hat Linux kullanıyorum (6.3.0.0-1.162.el4rh). Teşekkürler

+3

Yazık. gdb7.0 doğrudan yazdırabilir: http://sourceware.org/gdb/wiki/STLSupport –

+0

Doğru cevap budur. Bu özellik zaten var, yalnızca entegre olmayan eski bir dağıtım kullanıyorsunuz. Yeni bir Fedora kullanmayı düşünün veya araçları (gdb olabilir, ancak g + 1 ve binutillere de ihtiyacınız olabilir) kaynağınızdan kendiniz yapın. –

cevap

6

En yeni gdb'de python desteği vardır, böylece herhangi bir stl yapısının içeriğini basmak için kolayca bir işlev yazılabilir. Ancak API'yi öğrenmek ve senaryoyu yazmak zorundasınız. Luckily gcc 4.5, std veri yapılarını akıllı bir şekilde işlemek için gdb'yi almak için gerekli python betikleriyle gönderecektir.

DÜZENLEME: GCC 4.5 için beklemek zorunda değilsiniz (bu arada zaten serbest bırakılmıştır), sadece grab the code from SVN.

1

Gdb, C++ operatör aşırı yüklemesini anlamıyor.

+0

Anladığım kadarıyla, hata ayıklama işlemi sırasında anahtar/değer çiftlerini görmenin bir yolu yok mu? –

+0

Kolayca değil. std :: haritası karmaşık bir veri yapısıdır. (Uygulamaya özel) özel üyeleri takip edebilir ve neler olup bittiğini görebilirsiniz, ancak bu oldukça zor bir iştir. @ Eddy'in cevabı işe yarayabilir, ama ben bu şeylerle hiç oynamadım. –

6

Kendi dökümü fonksiyonları yazmak ve bunları arayabilirsiniz:

(gdb) call dump(m) 

Konuyu bkz: http://www.mail-archive.com/[email protected]/msg02109.html

Ben GDB yardımcı makroları merak ediyorum.

+1

[Bu ileti dizisindeki sonraki ileti] (http://www.mail-archive.com/[email protected]/msg02189.html) çok iyi çalışan bir GDB makrosu gösterir. Sonraki mesaj bazı küçük geliştirmeler içerir. – mMontu

İlgili konular