Bellek gdb (osx) bir dosyaya nasıl dökülür? İşimi kurtarmam gerekiyor


9

Safari.app, bir dosyaya bellek dökümü nasıl bilmek gerekir.

Gdb attach 6741 (benim safari PID) girdim.

Şimdi ne olacak?

Google'da gdb ile ilgili yardım aramayı denedim, ancak "gdb'ye nasıl bellek döküleceğini" ararken bile ne yapacağımı söyleyen bir şey bulamadım :(

Ben "yardım dökümü" denedim, bana bir sürü komut verdi, ama hiçbiri işe yaramadı. En yakın geldiğim:

(gdb) dump memory ~/safaridump.bin 0
Missing stop address.

Peki durma adresi nedir? Bilmiyorum? Durak adresini nasıl bilebilirim? Google'da "" dur durak adresi "gdb" için arama yapmayı denedim, yardımcı olmadı. Durak adresini nasıl alacağımı bilmiyorum.

Bunu denedim:

(gdb) döküm belleği ~ / safaridump.bin 0 0xffffffff

Bu da işe yaramadı.

Bunu anladım:

gdb stack crawl at point of internal error:
0   gdb-i386-apple-darwin               0x0012fd8f internal_vproblem + 316
1   gdb-i386-apple-darwin               0x0012ffd3 internal_verror + 43
2   gdb-i386-apple-darwin               0x00130008 align_down + 0
3   gdb-i386-apple-darwin               0x00130a21 xstrvprintf + 0
4   gdb-i386-apple-darwin               0x00130c25 xmalloc + 40
5   gdb-i386-apple-darwin               0x000045d6 dump_memory_to_file + 241
6   gdb-i386-apple-darwin               0x0012dd3d execute_command + 713
7   gdb-i386-apple-darwin               0x0008815d command_handler + 213
8   gdb-i386-apple-darwin               0x000891af command_line_handler + 1120
9   gdb-i386-apple-darwin               0x001c2486 rl_callback_read_char + 137
10  gdb-i386-apple-darwin               0x000882ed rl_callback_read_char_wrapper + 18
11  gdb-i386-apple-darwin               0x000874b7 handle_file_event + 349
12  gdb-i386-apple-darwin               0x00086e7e process_event + 131
13  gdb-i386-apple-darwin               0x00087c38 gdb_do_one_event + 1178
14  gdb-i386-apple-darwin               0x00081bfd catch_errors + 78
/SourceCache/gdb/gdb-1346/src/gdb/utils.c:1208: internal-error: virtual memory     exhausted.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) n

Bunu gerçekten anlamadım. Tek istediğim Safari'deki bir dosyaya yazdığım hafızam.

Benim için gerçekten önemli. Safari'de kalbimi yazarak, gerçekten önemli bazı bilgileri yazarak yaklaşık 2 saat geçirdim. Sonra yazdığım aptal web sitesi, yazımı kabul etmedi, çünkü yazdığım kadar uzun sürdüğüm için, "çıkış" yapmıştım. Tekrar oturum açtığımda görevim kayboldu.

Bu yazıyı gerçekten geri istiyorum. Tek istediğim Safari'nin hafızası, bu yüzden yazımı geri alıp alamayacağımı görmek için içeriğinde birkaç anahtar kelime arayabilirim.

Herhangi bir fikrin var mı?

En azından, yazımı geri alamasam bile, gdb hakkında bir şeyler öğreneceğim. Hangi benim yazılım geliştirme kullanışlı olabilir;)

Eğer yardım edebilirsen teşekkürler! Bu benim için çok şey ifade eder. Bir cevap alana kadar Safari ve GDB'yi çalışır durumda bırakacağım. Yazımı geri alabileceğimi veya alamayacağımı öğrenene kadar bunun gitmesine izin vermeyeceğim.

Eğer birisi kayıp işin nasıl kurtarılacağı hakkında daha genel cevaplar vermek isterse ... bu iyi bir şeydir. Çalışmalar kaybolmadan önce tüm sabit diskimi VRAM'de olabilecek belirli dizeleri aramak için programlar gibi.

