Inhaltsverzeichnis
Razhroščevanje
Navodila za razhroščevanje WvdS FPC RAD Studio razširitev in aplikacij.
Razhroščevalno beleženje
Dvostopenjska aktivacija
Razhroščevalno beleženje zahteva dva pogoja:
- Čas prevajanja: Prevajanje z
-dDEBUG - Čas izvajanja: Zagon razširitve s parametrom
–debug
{$IFDEF DEBUG} procedure LogDebugTrace(const AMessage: string; const AArgs: array of const); begin if not DebugEnabled then Exit; WriteToDebugLog(Format('[%s] %s', [ FormatDateTime('hh:nn:ss.zzz', Now), Format(AMessage, AArgs) ])); end; {$ENDIF}
Dnevniška datoteka
- Format:
debug-yymmddhhnnss.log - Lokacija:
~/binaries/logs/ - Nikoli ne potrjujte v
~/sources/
MS format sledenja izjem
Za podrobno razhroščevanje s skladom klicev:
procedure LogDebugTrace(const AMessage: string; const AArgs: array of const); var CallStack: string; begin {$IFDEF DEBUG} if not DebugEnabled then Exit; (* Sklad klicev z get_caller_frame / get_frame *) CallStack := GetCallStackTrace; WriteToDebugLog(Format( '[%s] %s'#13#10 + ' at %s'#13#10 + ' Parameters: %s', [ FormatDateTime('yyyy-MM-dd hh:nn:ss.zzz', Now), Format(AMessage, AArgs), CallStack, FormatParams(AArgs) ] )); {$ENDIF} end;
Pomočnik za sklad klicev
function GetCallStackTrace: string; var Frame: Pointer; Addr: Pointer; Info: string; begin Result := ''; {$IFDEF DEBUG} Frame := get_frame; while Frame <> nil do begin Addr := get_caller_addr(Frame); Info := BackTraceStrFunc(Addr); (* Format Unit:Line *) if Info <> '' then Result := Result + ' at ' + Info + #13#10; Frame := get_caller_frame(Frame); end; {$ENDIF} end;
Primer dnevniške datoteke
================================================================================
DEBUG LOG: debug-260112143022.log
Started: 2026-01-12 14:30:22.001
================================================================================
[2026-01-12 14:30:22.001] Application started with --debug
at TWvdSApplication.Initialize(Application.Main.pas:42)
at program.main(extension_main.pas:398)
Parameters: (CommandLine='--debug')
[2026-01-12 14:30:22.015] Loading configuration
at TWvdSToolchainConfigService.LoadFromSettings(Toolchain.ConfigService.pas:156)
at TWvdSToolchainConfigService.AutoDetectAll(Toolchain.ConfigService.pas:89)
at DoActivate(extension_main.pas:368)
Parameters: (ConfigPath='~/.vscode/settings.json')
[2026-01-12 14:30:22.042] Service initialized
at TWvdSBuildService.Initialize(Build.Service.pas:45)
at DoActivate(extension_main.pas:370)
Parameters: (ServiceName='BuildService', Mode=debug)
================================================================================
ERROR TRACE (if any):
================================================================================
[2026-01-12 14:30:24.500] ERROR: File not found
at ValidateBuildPath(Build.Service.pas:144)
at GenerateCleanCommand(Build.Service.pas:174)
at OnBuildClean(extension_main.pas:112)
Parameters: (Path='~/invalid/path', ValidationResult=False)
Exception: EFileNotFound
Message: The specified path does not exist
Stack Trace:
Build.Service.ValidateBuildPath(144)
Build.Service.GenerateCleanCommand(179)
extension_main.OnBuildClean(112)
VSCode.Commands.ExecuteCommand(89)
Pomembno: Nikoli ne beležite občutljivih podatkov (žetonov, gesel) v Parameters!
Kaj beležiti?
| Dovoljeno | Prepovedano |
|---|---|
| Imena akcij | Žetoni, API ključi |
| Imena datotek/poti | Gesla |
| Sporočila napak | ID-ji sej |
| Konfiguracijski ključi | Občutljive vrednosti |
Razhroščevanje razširitev VS Code
Extension Development Host
- Odprite projekt razširitve v VS Code
- Pritisnite
F5aliRun > Start Debugging - Odpre se novo okno VS Code
- Razširitev se naloži tam
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Run Extension",
"type": "extensionHost",
"request": "launch",
"args": [
"--extensionDevelopmentPath=${workspaceFolder}"
],
"outFiles": [
"${workspaceFolder}/dist/**/*.js"
]
}
]
}
Prelomne točke
Ker je koda transpilirana (Pascal → JavaScript), prelomne točke delujejo samo z izvornimi kartami:
- Prevajajte z
-Jm(generiranje izvorne karte) - Nastavite prelomne točke v datoteki .pas
- VS Code preslika na JavaScript pozicijo
Izhodni kanal
Izhodni kanal WvdS prikazuje sporočila med izvajanjem:
View→Output- V spustnem meniju izberite „WvdS“
// V kodi LogInfo('Informacijsko sporočilo'); LogWarn('Opozorilno sporočilo'); LogError('Napaka: %s', [E.Message]);
Konzola za razvijalce
Za nizkonivojsko razhroščevanje:
Help→Toggle Developer Tools- Odprite zavihek Console
- Vidne so JavaScript napake in console.log
Pogoste težave
Razširitev se ne zažene
Diagnoza:
# Preverite dnevnike razširitve code --verbose --log trace
Pogosti vzroki:
- Sintaksna napaka v generiranem JavaScriptu
- Manjkajoče odvisnosti v package.json
- Napačna pot v „main“
Ukaz ne deluje
Diagnoza:
- Odprite konzolo za razvijalce
- Izvedite ukaz
- Preverite napake
Pogosti vzroki:
- Ukaz ni v contributes.commands
- Obravnavalnik ni registriran
- Izjema v obravnavalniku
WebView ne prikazuje ničesar
Diagnoza:
- Desni klik v WebView → „Inspect“
- Odprejo se brskalniška DevTools
Pogosti vzroki:
- Napačen HTML
- CSP blokira vire
- JavaScript napaka
Profiliranje
Merjenje zmogljivosti
{$IFDEF DEBUG} var StartTime: TDateTime; procedure StartTiming(const AOperation: string); begin StartTime := Now; LogDebug('Starting: %s', [AOperation]); end; procedure EndTiming(const AOperation: string); begin LogDebug('Completed: %s in %d ms', [ AOperation, MilliSecondsBetween(Now, StartTime) ]); end; {$ENDIF}
Uhajanje pomnilnika
pas2js/JavaScript ima zbiranje smeti, vendar bodite pozorni na:
- Krožne reference z zaprtji
- Neodstranjeni obravnavalci dogodkov
- Velika polja/objekti v pomnilniku
Razhroščevanje testov enot
// Test z razhroščevalnim izhodom procedure TMyTest.TestFeature; begin {$IFDEF DEBUG} LogDebug('Testing with input: %s', [TestInput]); {$ENDIF} Result := ProcessInput(TestInput); {$IFDEF DEBUG} LogDebug('Result: %s', [Result]); {$ENDIF} CheckEquals(Expected, Result); end;
Glejte tudi
Zuletzt geändert: dne 29.01.2026 ob 22:28