2009-12-18 21 views
12

Bir programın durumunu bir çekirdek dosyasının oluşturulduğu sırada geri yüklemek mümkün mü?Bir çekirdek dosyadan program durumunu geri yükleme

Sormamın nedeni, gdb'nin işlev yürütme yeteneğini kullanabilmeniz için çalışan bir örneğinizin olması gerektiğidir. Elbette, devletin, çekirdek ile aynı olacak şekilde, aynı yürütülebilir bir sahte süreci üretmesi mümkün olmalıdır.

Bu tür bir durum için hangi alternatifi bulunmuyorsa, bunu ilk etapta yapmak istiyorum? Bu durumda, çekirdeğin geri izlemesi bir kütüphane fonksiyonuna yol açtı ve bu fonksiyon çağrısına girdileri çoğaltmak istedim ama girişlerden biri, bir dizide fonksiyon çağrısıyla bir diziye kolayca serileştirilebilen karmaşık bir nesneydi. Örnek, ancak çekirdek bir çöplükte değil.

cevap

7

Tam olarak ne yapmak istediğinizi teorik olarak yapmak mümkündür, ancak (AFAICT) GDB (henüz) 'de bunun için destek yoktur.

En iyi bahsiniz, GDB-7.0'u kullanmak ve seri hale getirme işlevini yeniden uygulamak için yerleşik python komut dosyasını kullanmaktır.

+0

Teşekkürler - python komut dosyasının istediğimi yapıp yapamayacağını bilmiyorum ama aynı şekilde çok yararlı geliyor. – cyborg

2

Çekirdek dosya zaten böyle mi? Özgün yürütülebilir ve çekirdek dosyası ile gdb yüklerseniz

gdb myprogram.exe -c mycorefile 

Sonra, düştüğü yerde noktaya gidersiniz. Değişkenleri görüntülemek, yığın izlemeyi görmek vb. Için normal inceleme işlevlerini kullanabilirsiniz. Ya da sorunuzu yanlış anladım mı?

+3

Bir çekirdek dosyayı ayıklarken gdb işlevlerini çalıştıramazsınız. Diyelim ki bir çekirdek dosyam var, bir foo sınıfının bir değişkenini bulun ve Foo.getSerialization() öğesini çalıştırmak için güzel bir basit dize temsili yapmak istiyorum. Çünkü bu bir çalışan işlem değil. Yani soru, bir çekirdekten çalışma sürecine geçebilir. – cyborg

+1

gdb güzel baskı değerleri yapmak için bir kod yazabilirsiniz. Python API'sına buradan bakın (http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API). –

+0

@JeffFoster Sanırım gerçekten yardımcı olmuyor, eğer herhangi bir canlı fonksiyonu çağırmak istiyorsanız, bu mümkün değil. –

İlgili konular