Başka bir geliştiricinin programını analiz etmek için ABAP Debugger kullandığınızı farz edelim. Bununla birlikte; debug ettiğiniz program...
Başka bir geliştiricinin programını analiz etmek için ABAP Debugger kullandığınızı farz edelim. Bununla birlikte; debug ettiğiniz program sadece kendi program akış mantığını içermez, ancak diğer programlarda yer alan bir çok bilinmeyen kodları da içerir (Örneğin, tabloları ekranda görüntülemek için SAP standart kütüphanelerinde yer alan kodlar).
ABAP ile ilgili yayınlar birbirlerini takip eden konular içerir. Tüm ABAP yayınlarının listesine ulaşmak için tıklayınız.
ABAP Debugger'da iş arkadaşınızın program mantığını detaylı olarak anlamaya çalışırken, kafa karıştırıcı sistem class'larının kasırgasına yakalanabilirsiniz.
Tersi de söz konusu olabilir: ABAP geliştirmelerinin çoğu giderek framework'ler içinde implemente edilmektedir, örneğin Web Dynpro ABAP gibi. Burada, gerçek iş uygulama mantığını içeren kod doğrudan kullanıcı tarafından başlatılmaz; bunun yerine çağrı dizisinin en üst düzeyi (örneğin, Web Dynpro framework) ilk olarak çağrılır. Bu ise, kullanmak istediğiniz işlevi çağırana kadar bir sürü teknik framework kodu çalıştırır.
Eğer framework kodu içerisinde, manuel olarak gezinirseniz, debug oturumu çok zaman alacaktır. Sonuçta, kodun karmaşıklığı nedeniyle, (tüm program ile karşılaştırıldığında oldukça küçük olan) gerekli program parçasını yanlışlıkla atlamak çok kolaydır.
Sorun tüm karmaşık uygulama yazılımlarında aynıdır: Veritabanı erişimi, hesaplamalar, diyalog ekranları ve arayüzler gibi çeşitli alt görevleri çözen çok sayıda bileşen, birbirleri ile etkileşim halindedir ve birlikte genel bir çözüm oluşturur. ABAP Debugger'da adım adım izlediğiniz program akışı süresince, muhtemelen siz hepsi ile ilgilenmiyor bile olsanız bu bileşenlerin hepsi işlenir. Hatanın hangi alanda olabileceği hakkında bir fikriniz varsa, hatayla ilgisi olmayan bileşenleri gizleyebilir veya ilgisi olmayan bileşenlerin kodunu ABAP Debugger'da atlayabilirsiniz.
7.02 EHP2 sürümünden beri, ABAP Debugger'ın özel yazılım katmanları için layer-aware (katmanlı) hata ayıklama sağladığını unutmayın. Katmanlı hata ayıklama, ABAP Debugger'ın analiz etmesini istemediğiniz yazılımı kolaylıkla gizleme imkanı sağlar. Yazılım hala işler, ancak arka planda çalışır. Debugger gizli yazılım katmanlarındaki hiçbir adımı göstermez ve yalnızca gerçekten debug etmek istediğiniz bir kaynak kodu alanına ulaştığında size bildirimde bulunur.
Bir sonraki yayında yer alan Z_MEMBERLIST01_DEBUG örnek kodu Z_MEMBERLIST01 programının biraz değiştirilmiş bir şeklini göstermektedir. Kodun kendisi bir sonraki "Katmanlı hata ayıklama için örnek kod" bölümünde olsa da, programa bir göz atın. Bu versiyon ile önceki versiyon arasındaki farkları ayırt ettiniz mi? Aşağıdaki bölümler bu farkları adım adım açıklar.
Programa; aslında basit bir liste çağıran, standart SAP modülü REUSE_ALV_GRID_DISPLAY için bir çağrı eklendi. Bu modül, çağrılan programın ana bellekte yer alan içsel tablosunu kullanıcı dostu bir şekilde görüntüler. Ayrıca filtrelemek, dışa aktarmak ve görünümü değiştirmek için de fonksiyonlar mevcuttur.
Eğer Z_MEMBERLIST01_DEBUG programını çalıştırırsanız, bilinen liste çıktısı yerine üye listesinin tablo görünümü gösterilir (Şekil 1). Bu tablo ekranına, SAP Liste Görüntüleyici, ALV Grid ya da sadece ALV denir. Birçok SAP diyalog ekranında ALV'yi görebilirsiniz.
![]() |
Şekil 1. REUSE_ALV_GRID_DISPLAY Modülünün Çıktısı |
Liste çıktısının çeşitli fonksiyonlarını inceleyin ve tablonun üstündeki simgeleri kullanmayı deneyin. Bu simgelerde, diğer şeylerin yanı sıra, sıralama, filtreleme, dışarıya aktarma ve ekran düzenini yönetmek için fonksiyonlar bulabilirsiniz. Eğer bir tablo satırına çift tıklarsanız, sistem bir mesaj görüntüler (Şekil 2).
![]() |
Şekil 2. Tablo Satırına Çift Tıklayınca Görüntülenen Mesaj |
DEVAM'ı tıklayarak mesajı onaylarsanız, tablo ekrana geri dönersiniz. Geri tuşuna tıklamak veya F3'e basmak sizi programın bilinen liste çıktısına götürür (Şekil 3). Daha sonra Geri veya F3 ile liste çıktısından da çıkabilirsiniz.
![]() |
Şekil 3. Programın Liste Çıktısı |
Ne oldu? Eğer Kod 6.1’deki programı dikkatli okursanız, mesaj çıktısından sorumlu olabilecek bir alt yordam, CALLBACK_USER_COMMAND, olduğunu fark etmişsinizdir. Bu alt program bizim programımızda çağrılmamış olsa bile, yine de işlendi çünkü bir tablo satırı üzerine çift tıkladığınızda mesaj görüntülendi. Bu nasıl mümkün olabilir?
Cevap şudur; bir callback fonksiyonu kullanıldı. Bu durumda; çağıran program (Z_MEMBERLIST01_DEBUG) çağrılan programa (REUSE_ALV_GRID_DISPLAY) fonksiyonun adını (burada CALLBACK_USER_COMMAND alt yordamı) transfer eder. Bu fonksiyon modülü (REUSE_ALV_GRID_DISPLAY) daha sonra gerektiğinde ilgili programı (CALLBACK_USER_COMMAND) çağırır. Yani çağrılan REUSE_ALV_GRID_DISPLAY programı kendisini çağıran programın (Z_MEMBERLIST01_DEBUG) bir fonksiyonunu (CALLBACK_USER_COMMAND) geri çağırır ve yürütür.
Yinelenen görevler için, genel çözüm olarak yaratılan framework'ler ve servis modüllerinin yazılımlarında bu gibi yapıları bulabilirsiniz. Yinelenen görevler büyük ölçüde standardize edilebilir olsa da, bazen uygulamaya özgü kodu akış içine gömmek gereklidir. Bu örnekteki durum da böyledir: Bizim programımız (Z_MEMBERLIST01_DEBUG) standart modülü (REUSE_ALV_GRID_DISPLAY) ve standart modül de programımızın bir fonksiyonunu (CALLBACK_USER_COMMAND) çağırır.
Programı yeniden, ancak bu sefer yeni ABAP Debugger'da başlatın. Şekil 4’de gösterildiği gibi, Configure Debugger Layer'a tıklayın. Açılan iletişim kutusunda layer-oriented debugging’i (katman odaklı hata ayıklama) yapılandırın (Şekil 5). Burada, LAYER-AWARE DEBUGGER ACTIVE onay kutusunu işaretleyin. Bu işaretleme, giriş için pencerenin alt kısmını hazırlar.
![]() |
Şekil 4. Hata Ayıklayıcıda Z_MEMBERLIST01_DEBUG Programı |
![]() |
Şekil 5. Layer-Aware Debugging İçin Uyarlama Ekranı |
DIRECT DEFINITION OF THE VISIBLE OBJECT SET (LAYER) radyo düğmesi varsayılan olarak seçilidir. Bu bizim durumumuzda yeterlidir; eğer sürekli olarak ABAP Debugger kullanıyorsanız, periyodik erişim için burada profilleri saklayabilirsiniz.
Amacımız program akışını debug etmektir. Ancak sistemin Z_MEMBERLIST01_DEBUG programının kendisindeki kodu görüntülemesini istiyoruz. Sistemin, programın yürütülmesi sırasında işlenen standard SAP modülü kodlarını gizlemesi gerekir.
Bu amaçla, PROGRAMS alanına Z_MEMBERLIST01_DEBUG programının adını yazın ve STOP AT ENTRY onay kutusunu seçin (STOP AT EXIT onay kutusunun seçili olmadığını kontrol edin). Ardından iletişim kutusunu onaylamak için CONTINUE tuşuna tıklayın.
ABAP Debugger'a geri dönüldüğünde, NEXT OBJECT SET düğmesinin görünmesi layer-aware debugging'in etkin olduğunu gösterir (Şekil 6).
![]() |
Şekil 6. Layer-Aware Debugging Etkin Olduğunda Debug Ekranının Görünümü |
Şimdi normal ayıklayıcı işlevlerinin hala kullanılabilir olduğundan emin olmak için, bazı program adımlarını debug edebilirsiniz.
İletişim kutusunda, Z_MEMBERLIST01_DEBUG programına erişildiğinde debug yapmak istediğinizi belirttiğinizi unutmayın. Yeni düğmeye, yani NEXT OBJECT SET düğmesine tıklarsanız; sistem, program akışında bu tanıma karşılık gelen bir sonraki noktaya kadar, programı yürütmeye devam eder (Yani, Z_MEMBERLIST01_DEBUG programına tekrar erişilene kadar).
NEXT OBJECT SET düğmesine tıkladığınızda, sistem ABAP Debugger'dan çıkar ve üye listesinin tablo ekranını gösterir. Neden bunu yapıyor? Çünkü, programın interaktif fonksiyonları debugging işlemi boyunca dokunulmadan kalır ve iletişim çıktıları basılmaz. Şimdi işlem, akışta debug edilmesi gereken bir sonraki noktaya ulaşıncaya kadar, her zamanki gibi devam eder (yani, programımıza tekrar erişildiğinde).
Sıralama, filtreleme ve dışa aktarma fonksiyonlarını ABAP Debugger'ı görüntülemeden istediğiniz gibi kullanabilirsiniz. Çünkü bu fonksiyonlar için işlenen program kodlarının tamamı seçilen nesne kümesinin dışındadır.
Yalnızca, bir tablo satırına çift tıklamanızdan sonra, tablo görünümü için standart SAP modülü (REUSE_ALV_GRID_DISPLAY) bizim callback fonksiyonumuzu hatırlar (CALLBACK_USER_COMMAND) ve Z_MEMBERLIST01_DEBUG programının CALLBACK_USER_COMMAND alt programına gider. Bizim tanımımıza göre, debugging oturumumuz da devam etmelidir, çünkü bu (ve sadece bu) programda meydana gelen her şey ile ilgileniyoruz.
- [message]
- Next Object Set Bir Kesme Noktası Değildir
- NEXT OBJECT SET fonksiyonu ile bir breakpoint veya watchpointi karşılaştırırken dikkatli olun. Bu benzerlik yanıltıcıdır: ABAP Debugger tanımlanan yazılım katmanlarına erişimlere ve çıkışlara breakpoint gibi muamele etmez.
Yani Devam (F8) fonksiyonu sizi bir sonraki nesne kümesine götürmez. Bu amaçla, yalnızca NEXT OBJECT SET işlevini kullanabilirsiniz.
Tablunun üzerinde çift tıklamak, sizi sonunda geri ABAP Debugger'a götürür. Şekil 7’de görebileceğiniz gibi, sistem bildirim çubuğunda "Selected object set was entered" şeklinde seçilen nesne kümesine erişildiğini bildiren bir mesaj verir. Sistem program yürütümünün tekrar hata ayıklamak istediğiniz Z_MEMBERLIST01_DEBUG programına ulaştığını anlar.
![]() |
Şekil 7. Callback Alt Yordamına Erişilmesi |
Program yürütümü, adı daha önce (i_callback_user_command = 'CALLBACK_USER_COMMAND' satırı ile) callback fonksiyonu parametresi olarak SAP fonksiyon modülüne (REUSE_ALV_GRID_DISPLAY) gönderilen alt yordama (CALLBACK_USER_COMMAND) ulaşmıştır.
Şimdi ABAP Debugger'da program akışını adım adım takip edebilir veya NEXT OBJECT SET’e tıklayarak sistemin debug işlemine devam etmesini sağlayabilirsiniz.
- [message]
- Devre Dışı Bırakma ve Etkinleştirme
- Hata ayıklama oturumunuzun herhangi bir anında layer-aware debugging'i etkinleştirebilir veya devre dışı bırakabilirsiniz. Bunu yapmak için, sadece Activate Layer-Aware Debugging veya Deactivate Layer-Aware Debugging düğmesini kullanın. Sistemin kendi kendine layer-awawre debugging'i devre dışı bırakması mümkündür, çünkü sistemi etkinleştirdiğinizde, son kullanılan kullanıcı profili uygulanır.
YORUM