2012-07-19 13 views
13

Bir + ++ programı içinden addr2line tarafından sağlanan bilgileri (dosya ve çağrıyı geri çağırmadan satır) sağlamanız gerekir. Addr2line'a benzer bir kütüphane çağrısı var mı?addr2line'a kütüphane çağrısı var mı?

düzenleme: Linux ortamında çalışıyorum.

Doğrudan addr2line'ı arayabileceğimi biliyorum ve programımda source code addr2line'ı kullanabileceğimi biliyorum (ayrıca GPL lisanslıdır). Ama sanırım kütüphane işlevi çağırıyorsa, daha temizdir.

düzenleme: Sadece addr2line'ın yaptığı gibi binutils'in bfd'sini kullanacağım. Bfd ne anlama geliyor?

+0

libdwarf sizin için ne arıyor –

+0

Öneriniz için teşekkürler. Dwarfdump denedim ve sadece çağrıldıkları yerde değil, işlevlerin nerede bildirildiğini yazdırıyor. İyi bir dokümantasyon bulamadım ... – steffen

+2

'bfd', http://en.wikipedia.org/wiki/Binary_File_Descriptor_library (aslında BFD'nin diğer anlamı için dursa da) :) – ecatmur

cevap

6

dladdr() işlevini deneyebilirsiniz. Programın dinamik sembollerini kullanır, hata ayıklama bilgilerini değil (programı gcc -rdynamic ile derler).

Ayrıca, backtrace kitaplığını veya üst düzey stacktrace kitaplığını kontrol edebilirsiniz.
Tam olarak ne soruyorsunuz, ama yararlı olabilirler.

+1

İp uçları için teşekkür ederim. Dladdr() ile manage hakkını anlarsam, sadece dinamik olarak bağlantılı kod ve sadece dosya adı değil, satır için bilgi alırım. Adresi almak için zaten backtrace kullanıyorum. İhtiyacım olan şey, dosyayı ve satırı adresden çıkarmak için bir şey. stacktrace backtrace için sadece bir sarıcıdır. – steffen

+0

Bunlara ek olarak, 'libunwind' kütüphanesi de vardır: http://www.nongnu.org/libunwind/ –