...

http://www.mail-archive.com/use-revolution@lists.runrev.com/msg22978.html Bu sayfa, kill -9'un çekirdek dökümü oluşturmadığını söylüyor. Bu sayfanın söylediklerine rağmen http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html#SECCOREDUMPS , bu komut "kill -ABRT (PID HERE)" adlı çekirdek dökümü oluşturmaz.

ls -la /cores
total 0
drwxrwxr-t@  2 root  admin    68 23 Jun 07:19 .
drwxrwxr-t  38 root  admin  1360 14 Dec 16:06 ..
macos  gdb 

1
+1 sempati artışı - Zaten denedikleriniz göz önüne alındığında, verilerinizi kurtarma beklentileri konusunda iyimser değilim. Ancak, ilgili ayrıntılar da dahil olmak üzere, açıkça yazılmış meşru bir hata ayıklama sorusu: Aşağı indirilmeyi hak ettiğini düşünmüyorum!
Jim Lewis

NSDAP. Yığın sonunu nasıl buluyorsun? Numarayı size geri döndürmek için yazmanız gereken komut nedir? Aslında biliyor musun? Yoksa sadece bana yardım etmiyor musun?

Bu çok iyi çalışmıyor. Bunu denedim: < developer.apple.com/mac/library/documentation/DeveloperTools/… > Bu yüzden "gcore bla2.bin" yazdım. Ve tahmin et anladım mı? "Tanımsız komut:" gcore "." Yardım "ı deneyin." Apple'ın belgeleri bu işlevin bazı sistemlerde bulunmadığını söylüyor. Sanırım bu da Mac'ler demek? Apple'ın belgelerinin neden OSX'in davranışını belirtmeyen unixy gdb hakkında genel bilgi sahibi olacağını merak ediyorum ...


Biraz daha denemeden sonra şunu buldum: "ikili bellek dökümü ~ / dump3.bin 0 0x0000FFFF" tamamen sıfır olmayan bazı veriler üretti. Ama ... burada değerli bir şey yoktu ve sadece ilk 64KB idi. Bu ... "ikili bellek dökümü ~ / dump3.bin 0 0x000fFFFF" tamamen sıfır içeren bir dosya üretti. 1 MB sıfır. Neden olduğuna dair hiçbir fikrim yok. Benim tahminim (gdb'yi nasıl kullanacağını bilen biri aslında yardımcı olur), malloc tarafından bile tahsis edilmemiş "kullanılmayan" bölgeleri geçtim. Ve bu nedenle, gdb sıfırlar çıkarır. Sonuçta, Safari

Yanıtlar:


6

Herkese merhaba, OSX'te bir coredump'ın nasıl üretileceğini buldum!

http://osxbook.com/book/bonus/chapter8/core/

Kaynak formda indirilebilir bir program var. İndirdim, derledim ve yaşasın! İşe yaradı! Neredeyse 1GB'lık bir çekirdek dökümü oluşturdu!

Bilginin orada olup olmadığı artık önemli değil. Bir yazılım geliştiricisi olarak kesinlikle kullanışlı bir beceri olabilecek OSX'te coredumps oluşturmayı öğrendim;) Bir çekirdek dökümü ne zaman işe yarayacağını asla bilemezsiniz.

Sadece birkaç yıl önemli bir iş yaptığımı hayal edebiliyorum ve neler olduğunu anlamak için bir çekirdek dökümü gerekiyor ve bu "gcore" uygulaması ihtiyacım olan şey. Bir kez ödese bile ... bu iyi bir şey.


1
Ayrıca şu şekilde yükleyebilirsiniz: brew install gcore
Guido

Gcore'u hızlı bir şekilde yüklemek için bu talimatları burada kullanabilirsiniz. "Bash: brew: komut bulunamadı" yazıyorsa, bu bağlantıyı kullanarak homebrew'u yükleyin .
20_15

gcore10.12 Sierra'dan bu yana macOS'a dahil edilmiştir . Adresinde bulunur ve adresinde /usr/bin/gcorebir man sayfası vardır /usr/share/man/man1/gcore.1. Bu da Homebrew tarafından onaylandıktan yüklemek reddetmesi gcoreiçin/usr/local/bin Sierra veya üstünde.
GSYİH2

1

Safari, form verilerini tüm formlar için (kapatmadıkça veya site formu kaydedilemez olarak işaretledikçe) şifreli bir veritabanı dosyasına kaydeder. Dosyanın şifresini giriş anahtarlığınızda bulabilirsiniz ve dosya şu konumdadır ~/Library/Safari/Form Values, bu nedenle teorik olarak, verileri dosyadan ayıklayabilir ve yazdığınız şeyin orada olup olmadığını görebilirsiniz.

Ancak, bir kesmek yaşadım ve dosyanın ne biçim olduğunu veya nasıl şifrelenmiş olduğunu anlayamıyorum, bu yüzden aslında içeriğe nasıl ulaşacağımı bilmiyorum, eminim birisi yapar :)


