პროგრამული უზრუნველყოფის დეველოპერები ხშირად ეყრდნობიან Source Maps-ს, რათა წარმოებაში დაფიქსირებული შეცდომები (stack traces) კვლავ წაკითხვად ფორმაში მოაქციონ. თუმცა, Traceway-ის დამფუძნებლის კვლევა ადასტურებს, რომ ეს ტექნოლოგია საკმარისი არ არის.
როდესაც კოდი მინიფიცირდება, ფუნქციების სახელები იცვლება, რაც ართულებს შეცდომის წყაროს პოვნას. აღმოჩნდა, რომ Source Maps მხოლოდ კოდის პოზიციურ მონაცემებს ინახავს და არა ფუნქციების სახელების სრულყოფილ რუკას.
როგორ მუშაობს Source Maps?
Source Map ფაილი არის JSON სტრუქტურა, რომელიც აერთიანებს ორიგინალ ფაილებს, მათ შინაარსს და „mappings“-ს. ეს უკანასკნელი წარმოადგენს Base64-VLQ კოდირებულ მონაცემებს, რომლებიც მიუთითებს, თუ სად მდებარეობს კონკრეტული ტოკენი ბუნდლში და რას შეესაბამება ის ორიგინალ კოდში.
პრობლემა იმაშია, რომ Source Maps არ ინახავს დიაპაზონებს (ranges), არამედ მხოლოდ წერტილებს (points). ეს ნიშნავს, რომ მას არ შეუძლია „გაიგოს“, თუ სად მთავრდება ერთი ფუნქცია და სად იწყება მეორე. შედეგად, ის მხოლოდ კონკრეტულ სიმბოლოებზე მიუთითებს.
| Char | Base64 value | Binary (6 bit) | Continuation? | Payload (low 5) |
|---|---|---|---|---|
| S | 18 | 010010 | no (bit 32 clear) | 10010 = 18 |
| A | 0 | 000000 | no | 0 |
| A | 0 | 000000 | no | 0 |
| S | 18 | 010010 | no | 18 |
| A | 0 | 000000 | no | 0 |
რატომ არის საჭირო ორიგინალი ბუნდლი?
სრულფასოვანი სიმბოლიკაციისთვის მხოლოდ რუკა არ კმარა. დეველოპერებს სჭირდებათ თავად მინიფიცირებული ბუნდლიც. რუკა ხშირად აბრუნებს არასწორ სახელებს, რადგან ის უბრალოდ „კითხულობს“ იმას, რაც ჩაწერილია კონკრეტულ პოზიციაზე, და არა იმას, თუ რა ფუნქციაში იმყოფება პროგრამა.
| Artifact | What it provides |
|---|---|
| Stack trace | the query: bundle positions and minified names |
| Source map | translation: position → original position, and token → original name |
| Bundle | structure: which function encloses a position, and where its name token sits |
| Trace | Names | Locations | What it proves |
|---|---|---|---|
| minified (production) | n, t, none, none | bundle line 1 | the starting point a tracker receives |
| non-minified bundle | correct | bundle positions | what minification destroyed |
| node --enable-source-maps | mostly correct, callee leak on global | original TS | every name came from the caller-site fallback; the global frame leaks |
| target | correct incl. | original TS | requires map + parsed bundle |
საბოლოო ჯამში, შეცდომების თვალთვალის სისტემები, როგორიცაა Sentry ან Traceway, იძულებულნი არიან დაამუშავონ როგორც რუკები, ისე თავად ბუნდლი, რათა მიაღწიონ სიზუსტეს. მხოლოდ ამ ორი კომპონენტის კომბინაციით ხდება შესაძლებელი კოდის სრული დეკოდირება.







დისკუსია
0 კომენტარი
ჯერ კომენტარი არ არის — იყავი პირველი.