2009-10-17 31 views
7
için değerlendirme sonucunun nasıl yazdırılacağı

Çevreye baktım ancak bir sonucun sonucunu gdb'de nasıl yazdırabileceğini anlayamadım. yani aşağıdaki kodu örneğin:gdb - C++

if (strcmp(current_node->word,min_node->word) > 0) 
     min_node = current_node; 

şimdi ben min_node izleyip görebiliyordu (i dizeleri alfabetik sırasını kontrol etmek için olası bir yöntem deneyerek, ve düzgün çalışır kesinlikle emin değildi edildi üstünde) Değer değişiyorsa ancak daha fazla kodda bu bazen daha karmaşıktır. Şu anda gdb/program akışının olduğu hat üzerinde bir testin değerlendirmesini izlemek için basit bir yol olup olmadığını merak ediyordum.

çok teşekkürler!

cevap

16

Gdb'de ifade düzeyi tek adımlama yok, eğer istediğin buysa.

Seçenekleriniz (en sık en sık kullanılmayan ila) şunlardır:

  1. print strcmp(current_node->word,min_node->word) yapıyor, gdb ifadesini değerlendirir. Şaşırtıcı bir şekilde, bu işe yarar: gdb, kodları çalışan programa enjekte ederek ve kodu çalıştırarak işlev çağrılarını değerlendirebilir. Tabii ki, fonksiyonların yan etkileri varsa veya çökebilirse bu oldukça tehlikelidir; Bu durumda, insanların tipik olarak potansiyel problemleri düşünmeyecekleri çok zararsızdır.
  2. Tek kademeli (ni/si) komut düzeyini (montaj) gerçekleştirin. Çağrı talimatı yapıldığında, sonuç, işlemci sözleşmelerine göre bir kayıtta (% xx x86) bulunur.
  3. Değişkenlere ara değerler atamak ve bunu ayrı satırlara/ifadelere bölmek için kodu düzenleyin; daha sonra düzenli tek adımlı kullanın ve değişkenleri inceleyin.
+0

harika, teşekkürler - bu yardımcı olur! – nero

4

sadece yazmak için deneyebilirsiniz:

çağrısı "my_funtion()"

kadarıyla i rember gibi bir işlev satır içi zaman o işe yaramaz gerçi.