Hata ayıklama için kesme noktaları nasıl kullanılır


9

Kesme noktaları, derleyicinin kodunuza nasıl çalıştığını görmenin harika bir yoludur. Şimdi sorum şu: Kodunuzda hata ayıklama yaparken kesme noktaları kullanma imkanı var mı?

Yanıtlar:


9

Majenko'nun cevabında belirtildiği gibi, Arduino IDE bir kesme noktası mekanizması sağlamaz, ancak Atmel Studio kesme noktalarını destekler . [*]

Ancak, bir anahtarınız ve bir LED'iniz varsa, programınızın ilerlemesini kesme noktalarının bazı avantajlarını sağlayacak şekilde izleyebilirsiniz. Örneğin BPReport(), seri çıkış veya LCD aracılığıyla kritik değişkenlerin değerlerini bildiren bir alt rutin eklersiniz , daha sonra LED'i yakar ve aniden açılma ile anahtara basılana ve bırakılıncaya kadar bekler. BPReport()Koşulsuz bir kesme noktası istediğiniz yerde rutininizi arayın . Koşullu kesme noktaları, bir rutin olabilir BPReportIf(cond)aramaları BPReport()durumunda condgeçerlidir. Seri yoluyla çıkış yapmak istemiyorsanız, birkaç LED veya LCD kullanabilirsiniz ve harici fren kontrolleri istiyorsanız (örneğin, condekstra anahtarlardan birinin testi olabilir) birkaç anahtar kullanabilirsiniz .

[*] Bazı donanım hata ayıklayıcıları, kesme noktaları her eklendiğinde, değiştirildiğinde veya kaldırıldığında indirilen kodu değiştirir. Bu kullanım flash belleği zaman zaman indirmekten daha hızlı yıpranacaktır. Bir çip bu tür hata ayıklama için yoğun bir şekilde kullanılmışsa, o çipi bir üretim sisteminde kullanmayın.


4

Majenko'nun cevabı doğru olmasına rağmen başka seçenekler de var.

Majenko tarafından belirtildiği gibi gerçek donanım hata ayıklama ile ilgili olarak şunu söyleyebilirim:

  1. Atmel Studio veya sloeber (ben yazarım) adı verilen arduino eclipse eklentisi gibi gerçek bir IDE yükleyin ve kullanın ve
  2. Arduio zero gibi yerleşik bir donanım hata ayıklayıcı veya donanım veya USB hata ayıklamaya izin veren ESP8266 gibi diğer hata ayıklama teknolojisini kullanan donanım kullanın

Tamamen farklı bir kategorideki diğer bir hata ayıklama seçeneği, kodunuzu, karar mantığı (donanıma bağlı olmayan) ve eylemin (donanıma bağlı) tamamen ayrılacak şekilde düzenlemektir.

Ardından çiziminizi yerel bir program olarak derleyin ve yerel makinenizdeki "karar mantığında" hata ayıklayın. Bu yöntem "donanım hata ayıklamasına" izin vermez. Bu yöntem aynı zamanda birim testine de olanak tanır.

Yerel makinenizin muhtemelen 32 veya 64 acı olduğunu ve çoğu Arduino'nun 8 acı olduğunu ve bu yöntem kullanılırken veri türlerinde farklılıklara neden olacağını unutmayın.


4

Arduino-ayıklama kütüphane Arduino skeçler için basit on-hedefin ayıklayıcısını sağlar. Hata ayıklama komutu doğrudan taslağa eklenir. Kesme noktaları ve iddialarda bir hata ayıklayıcı komut kabuğu başlatılır.

resim açıklamasını buraya girin

Yukarıdaki ekran görüntüsü , uygulama tarafından kullanılan Seri çıkış monitörüne sahip bir Arduino Mega ve hata ayıklayıcı kabuğu için kullanılan Seri1 örnek çizimini göstermektedir .

