STM32CubeIDE'de C++ Debug Sorunları

Başlatan Tagli, 28 Ekim 2021, 14:44:06

Tagli

STM32CubeIDE'de C++ kodunu debug ederken birkaç sorun yaşıyorum.

1) Template kodlarının içine koyduğum breakpoint'lere düşmüyor bir türlü. O kodun çalıştığından eminim, ama debugger o breakpoint'leri hiç görmüyor gibi.

2) C++17 ile gelen inline değişken özelliği ile class içinde bir inline static değişken tanımladığım zaman, debugger bu değişkenin değerini göremiyor, hep 0 gösteriyor. Değişkenin güncellendiğini ham bellek adresi değerini kontrol ederek görebiliyorum.

Bu iki durum debug sırasında çok can sıkıcı bir deneyime sebep oluyor. Sırf debug yapabilmek için function template'lerin (ki ben bunları kesmeler için de kullanıyorum) template olmayan düz fonksiyon halini oluşturup kodu yeniden düzenlemem gerekiyor ki içlerine girip ne olup bittiğini görebileyim.

Bu sorun STM32CubeIDE ile mi ilgili yoksa doğrudan GDB ile gelen bir kısıtlama mı bilmiyorum.

Çözüm önerisi olan var mı?
Gökçe Tağlıoğlu

e-zeki

Hocam template fonksiyonlar  keil debug'da da breakpointleri görmüyor.
https://stackoverflow.com/questions/61600798/gdb-breakpoints-do-not-hit-template-functions
şurada bir açıklama var işinizi görürse

Tagli

Teşekkürler. Bağlantıdaki cevaptan anladığım kadarıyla komut satırında bunu yapmak mümkün. O zaman IDE, GDB için doğru komutları üretemiyor, ya da bunu başka bir şekilde anlatmamız gerekiyor.

Bu arada, bazen fonksiyon template'lerinin içine girdiğini görüyorum ama genelde saçmalıyor. Mesela arka arkaya yazılmış 2 kısa fonksiyon var, A() ve B() olsun. Ben A() içine breakpoint koyuyorum, ama B() çağrıldığı zaman onun içinde rastgele bir yerde duruyor.

Optimizasyon seviyelerinin debug işine olumsuz etki ettiğini ve bazen breakpoint'leri birkaç satır kaydırabildiğini biliyorum ama -O1 gibi düşük bir seviyede çok ciddi bir etki beklemiyorum açıkçası. Bilmiyorum belki bir de -O0 ile denerim ama çok da umutlu değilim.
Gökçe Tağlıoğlu

kantirici

Sorunun kaynağı olduğundan emin değilim ama mevzu debug ise optimizasyonu tümden kapatarak yapmak en ideali.

Tagli

Aslında debug için muhtemelen en iyisi -Od seçeneği. Özellikle debug için optimize ediyor bu durumda. -O1 ile -Od birbirine çok yakın sonuçlar veriyorlar.
Gökçe Tağlıoğlu