Safari yayını bu dosyaya kaydettiyse, aynı forma gidip kaybolan metnin ilk birkaç harfini yazarak da geri alabilirsiniz. Tümünün otomatik tamamlama önerisi olarak görünmesi gerekir.

Otomatik tamamlama özelliği yayın içeriği için çalışmaz. Yalnızca tek satırlı alanlar için çalışır. Yüzlerce satır içeren makalelerin tamamı değil.

Teşekkürler. Bu dosyanın gönderi içeriği içerdiğinden şüpheliyim. 2GB dosya oluşturarak 0 ila 7ffffFFFF'yi dökmeyi başardım. Ancak, tamamen sıfır içeriyor gibi görünüyordu. Burada tam olarak bir şey yok. Neden bu? = Bellek dökümü ~ / bla.bin 0 0x7fffFFFF Tamamen sıfır içeren bir dosyada sonuç? Safari sıfırlarda çalışmıyor değil mi? İçinde bazı kod olması gerektiğini varsayıyorum? ;)

0

GDB'de her zaman günlük kaydını açabilirsiniz set logging on

Ardından, yaptığınız her şey günlük dosyasına (genellikle gdb.txt) yazdırılır. Böylece xkomutu kullanarak belleği yazdırmaya başlayabilirsiniz ve her şey günlüğün yanı sıra ekrana da gidecektir.


0

OSX'in bir pmap komutu olup olmadığını görün, çalışan herhangi bir işlemin eşlenmiş belleğini gösterecektir. Bu genellikle linux sistemlerinde / proc tarafından okunur. Ardından, belirli bir bilgiyi arıyorsanız, gdb find komutunu kullanabilirsiniz. Daha fazla talimat için gdb'de help find yazın.


-1

Biliyorum, eski iplik ...

gdb, geçerli işlem / programın çekirdek görüntüsünü dökmek için yerleşik bir komuta sahiptir.

generate-core-file [filename]
gcore [filename]

her iki komut da aynısını yapar, dosya adı isteğe bağlıdır, varsayılan olarak ' çekirdek. <process_ip> '

Huh! şu anda çalışan bir programı da boşaltmak için 'gcore' adlı bir yardımcı program (gdb ile) bile yüklü gibi görünüyor. Tabii ki, işlemi gdb ile duraklatmak daha kolay, sonra dökümü.

Her gün yeni şeyler bulmak! ... ama gdb yerleşik bir işleve sahiptir ... sadece biliyorsunuz ..


(gdb) gcore Undefined command: "gcore". Try "help". (gdb) generate-core-file Undefined command: "generate-core-file". Try "help".
Slipp D.Thompson

2
sourceware.org/gdb/onlinedocs/gdb/Core-File-Generation.html o OS X'te uygulanmadı önermek gibi görünüyor
Slipp D. Thompson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.