Çizim Hata Ayıklama Komutları

  • ASSERT (koşul) Onay koşulunu kontrol edin. False olursa, hata ayıklama kabuğu çağrılır. Çizim devam edemez.
  • BREAKPOINT () Hata ayıklama kabuğu çağrılır.
  • BREAK_IF (koşul) Koşul doğruysa hata ayıklama kabuğu çağrılır.
  • CHECK_STACK (oda) Yığın üzerinde yer (bayt) olduğunu kontrol edin. False olursa, hata ayıklama kabuğu çağrılır.
  • DEBUG_STREAM (dev) Hata ayıklama oturumu için belirtilen akış aygıtını kullanın. Genellikle Seri.
  • GÖZLEM (ifade) İfadeyi hata ayıklama akışına yazdırın.
  • OBSERVE_IF (cond, expr) Koşul doğruysa ifadeyi hata ayıklama akışına yazdırın.
  • KAYIT (var) Hata ayıklama kabuğundan erişim için bir değişken kaydedin. Kabuk Komutlarında Hata Ayıklama

Kabuk Komutlarında Hata Ayıklama

  • DEĞİŞKEN Değişken adresini ve değerini yazdırın.
  • @VARIABLE İşaretçi değişken adresini ve referans değerini yazdırın.
  • backtrace Basit çağrı yığını yazdırın.
  • komutlar Komut listesini yazdır (ayrıca yardıma bakın).
  • data Veri alanının içeriğini, yani global değişkenleri yazdırın.
  • git Hata ayıklama kabuğundan ayrıl ve çizim işlemine devam et.
  • yığın Yığın içeriğini, yani dinamik olarak ayrılmış verileri yazdırın.
  • help Komut listesini yazdır.
  • bellek Bellek durumunu yazdırın.
  • çıkın Dur skeci.
  • yığın Yığının içindekileri (ör. çağrı çerçeveleri, bağımsız değişkenler, dönüş adresleri) yazdırın.
  • Değişkenler Kayıtlı değişkenlerin listesini yazdır.
  • Burada Kaynak kodu dosyasını ve hata ayıklama kabuğunun çağrıldığı satırı yazdırın.

Tüm hata ayıklama kabuğu komutları tek karakterli komutlarla kısaltılabilir. Daha fazla bilgi için lütfen README'ye bakınız; kurulum detayları, örnek eskiz ve kıyaslama.


1
Mikael'in bağışlanan kütüphanesi, koşullu kesme noktalarını, değişkenlerin değerlerini, bellek durumunu, çağrı izlerini ve kesme noktasında değişkenleri inceleyip değiştirmenizi sağlar. Pro: Donanıma ($$) ihtiyaç duymaz, Flash üzerinde zorlanmaz (bir donanım hata ayıklayıcı ile kesme noktalarını ayarlamak ve kaldırmak gibi). ....
JRobert

1
.... Con: Zaman açısından önemli kodlar inceleniyorsa, programın kod alanı, bazı RAM alanı ve muhtemelen çalışma zamanı üzerinde daha yüksek etki; kütüphane çağrılarını derlemek (ve daha sonra kaldırmak) için bazı öğrenme eğrileri; kırılma noktası konumlarını tahmin etme veya ihtiyacınız olan yeri keşfettiğinizde yeniden derleme ihtiyacı. Dezavantajlar Mikael'in çalışmalarına bir eleştiri değildir; bu teknikle geliyorlar.
JRobert

1
@JRobert Nice Pro-Con özeti! Hata ayıklayıcının uyarlanmasına izin vererek bazı Eksileri ele almaya çalıştım. Ayak izine duyarlı uygulamaların hata ayıklama kabuğunu en aza indirmesine izin verecek bir dizi tanım vardır. Gömülü sistemler için herhangi bir hata ayıklayıcı olarak, zaman kritik (sürekli) kodun kesme noktaları ile hata ayıklanması zordur. Tek alternatif gözlem noktalarıdır. Bunlar, bir izleme arabelleği kullanılarak optimize edilebilir ve zaman kritik kodunda seri çıkışı kaldırabilir.
Mikael Patel

3

Arduino IDE'de değil.

Gerek:

  1. Atmel Studio gibi gerçek bir IDE yükleyin ve kullanın ve
  2. Tam bir donanım hata ayıklayıcı kullanın

Önyükleyiciyi kullanarak UART / USB arabirimi üzerinden hata ayıklama için herhangi bir hüküm yoktur.

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.