2012-01-24 20 views
6

Şu anda bir Python GDB komut dosyası yazıyorum. Sorun, GDB 7.1 ile uyumlu olması gerektiğidir. Bu yüzden ilk GDB 7.3.1 senaryosunu yazdığı ve gdb komutunun çıktısını almak için (GDB 7.3.1) şu fonksiyonu kullanılır:PythonGDB'de (GDB 7.1) gdb.execute çıktısı nasıl alınır?

myvar = gdb.execute("info target", False, True) 

Bu fonksiyonun son parametre Döndürmesi gerektiğidir (; böyle bir komut çalıştırmak neden başka; mükemmel mantıklı) bir dize olarak sonuç)

GDB Version 7.1 ise

görünüyor olsa o nedenle son parametre isn't available bu hat (GDB 7.1):

myvar = gdb.execute("info target", False) 

, None değerini döndürür.

Bu komutun çıktısını alma şansınız var mı? Python betiğimin standart çıktısını bir dosyaya yönlendirmeyi denedim, daha sonra bu dosyayı yükledim ama görünüşe göre python betiğimin standart girdisi ve çıktısı overwritten by the gdb environment, bu yüzden gdb.execute komutundan çıktı dosyama yazılmıyor.

Şimdi düşünebildiğim tek şey, komut dosyasını ilk önce gdb'yi çeşitli komutları çalıştıran bir python betiğiyle açan ve sonra da bir dosyaya aktaran bir bash betiğiyle sarmaktır. Daha sonra gdb'yi tekrar açın, ancak dosyayı yükleyen başka bir python betiği ile ayrıştırın ve daha sonra dosyadan gelen girdilere göre diğer komutları çalıştırır. Ama bu gerçekten düşünebileceğim en çirkin çözüm.

GDB 7.1'de bir gdb.execute çıktısını almanın bir yolu var mı?

cevap

5

GDB 7.1'de bir gdb.execute çıktısını almanın bir yolu var mı?

sayılı

En iyi bahis kullanılabilir olması için GDB-7.3 için düzenlemektir. GDB genellikle paylaşılan kütüphaneleri (libc ve belki libpython dışında) kullanmıyorsa, gdb ikili dosyasını betiğinizle kopyalayabilirsiniz. Bu, önerdiğiniz alternatife göre çok daha kolay ve daha kalıcı bir çözüm olacaktır.

2

Ardından örneğin dosyayı okumak, bir dosyaya yazabilirsiniz: gdb.execute ait

os.system("rm tmp.txt") 
gdb.execute("set logging file tmp.txt") 
gdb.execute("set logging on") 
mainsec=gdb.execute("info proc mappings") 
gdb.execute("set logging off") 
mainsec = open("tmp.txt").read() 

eski versiyon olsa çok daha üstün oldu.