Documentation
¶
Overview ¶
Package stackparse — stack trace metnini yapısal frame'lere çeviren SAF çözümleyici (v0.9.830).
Amacı tek: bir frame'i KAYNAK KODDA konumlandırabilmek. Bunun için dosya adı, satır numarası ve "bu uygulama kodu mu, çerçeve gürültüsü mü?" bilgisi gerekir; gerisi (repo eşleme, dosya çekme) devops paketinin işi.
fingerprint bilinçli ayrı, bkz. spec 2026-08-09 ¶
chstore.topFrames / FingerprintException bu paketi KULLANMAZ ve kullanmamalıdır. Parmak izi, ClickHouse'ta hâlihazırda milyonlarca satırın kimliği: buradaki normalizasyonun (war// öneki soyma, JPMS modülü ayırma) oraya sızması mevcut TÜM grupları yeniden numaralandırır — operatörün ekranında bir gecede "yeni" exception seli, üstelik sessiz. Bu paket yalnız OKUMA tarafıdır; gruplama hattına dokunmaz. İki taraf da aynı metni okur, farklı soruyu cevaplar ve bilinçli olarak ayrı kalır.
Java önce (operatörün filosu JBoss/WildFly ağırlıklı). Go/Python istenirse aynı Frame sözleşmesiyle eklenir.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FromLog ¶ added in v0.9.1182
FromLog, log özniteliklerinde ve gerekirse gövdede stacktrace arar. Bulamazsa ("", false) döner — çağıran bugünkü "stacktrace yok" davranışını aynen sürdürür.
func IsAppClass ¶
IsAppClass — sınıf adı uygulama kodu mu? Saf; tablo-testli.
Önek eşleşmesi, "içeriyor" DEĞİL: com.example.jdk.Helper bir uygulama sınıfıdır, "jdk." alt dizgisi geçiyor diye elenmemeli.
func MessageHead ¶ added in v0.9.1182
MessageHead — gövdeden İLK frame'e kadarki kısım (stack gövdeden geldiğinde prompt'a giren "mesaj" yarısı).
Frame'leri kesip atmak değil, mesajı AYIRMAK: frame'ler zaten stack alanında ve orada daha büyük bir bütçeyle duruyor; ikisini birden göndermek aynı baytları iki kez ödemek olurdu.
Types ¶
type Frame ¶
type Frame struct {
// Class — tam nitelikli sınıf adı (paket dahil), örn.
// com.example.billing.CardService. İç sınıflarda $ korunur.
Class string
// Method — metot adı; <init> / <clinit> / lambda$x$0 aynen kalır.
Method string
// File — kaynak dosya adı (yol YOK, Java stack'i yol taşımaz).
File string
// Line — kaynak satırı; 0 = bilinmiyor.
Line int
// Module — soyulan önek: "deployment.BSAWEB.war", "java.base",
// "org.jboss.as.ee", "mymodule@1.2.3". Boş = önek yoktu.
Module string
// IsApp — uygulama kodu mu? Çerçeve/JDK frame'leri false.
IsApp bool
// Segment — frame'in "Caused by" zincirindeki derinliği (v0.9.1235).
// 0 = en dış (wrapper) exception'ın kendi stack'i, 1 = ilk
// "Caused by:" bölümü, 2 = onun sebebi… Java en DIŞTAKİNİ önce
// basar, kök neden ise EN DERİN segmenttedir; bu alan olmadan
// zincirdeki yer aşağı akışta geri kazanılamıyordu.
Segment int
}
Frame — çözümlenmiş tek stack satırı.
File/Line boş olabilir ("Unknown Source", "Native Method") — o frame kodda konumlandırılamaz, çağıran atlar.
func AppFrames ¶
AppFrames — IsApp olan ve kodda konumlandırılabilen (dosya+satır) en fazla n frame, EN DERİN "Caused by" segmentinden dışa doğru. Kod çekmenin girdisi; saf.
Satırsız app frame'i ELENİR: dosya adı eşleşse bile pencere merkezi olmaz, "dosyanın başından 60 satır" ise kanıt değil gürültüdür.
Neden en derin segment önce (v0.9.1235) ¶
Java stack'i en DIŞTAKİ (wrapper) exception'la başlar; gerçek kök neden en derin "Caused by:" bölümündedir. Metin sırasına göre ilk n frame'i almak, katmanlı BSA/EJB kodunda — ki orada catch-rethrow yolu da uygulama sınıflarından geçer — üç kod penceresinin üçünü de wrapper'ın yeniden-fırlatma satırlarına harcıyor, hatanın DOĞDUĞU satır hiç pencere alamıyordu. Artık bütçe önce kök nedene gidiyor, artan kalırsa dışarı doğru yürüyor.
Segment İÇİNDEKİ sıra korunur (fırlatma noktası o segmentin de en üstündedir) ve tek segmentli stack'te davranış eskisiyle BİRE BİR aynıdır — elle kurulan Frame'lerin Segment'i 0'dır.
func ParseJava ¶
ParseJava — Java/Kotlin/Scala stack trace'ini frame'lere çevirir.
Tanınmayan satırlar (mesaj başlığı, "... 42 more", yarım kesilmiş satır) sessizce ATLANIR: stacktrace'ler log alanlarında kırpılmış gelir, tek bozuk satır tüm çözümlemeyi düşürmemeli.
"Caused by:" satırı da bir frame DEĞİL, ama artık sessiz değil: gördüğü yerde segment sayacı artar ve sonraki frame'ler Segment=N ile işaretlenir (v0.9.1235). Frame'ler yine metindeki SIRAYLA listeye girer — sıralamayı değiştirmek çağıranın işi (AppFrames), çünkü bu paketin sözleşmesi "metni sadakatle çevir".
"Suppressed:" bölümleri BİLİNÇLİ kapsam dışı: try-with-resources'ın bastırılmış hatası semantik olarak bir sebep zinciri değil, paralel bir yan olaydır ve operatörün filosunda nadirdir. Segment sayacına karışmaması, bastırılmış bir kapatma hatasının kök neden yerine geçmesini engeller.
func (Frame) PackagePath ¶
PackagePath — sınıfın paket yolu, "/" ayraçlı: com.x.billing.Card → "com/x/billing". Depo ağacında dosya eşleştirirken skorlayıcının girdisi. Paketsiz sınıf → boş.