SORU
10 EKİM 2010, Pazar


baskı C yığın veya C çağrısı

Dökümü için bir yol aramayı C veya C çalışma süreci her zaman belirli bir fonksiyon denir yığını var mı? Aklımdaki böyle bir şey

void foo()
{
   print_stack_trace();

   // foo's body

   return
}

print_stack_trace benzer şekilde Perl caller çalıştığı.

Ya da şöyle bir şey:

int main (void)
{
    // will print out debug info every time foo() is called
    register_stack_trace_function(foo); 

    // etc...
}

register_stack_trace_function iç kesme çeşit koyduğu bir eser foo çağrıldığında yazdırılacak yığını neden olur.

Böyle bir şey bazı standart C kütüphanesinde var mı?

Linux üzerinde GCC kullanmaya çalışıyorum.


Arka plan

Farklı olarak bu davranışı etkilemez bazı komut satırı anahtarları göre davranan bir test var. Benim kodu farklı bu anahtar tabanlı deniyor sanırım bu sözde rastlantısal sayı üreteci vardır. Anahtarların her biri ile test çalıştırmak ve eğer jeneratör rasgele sayı her biri farklı deseydi görmek mümkün olmak istiyorum.

CEVAP
10 EKİM 2010, Pazar


Linux-sadece bir çözüm için sadece void * bir dizi döndürür backtrace(3) karşılık gelen bir dönüş adresi için bu noktanın her yığın çerçevesi aslında () kullanabilirsiniz. Yararlı bir şey için bu çevirmek için, backtrace_symbols(3) var.

notes section in backtrace(3) dikkat:

Sembol isimleri kullanılamıyor olabilir özel bağlayıcı kullanmadan seçenekler. Sistemleri GNU linker kullanarak, gerekli kullanmaktır -rdynamic linker seçeneği. İsimleri "statik" fonksiyonları açık değildir,unutmayın ve olmayacak geri iz mevcut.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • A Alkhaldi

    A Alkhaldi

    12 Mayıs 2007
  • LAHWF

    LAHWF

    5 Kasım 2009
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010