პროგრამული უზრუნველყოფის დეველოპერები ხშირად ეყრდნობიან Source Maps-ს, რათა წარმოებაში დაფიქსირებული შეცდომები (stack traces) კვლავ წაკითხვად ფორმაში მოაქციონ. თუმცა, Traceway-ის დამფუძნებლის კვლევა ადასტურებს, რომ ეს ტექნოლოგია საკმარისი არ არის.


როდესაც კოდი მინიფიცირდება, ფუნქციების სახელები იცვლება, რაც ართულებს შეცდომის წყაროს პოვნას. აღმოჩნდა, რომ Source Maps მხოლოდ კოდის პოზიციურ მონაცემებს ინახავს და არა ფუნქციების სახელების სრულყოფილ რუკას.


როგორ მუშაობს Source Maps?

Source Map ფაილი არის JSON სტრუქტურა, რომელიც აერთიანებს ორიგინალ ფაილებს, მათ შინაარსს და „mappings“-ს. ეს უკანასკნელი წარმოადგენს Base64-VLQ კოდირებულ მონაცემებს, რომლებიც მიუთითებს, თუ სად მდებარეობს კონკრეტული ტოკენი ბუნდლში და რას შეესაბამება ის ორიგინალ კოდში.


პრობლემა იმაშია, რომ Source Maps არ ინახავს დიაპაზონებს (ranges), არამედ მხოლოდ წერტილებს (points). ეს ნიშნავს, რომ მას არ შეუძლია „გაიგოს“, თუ სად მთავრდება ერთი ფუნქცია და სად იწყება მეორე. შედეგად, ის მხოლოდ კონკრეტულ სიმბოლოებზე მიუთითებს.

CharBase64 valueBinary (6 bit)Continuation?Payload (low 5)
S18010010no (bit 32 clear)10010 = 18
A0000000no0
A0000000no0
S18010010no18
A0000000no0


რატომ არის საჭირო ორიგინალი ბუნდლი?


სრულფასოვანი სიმბოლიკაციისთვის მხოლოდ რუკა არ კმარა. დეველოპერებს სჭირდებათ თავად მინიფიცირებული ბუნდლიც. რუკა ხშირად აბრუნებს არასწორ სახელებს, რადგან ის უბრალოდ „კითხულობს“ იმას, რაც ჩაწერილია კონკრეტულ პოზიციაზე, და არა იმას, თუ რა ფუნქციაში იმყოფება პროგრამა.



ArtifactWhat it provides
Stack tracethe query: bundle positions and minified names
Source maptranslation: position → original position, and token → original name
Bundlestructure: which function encloses a position, and where its name token sits
TraceNamesLocationsWhat it proves
minified (production)n, t, none, nonebundle line 1the starting point a tracker receives
non-minified bundlecorrectbundle positionswhat minification destroyed
node --enable-source-mapsmostly correct, callee leak on globaloriginal TSevery name came from the caller-site fallback; the global frame leaks
targetcorrect incl. original TSrequires map + parsed bundle

საბოლოო ჯამში, შეცდომების თვალთვალის სისტემები, როგორიცაა Sentry ან Traceway, იძულებულნი არიან დაამუშავონ როგორც რუკები, ისე თავად ბუნდლი, რათა მიაღწიონ სიზუსტეს. მხოლოდ ამ ორი კომპონენტის კომბინაციით ხდება შესაძლებელი კოდის სრული დეკოდირება.