ΠΠ½ΠΈΠ³ΠΈ ΠΏΠΎ debug: π 25 Π»ΡΡΡΠΈΡ ΠΊΠ½ΠΈΠ³ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²
Π Π°Π±ΠΎΡΠ° Ρ Debug β Β«Π₯Π°ΠΊΠ΅ΡΒ»
ΠΡΠΈΠ²Π΅Ρ, ΡΠ½ΡΠΉ Ρ
Π°ΠΊΠ΅Ρ! Π’Ρ ΡΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π·Π½Π°Π΅ΡΡ, Π½ΠΎ ΠΊΡΡΡΠΎΠΉ Ρ
Π°ΠΊΠ΅Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠΎΠΌ. ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ Π΄Π΅Π±Π°Π³Π³Π΅ΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΠΠ‘. Π’Ρ ΡΠΊΠ°ΠΆΠ΅ΡΡ: Β«ΠΠ° ΠΊΠΎΠΉ ΡΠΈΠ³ ΠΌΠ½Π΅ ΡΡΠΎ Π½Π°Π΄ΠΎ ΠΌΠ½Π΅, ΠΊΡΡΡΠΎΠΌΡ ΠΏΠ΅ΡΡΡ?Β».Β
ΠΡΠ΅Π΄ΡΡΠ°Π²Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: ΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΠ± (ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΊΠ°ΡΠ΅, ΠΊ Π΄ΡΡΠ³Ρ Π΄ΠΎΠΌΠΎΠΉ), Π° ΡΠ°ΠΌ Π½Π° ΡΠ°ΡΠΊΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΄Ρ ΡΠ½ΡΡΡ, ΡΠΈΠ΄ΡΠΊΠΈ Π·Π°ΠΊΠ»Π΅Π΅Π½Ρ, Π° ΠΏΠ°ΠΊΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΠΆΠ΅ Ρ
ΠΎΡΠ΅ΡΡΡ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π° Π»ΡΠ±ΠΎΠΌ Β«Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌΒ» ΠΊΠΎΠΌΠΏΠ΅ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π‘, Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠ²β¦ Π½ΠΎ ΠΏΠΎΡΡΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Β«Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌΒ» ΠΊΠΎΠΌΠΏΠ΅ Π΅ΡΡΡ ΠΠΠ‘! ΠΠ°, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΠΠ‘, ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ — ΠΠΈΠ½Π΄Ρ Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π΅Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
DEBUG.
ΠΠ°ΠΊ? ΠΠ°Π±ΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΠΊΡΡ (Π΅ΡΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ°Π»ΠΎ, Π΄Π° ΠΈ ΡΠΈΠ» ΠΆΠ°Π»ΠΊΠΎ), Π½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ, ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Π΅ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈ ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ² ΠΌΠΎΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ, Π½ΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΈΠ·ΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΡ , Π½ΠΎ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄.
ΠΡΠ°ΠΊ, Π²Ρ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ DEBUG
ΠΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° βD (dump) <adress>.
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ, Π°Π΄ΡΠ΅Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π΄Π°Π½ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ <adress> Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½Ρ:ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΠΠΠ£ BIOS:
-d F000:E000
ΠΠ΄Π΅ΡΡ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΈΡΠΌΡ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π²Π°ΡΠ΅ΠΉ
BIOS. Π ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ:
-d F000:EC6C
ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅,
ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΊ Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΠΠΠ‘, ΡΠΈΠΏΡΠ΅Ρβ¦ Π ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ
(0000:046C) Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΠΠΠΠ‘. ΠΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ΅Π½ΡΡΡΡΡ.
ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΡΠ΅ΠΊΠ° (CS, DS ΠΈ SS, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ).
-d DS:0000
ΠΡΡΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ
, Ρ. Π΅.
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.
-d CS:100
Π ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄, Ρ.Π΅. ΠΌΠ°ΡΠΈΠ½Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄, Π³ΠΎΡΠΎΠ²ΡΡ
ΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠ²ΠΎΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ Π½Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ (Π΄Π»Ρ Π½Π°Ρ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°).
ΠΡΠ΅ ΠΎΠ΄Π½Π° Π²Π°ΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° -R (register) <register name>, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠΎΠΌ Π²ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
-r AX
AX 1203
: 0
—
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΌΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡ ΠΠ₯ ΠΈ ΠΎΡΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ (ΠΏΠΈΡΠ΅ΠΌ Π² Π½Π΅Π³ΠΎ 0).
Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ (ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ CS:100):
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000
SI=0000 DI=0000Β
DS=3B9A ES=3B9A SS=3B9A CS=3B9A IP=0100 NV UP EI PL NZ NA PO NCΒ
3B9A:0100 E82421 CALL 2227
Π’ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° βE (enter) Addres <command list>.
ΠΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° ΠΎΠ½Π° Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²
ΠΏΠ°ΠΌΡΡΠΈ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΡ
ΠΊΠΎΠ΄Π°Ρ
. ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΡΡ
ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΈΡΠ΅ΡΡΡ ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±Π°ΠΉΡ
(ΠΏΠΎ ΠΌΠ»Π°Π΄ΡΠ΅ΠΌΡ Π°Π΄ΡΠ΅ΡΡ), Π·Π°ΡΠ΅ΠΌ β ΡΡΠ°ΡΡΠΈΠΉ (ΠΏΠΎ ΡΡΠ°ΡΡΠ΅ΠΌΡ), Ρ. Π΅.Β
ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ DS:0000 ΡΠΈΡΠ»ΠΎ 1234h Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ:
-E DS:0000 34 12
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
-E cs:100 B8 34 12
-D CS:100
Π Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ U (unassemble) <starting address>, <ending adress> Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΡΠ΅ΠΌ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠΌ:
-U CS:100,102
3B9A:0100 B83412 MOV AX,1234
Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.
ΠΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ
Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ DEBUG. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°
-A (assemble) <adress>. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΆΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ Π½Π° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.:
-AΒ
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107
Π ΠΊΠ°ΠΊ ΠΆΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Π΄ΠΈΡΠΊΠ΅? Π‘Π½Π°ΡΠ°Π»Π° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°:
-N my_file.com
ΠΠ°ΡΠ΅ΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡ Π‘Π₯ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π±Π°ΠΉΡΠ°Ρ . ΠΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ ΡΠ°Π·Π½ΠΎΡΡΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΈ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ Π½Π° Π΄ΠΈΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ W ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡΠΎΠ². Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΡ ΠΎΠ΄ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ q. ΠΡΠΈΠΌΠ΅Ρ:
-AΒ
0B3B:0100 mov ax,1234
0B3B:0103 mov ah, 4c
0B3B:0105 int 21
0B3B:0107Β
-u CS:100, 106
0B3B:0100 B83412 MOV AX,1234Β
0B3B:0103 B44C MOV AH,4CΒ
0B3B:0105 CD21 INT 21Β
-r cx
CX 0000
:7
-r
AX=0000 BX=0000 CX=0007 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000Β
DS=0B3B ES=0B3B SS=0B3B CS=0B3B IP=0100 NV UP EI PL NZ NA PO NCΒ
0B3B:0100 B83412 MOV AX,1234Β
-N my.com
-W
ΠΠ°ΠΏΠΈΡΡ 00007 Π±Π°ΠΉΡ
-q
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΠ°ΠΊΠΎΡΡΠ΅ΠΉ, ΠΏΡΠΈΠΊΠΎΠ»ΠΎΠ², Π΄Π° ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ²-Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ β Π²Π΅Π΄Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π²ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, Π° DEBUG Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΠΏΠΎΡΡΠ°Π²ΠΊΡ Π²ΠΎ Π²ΡΠ΅ ΠΠΈΠ½Π΄Ρ Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Π₯Π . Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π²Π΅ΡΠ΅Π»Π΅Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π²ΡΠ΅ΠΌΡ Π·Π° ΡΡΠΆΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠΌ, Π²ΡΠ·ΡΠ²Π°Ρ ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΠ·ΡΠΈΠ½Π° (Π΄ΠΈΡΠΊΠΎΠ² ΠΈ Π΄ΠΈΡΠΊΠ΅Ρ-ΡΠΎ Π²Ρ Π½Π΅ ΠΏΡΠΈΠ½ΠΎΡΠΈΠ»ΠΈ!!!) Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΡ Π΅Π³ΠΎ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΡ. Π£ΡΠΏΠ΅Ρ ΠΎΠ², ΡΠ½ΡΠ΅ Π»ΡΠ±ΠΈΡΠ΅Π»ΠΈ Ρ Π°ΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΡΡΠΈΠΌΠ°!
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Debug
ΠΠ»Π°Π²Π½Π°Ρ /
ΠΡΡΠ΅ΠΌΠ±Π»Π΅Ρ /
ΠΠ»Ρ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ² /
ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ /
ΠΠ ΠΠΠΠ§ΠΠΠΠ
Π ΠΈΡΡΠ½ΠΊΠΈ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΈΡ
Π² ΠΊΠ½ΠΈΠ³Π΅.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ (ΡΠΌ. ΠΠΠΠΠΠΠΠ),
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Debug Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠ°Π² Windows. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Debug
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ. Π§ΡΠΎΠ±Ρ
Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· ΠΌΠ΅Π½Ρ ΠΠ£Π‘Π β ΠΠ«ΠΠΠΠΠΠ’Π¬ ΠΈΠ»ΠΈ
Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ WIN + R (Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ, ΡΠΌ.
ΠΊΠ½ΠΈΠ³Ρ ΠΠΎΠΌΠΏΡΡΡΠ΅Ρ Π΄Π»Ρ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ²).
Π ΠΎΡΠΊΡΡΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 1.5) Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ»ΠΎΠ²ΠΎ debug ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER ΠΈΠ»ΠΈ ΡΡΠ»ΠΊΠ½ΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΠ.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΡΠΊΡΠΎΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ Ρ ΠΏΡΡΡΡΠΌ ΡΠΊΡΠ°Π½ΠΎΠΌ ΠΈ ΡΡΡΡΠΎΡΠΊΠΎΠΉ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ,
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ³Π»Π°ΡΠ°Π΅Ρ Π²Π°Ρ Π²Π²Π΅ΡΡΠΈ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²ΡΠΉΡΠΈ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Debug,
Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΠΉΡΠ΅ Π±ΡΠΊΠ²Ρ q ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ ENTER.
ΠΠ°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Debug, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, Π½ΠΎ ΠΌΡ ΠΏΠΎΠΊΠ°
ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ
ΠΎΠΆ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ
Emu8086.
Π§ΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ Π½Π°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Debug, ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅
(ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ Debug Π²Ρ ΡΠΆΠ΅ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ, ΠΈ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ΅ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½ Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ ΠΌΠΈΠ³Π°ΡΡΠ΅ΠΉ
ΡΠ΅ΡΡΠΎΡΠΊΠΎΠΉ Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ).
ΠΠ²Π΅Π΄Π΅ΠΌ Π±ΡΠΊΠ²Ρ Β«Π°Β» (Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π· — Π²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Π²ΠΎΠ΄ΡΡΡΡ Π½Π°
Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅) ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ENTER.
ΠΠ°ΡΠ΅ΠΌ Π²Π²Π΅Π΄Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΆΠΈΠΌΠ°Ρ ENTER Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
0B72: 0100 MOV AH, 02 0B72: 0102 MOV DL, 41 0B72: 0104 INT 21 0B72: 0106 INT 20 0B72: 0108
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 1.6.
ΠΠ ΠΠΠΠ§ΠΠΠΠ 1
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΡΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΡΡΡΡ Π±Π΅Π· Π±ΡΠΊΠΎΠ²ΠΊΠΈ h Π² ΠΊΠΎΠ½ΡΠ΅. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ,
ΡΡΠΎ Debug ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΈ Π΅ΠΌΡ Π½Π΅ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΡΡ,
Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²Π²ΠΎΠ΄ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ ΠΠΠΠ§ΠΠΠΠ 2
ΠΠΎΡΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ -Π°, ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ: 0B72: 0100. Π Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅
ΡΠΈΠΌΠ²ΠΎΠ»Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ, Π½ΠΎ Π½Π°Ρ ΠΎΠ½ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ. Π ΠΊΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ
ΡΠΈΡΠ»ΠΎ 0100? ΠΠΎΠΌΠ½ΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ORG 100h (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π»
Emu8086)?
ΠΠΎΡ-Π²ΠΎΡ β ΡΡΠΎ Π°Π΄ΡΠ΅Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π’ΠΎ Π΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ Ρ
ΡΡΠΈΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ Π·Π°Π½ΠΎΡΠΈΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π‘ΠΠ). ΠΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ
2 Π±Π°ΠΉΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π°Π΄ΡΠ΅Ρ Π±ΡΠ΄Π΅Ρ 0102 ΠΈ Ρ.Π΄.
Π‘Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΡ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π»
Emu8086),
ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΡ
Π·Π΄Π΅ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° β Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ. ΠΠ°ΠΆΠΌΡΠΌ ENTER Π΅ΡΡ ΡΠ°Π·, ΡΡΠΎΠ±Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅
ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΡΡΠΎΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Debug. ΠΠ°ΡΠ΅ΠΌ
Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ g (ΠΎΡ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ Β«GOΒ») ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER. ΠΠ° ΡΠΊΡΠ°Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
-g A ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ -
ΠΠ΄Π΅ΡΡ A β ΡΠ° ΡΠ°ΠΌΠ°Ρ Π±ΡΠΊΠ²Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°ΡΠ΅ΠΌ ΠΈΠ΄ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
ΠΎΡ Π²Π΅ΡΡΠΈΠΈ Debug).
Π ΡΠ΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΠΎ Π΅ΡΡΡ
ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΡΡ, ΠΊΠ°ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ΄Π½Π° Π·Π° Π΄ΡΡΠ³ΠΎΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ
Π½Π°Π±ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π²Π²Π΅ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π°), Π·Π°ΡΠ΅ΠΌ:
ΠΠ²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ t ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER. Π£Π²ΠΈΠ΄ΠΈΠΌ Π½Π΅ΡΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
AX=0200 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0102 NV UP EI PL NZ NA PO NC 0B72:0102 B241 MOV DL,41
ΠΡΠΎ Π΅ΡΡΡ Π½ΠΈ ΡΡΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ
ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, Π² ΡΠ΅Π³ΠΈΡΡΡ ΠΠ Π·Π°ΠΏΠΈΡΠ°Π»ΠΎΡΡ ΡΠΈΡΠ»ΠΎ 02. Π Π½ΠΈΠΆΠ½Π΅ΠΉ
ΡΡΡΠΎΠΊΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈ ΡΠ°ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ.
Π‘Π½ΠΎΠ²Π° Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ t ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER. Π£Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
AX=0200 BX=0000 CX=0000 DX=0041 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0B72 IP=0104 NV UP EI PL NZ NA PO NC 0B72:0104 CD21 INT 21
ΠΠΎΠΌΠ°Π½Π΄Π° MOV DL, 41, ΠΊΠ°ΠΊ Π΅ΠΉ ΠΈ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, Π·Π°ΠΏΠΈΡΠ°Π»Π° Π² ΡΠ΅Π³ΠΈΡΡΡ DL ΡΠΈΡΠ»ΠΎ 41.
Π‘Π½ΠΎΠ²Π° Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ t ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER. Π£Π²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
AX=0200 BX=0000 CX=0000 DX=0041 SP=FFE8 BP=0000 SI=0000 DI=0000 DS=0B72 ES=0B72 SS=0B72 CS=0347 IP=0225 NV UP EI PL NZ NA PO NC 0347:0225 80FC4B CMP AH,4B
ΠΠΎΠΌΠ°Π½Π΄Ρ CMP AH,4B Π½Π΅Ρ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠΈΠ»Π° ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ»Π³ΠΎ Π΅ΡΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ t β Π½Π°ΠΌ Π±ΡΠ΄ΡΡ Π²ΡΠ΄Π°Π²Π°ΡΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ, Π½Π°ΠΌ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΡΡΡΠ΅ Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ g ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ENTER,
ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π°. ΠΠΎ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ
ΡΠ°ΠΉΠ» Π‘ΠΠ? ΠΠ΅Π΄Ρ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Debug. Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ
ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ²:
- ΠΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΡΠ°ΠΉΠ»? ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π°Π΄ΡΠ΅ΡΠ° 0100h,
Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΠΊΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ 0108h. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°
Π±ΡΠ΄Π΅Ρ 8 Π±Π°ΠΉΡ (108h β 100h = 8). - ΠΠ°ΠΊ ΠΌΡ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π½Π°Ρ ΡΠ°ΠΉΠ»? Π Ρ
ΠΎΡΡ ΠΊΠ°ΠΊ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΉΠ»Π°ΠΌ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅
ΠΈΠΌΠ΅Π½Π°, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 8 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² (DOSΡ ΡΠ°ΠΊ ΠΏΡΠΈΡΡΠ½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ). ΠΠ°Π·ΠΎΠ²Π΅ΠΌ,
Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, debug_1.com
Π ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
- Π‘Π½ΠΎΠ²Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΡΠ΅Π½ΠΈΡΡΠΉΡΠ΅ΡΡ, ΡΡΠ΅Π½ΠΈΡΡΠΉΡΠ΅ΡΡ…).
- ΠΠ°ΠΏΠΈΡΠ΅ΠΌ Π² ΡΠ΅Π³ΠΈΡΡΡ Π‘Π₯ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ r cx ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ENTER. ΠΠ°ΡΠ΅ΠΌ Π²Π²Π΅Π΄Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° (8 Π±Π°ΠΉΡ) ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ENTER.
- ΠΠ²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ n, Π·Π°ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ±Π΅Π» ΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΠ°ΠΆΠΌΠ΅ΠΌ ENTER.
- Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π²Π²Π΅Π΄Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ w ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ENTER.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ΅Ρ ΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΡ. 1.7):
-r cx Π‘Π₯ 0000 :8 -n debug_1.com -w ΠΠ°ΠΏΠΈΡΡ: 00008 Π±Π°ΠΉΡ -
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠΌΡΠ»ΡΡΠΈΠΈ DOS ΠΈΠ· ΠΏΠΎΠ΄ WINDOWS, ΡΠΎ ΡΠ°ΠΉΠ» debug_1.com
ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ», Π»ΠΈΠ±ΠΎ Π² ΠΏΠ°ΠΏΠΊΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ
Π²Π΅ΡΡΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ WINDOWS. Π’Π΅ΠΏΠ΅ΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠ»ΠΈ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΠΏΠ°ΠΏΠΊΠ°Ρ
Π²Ρ Π½Π΅ Π½Π°ΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ°ΠΉΠ», ΡΠΎ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΡ Π° Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΌ. ΠΊΠ½ΠΈΠ³Ρ ΠΠΎΠΌΠΏΡΡΡΠ΅Ρ Π΄Π»Ρ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ².
Π§ΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΡΡΡΠ°Π»ΠΈ. ΠΡΡ
ΠΎΠ΄ ΠΈΠ· Debug ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ q.
ΠΠ°Π±ΡΠ°Π²ΡΠΈΡΡ ΡΠΈΠ» ΠΈ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΡ, ΠΈΠ·ΡΡΠΈΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΎΠΏΡΠΈΡ Debug β Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Π‘ΠΠ-ΡΠ°ΠΉΠ» (ΡΠΎ Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅
Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π² ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°).
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π΅ Π²Π°ΠΌΠΈ β Π΅Π΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅,
Π° ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠ΅ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ.
ΠΡΠ°ΠΊ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Debug Ρ Π½Π°Ρ Π·Π°ΠΊΡΡΡΠ°. ΠΠ°Π±ΠΈΡΠ°Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅:
debug debug_1.com
(Π³Π΄Π΅ debug_1.com β ΡΡΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ) ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ENTER.
ΠΠ ΠΠΠΠ§ΠΠΠΠ
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΠ»Π°ΡΡ, Π·Π½Π°ΡΠΈΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ Π½Π΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
C:\WINDOWS\COMMAND\debug debug_1.com
ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΡΠΈΠ»Π°ΡΡ, Π½ΠΎ Π²ΡΠ΄Π°Π»Π° ΠΎΡΠΈΠ±ΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΠΡΠΈΠ±ΠΊΠ° 1282 ΠΈΠ»ΠΈ Β«Π€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Β»),
ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
C:\WINDOWS\COMMAND\debug C:\MYPROG\debug_1.com
ΠΡΠ»ΠΈ ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, ΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π²ΡΡ-ΡΠ°ΠΊΠΈ Π³Π΄Π΅-ΡΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΡ Π² ΠΏΡΡΠΈ ΠΈΠ»ΠΈ
ΠΏΡΡΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ DOS. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π»ΡΡΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²
ΠΊΠΎΡΠ΅Π½Ρ Π΄ΠΈΡΠΊΠ° Π‘, ΠΎΡΠΊΡΠ΄Π° ΠΎΠ½Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΠΏΠΎ ΠΏΡΡΠΈ Β«C:\debug_1.comΒ».
ΠΡΠ»ΠΈ Debug Π·Π°ΠΏΡΡΡΠΈΠ»Π°ΡΡ Π±Π΅Π· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, ΡΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ u ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ENTER.
ΠΠΎΡ ΡΡΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ (ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ, ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΡ 1.8):
-u 0BC6:0100 B402 MOV AH, 02 0BC6:0102 B241 MOV DL, 41 0BC6:0104 CD21 INT 21 0BC6:0106 CD20 INT 20 0BC6:0108 56 PUSH SI 0BC6:0109 2E CS: 0BC6:010A 8A04 MOV AL, [SI] 0BC6:010C 0AC0 OR AL, AL 0BC6:010E 741A JZ 012A 0BC6:0110 3C3A CMP AL, 3A 0BC6:0112 750D JNZ 0121 0BC6:0114 2E CS: 0BC6:0115 807C0100 CMP BYTE PTR [SI+01], 00 0BC6:0119 7506 JNZ 0121 0BC6:011B 2E CS: 0BC6:011C C60400 MOV BYTE PTR [SI], 00 0BC6:011F EB09 JMP 012A -
ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ΅ΡΡΡΠ΅ ΡΡΡΠΎΠΊΠΈ. Π£Π·Π½Π°Π΅ΡΠ΅? ΠΡΠΎ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ
Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ (ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ
, ΠΎΡΡΠ°Π±ΠΎΡΠ°Π²ΡΠΈΡ
Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Debug). ΠΡ Π° Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, Π³Π΄Π΅
ΠΊΠΎΠ½ΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Β«ΠΌΡΡΠΎΡΒ»? ΠΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²ΠΎΡΠ½ΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ
ΡΠ°ΠΉΠ»Π° (Π΄Π»Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ). Π Π°Π·ΠΌΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΡΠ°ΠΉΠ»Π°.
Π’ΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΡΠ°ΠΉΠ»Π° ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½ Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π°
Debug Π½Π°ΠΌ Π²ΡΠ΄Π°Π΅Ρ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ
Π² ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΠΎΠ΅.
ΠΡΡΡ Π΅ΡΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ (ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΆΠ΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌ) β Π½Π°ΠΉΡΠΈ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΡΡΠΎΠΊΡ,
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΡ
ΠΎΠ΄Π° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (INT 20).
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΠΎΠ»ΡΡΠ°Ρ, ΡΠΎ ΡΠΏΠΈΡΠΎΠΊ Π΅Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡ Π½Π° ΡΠΊΡΠ°Π½. Π’ΠΎΠ³Π΄Π° ΡΠ½ΠΎΠ²Π° Π²Π²ΠΎΠ΄ΠΈΠΌ
ΠΊΠΎΠΌΠ°Π½Π΄Ρ u ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ENTER. Π ΡΠ°ΠΊ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΠΈΠ±ΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ,
ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ Π½Π΅ Π·Π°Π³ΡΡΠ·ΠΈΠ»Π°ΡΡ, Π»ΠΈΠ±ΠΎ ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ².
ΠΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ: ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½Ρ Π² Π»Π΅Π²ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅.
ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π°Π΄ΡΠ΅ΡΠ° 0100. ΠΡΠ»ΠΈ Π°Π΄ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ, ΡΠΎ ΡΡΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ,
Π½Π΅ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
Debug — ΡΡΠΎ… Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Debug?
DebugΒ β ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΏΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ MS-DOS. ΠΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΡΠΌΡΠ»ΡΡΠΎΡ MS-DOS ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ°ΠΉΠ»ΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ MS-DOS ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ°Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² assembler. ΠΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΌΠΎΡΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ².
ΠΠΎΠΌΠ°Π½Π΄Ρ
ΠΠ°ΠΏΡΡΠΊ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ:
DEBUG DEBUG [[Π΄ΠΈΡΠΊ:][ΠΏΡΡΡ]ΠΈΠΌΡ_ΡΠ°ΠΉΠ»Π° [ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ]] DEBUG C:\ΠΌΠΎΠΉΠΏΡΡΡ\My.com
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-N | -N ΠΡΡΡ_ΠΠΌΡ_Π€Π°ΠΉΠ»Π°. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°ΠΉΠ»Ρ. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Name. | -N My.com [ΠΠ°ΠΆΠ°ΡΡ Enter] |
-L | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π°. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Load. | -N My.com [ΠΠ°ΠΆΠ°ΡΡ Enter] -L [ΠΠ°ΠΆΠ°ΡΡ Enter] |
-W | -W ΠΡΡΡ_ΠΠΌΡ_Π€Π°ΠΉΠ»Π°. Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΉΠ». Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Write. | -N My.com [ΠΠ°ΠΆΠ°ΡΡ Enter] -W [ΠΠ°ΠΆΠ°ΡΡ Enter] Writing Π§ΠΈΡΠ»ΠΎ_ΠΠ°ΠΉΡ bytes |
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-R | ΠΡΠ΄Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ². | -R [ΠΠ°ΠΆΠ°ΡΡ Enter]AX=D3E0 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 |
-R [ΡΠ΅Π³ΠΈΡΡΡ] | ΠΡΠΎΡΠΌΠΎΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡ. | -R AX [ΠΠ°ΠΆΠ°ΡΡ Enter]AX 0000
|
ΠΠ°ΠΌΠΏ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-D | ΠΡΠ΄Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Dump. | -D [ΠΠ°ΠΆΠ°ΡΡ Enter] |
-D [ΠΠ°ΡΠ°Π»ΠΎ_Π‘Π΅Π³ΠΌΠ΅Π½ΡΠ°] L [ΠΠΎΠ½Π΅Ρ_Π‘Π΅Π³ΠΌΠ΅Π½ΡΠ°] | ΠΡΠ΄Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°. Π§ΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π²ΡΡ ΠΏΠ°ΠΌΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ -D 0 L 0 [ΠΠ°ΠΆΠ°ΡΡ Enter] | -D 0000 L 0005 [ΠΠ°ΠΆΠ°ΡΡ Enter]1814:0000 CD 20 FF 9F 00 |
ΠΠΈΠ·Π°ΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-U | ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Unassemble. | -U [ΠΠ°ΠΆΠ°ΡΡ Enter]1814:0100 ADD [BX+SI],AL |
ΠΡΡΠ΅ΠΌΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-A | ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Assemble. | -A [ΠΠ°ΠΆΠ°ΡΡ Enter] 1814:0100 MOV AX,0009 1814:0103 [ΠΠ²ΠΎΠ΄ΠΈΠΌ_ΠΠ°Π»ΡΡΠ΅] [ΠΠ°ΠΆΠ°ΡΡ Enter] |
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-G | ΠΠ°ΠΏΡΡΠΊ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Go. | -G [ΠΠ°ΠΆΠ°ΡΡ Enter]Program terminated normally |
-G =[ΠΠ΄ΡΠ΅Ρ_ΠΠ°ΡΠ°Π»Π°_Π Π°Π±ΠΎΡΡ] | ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ. | -G =100 |
-G [ΠΠ΄ΡΠ΅Ρ_ΠΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½ΡΠ°] [ΠΠ΄ΡΠ΅Ρ_ΠΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½ΡΠ°] β¦ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄ΡΡ Π΄ΠΎ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½ΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΎΠ½Π° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈ Π²ΡΠ²Π΅Π΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°ΡΡ -G. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½ΡΠΎΠ² 10. | -G 176 47d 537 647 [ΠΠ°ΠΆΠ°ΡΡ Enter] |
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΠΎΠΌΠ°Π½Π΄Π° | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅Ρ |
---|---|---|
-T | ΠΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΡΡ
ΠΎΠ΄ΡΡΠ²ΠΎ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (-G) Go, Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΌ ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. Π‘ΠΎΠΊΡΠ°ΡΡΠ½Π½ΠΎ ΠΎΡ ΡΠ»ΠΎΠ²Π° Trace. | -T [ΠΠ°ΠΆΠ°ΡΡ Enter] |
-T =[ΠΠ΄ΡΠ΅Ρ_ΠΠ°ΡΠ°Π»Π°_Π Π°Π±ΠΎΡΡ] [ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ_ΠΡΡΡΡΠΊΡΠΈΠΉ] | ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. | -T =100 5[ΠΠ°ΠΆΠ°ΡΡ Enter] |
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
Β Β ΠΠ±ΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ MS-DOS ΠΈ Windows | |
---|---|
AppendΒ β’ AttribΒ β’ BreakΒ β’ CallΒ β’ CdΒ β’ ChcpΒ β’ ChdirΒ β’ ChkdskΒ β’ ClsΒ β’ CommandΒ β’ CopyΒ β’ DateΒ β’ DebugΒ β’ DefragΒ β’ DelΒ β’ DirΒ β’ DiskcompΒ β’ DiskcopyΒ β’ DoskeyΒ β’ EchoΒ β’ EditΒ β’ EdlinΒ β’ EraseΒ β’ ExitΒ β’ ExpandΒ β’ FastopenΒ β’ FcΒ β’ FindΒ β’ ForΒ β’ FormatΒ β’ GotoΒ β’ GraphicsΒ β’ HelpΒ β’ IfΒ β’ LabelΒ β’ LoadfixΒ β’ MdΒ β’ MemΒ β’ MkdirΒ β’ ModeΒ β’ MoreΒ β’ MoveΒ β’ NlsfuncΒ β’ PathΒ β’ PauseΒ β’ PrintΒ β’ PromptΒ β’ RdΒ β’ RemΒ β’ RenΒ β’ RenameΒ β’ ReplaceΒ β’ RmdirΒ β’ SetΒ β’ SetverΒ β’ ShareΒ β’ ShiftΒ β’ SortΒ β’ SubstΒ β’ TimeΒ β’ TreeΒ β’ TypeΒ β’ VerΒ β’ VerifyΒ β’ VolΒ β’ Xcopy | |
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ |
Debugging tools for Windows / Π₯Π°Π±Ρ
Π Π°Π½ΡΡΠ΅ Ρ Π½Π΅ Π·Π½Π°Π», ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π±ΠΆ ΠΈ Π½Π΅ ΡΠΌΠ΅Π» Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·Π½Π°Π» ΠΈ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ½. Π Π°ΡΡΠΊΠ°ΠΆΡ ΠΏΡΠΎ ΡΠ²ΠΎΠΉ ΠΎΠΏΡΡ ΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π½ΠΈΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΡ-ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.
ΠΡΠΈ ΡΡΠ»Π·Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠΎΡΠ½ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ (WinDbg, Cdb) ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π΄Π΅Π»Π°ΡΡ Π²ΡΡΠΊΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ, ΡΠΈΠΏΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ symservers (symstore.exe), ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°ΠΌΠΏΠ° Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° (cdb, windbg), ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠ΅ΠΌΠΎΡΠΈ Π»ΠΈΠΊΠΎΠ² (umdh.exe) ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ (gflags β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Β«ΡΠΊΡΡΡΡΠ΅Β» ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ exe ΡΠ°ΠΉΠ»Π°, ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΡΠ΅Π»ΠΎΠΌ). Π’Π°ΠΊΠΆΠ΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΡΠ»Π·ΠΎΠ², ΡΠΈΠΏΠ° ΠΏΡΠΎΡΠΌΠΎΡΡΡΠΈΠΊΠ° debug output.
ΠΠ·ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ:Β ΠΠ°ΠΉΠΊΡΠΎΡΠ°ΠΉΡ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ΅ΠΌΠΎΡΠΈ Π»ΠΈΠΊΠΈ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ umdh.exe, tlist.exe ΠΈ gflags.exe. ΠΡΠ΅ ΠΈΡ
Π½Π°Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Ρ Π°Π΄ΠΌΠΈΠ½ΡΠΊΠΈΠΌΠΈ ΠΏΡΠ°Π²Π°ΠΌΠΈ.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ gflags.exe, Π²ΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π³Π°Π»ΠΎΡΠΊΡ Create user mode stack database. ΠΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ β ΡΠ΅ΠΏΠ΅ΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΡΡΠΎΡ database. ΠΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ.
ΠΠ°Π»Π΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΆΠ΄Π΅ΠΌ, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ PID ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ tlist.exe (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠ³ΠΎΠ΄Π½ΠΎ Π΅ΡΠ΅). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, PID == 111.
ΠΠ°Π»Π΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ umdh.exe -p:111 -f:c:\temp\log1.log
ΠΡΠ° ΡΡΡΠΎΠΊΠ° ΡΠΎΡ
ΡΠ°Π½ΠΈΡ Π² ΡΠ°ΠΉΠ» log1.log ΠΈΠ½ΡΡ ΠΎ Π²ΡΠ΅Ρ
ΡΠ΅ΠΊΡΡΠΈΡ
Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡΡ
ΠΏΠ°ΠΌΡΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ 111.
ΠΠ°Π»Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΆΠ΄Π΅ΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ½ΠΎΠ²Π° ΠΏΠΈΡΠ΅ΠΌ:
umdh.exe -p:111 -f:c:\temp\log2.log
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠΎΡΠΎΠΉ Π»ΠΎΠ³ Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΠΈΠΊΠΈ:
umdh.exe -d -v -l c:\temp\log1.log c:\temp\log2.log 1> c:\temp\log_result.log
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π² log_result.log Π±ΡΠ΄ΡΡ Π²ΡΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΈ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Π½ΡΠ΅ ΠΊΡΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΊΠ°Π»ΡΡΡΠΊΠ°ΠΌΠΈ!
Π§ΡΠΎΠ±Ρ ΠΊΠ°Π»ΡΡΡΠΊΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅, Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ enviroment variable _NT_SYMBOL_PATH. Π Ρ
Π΅Π»ΠΏΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄Π»Ρ ΠΌΠ°ΠΉΠΊΡΠΎΡΠΎΡΡΠΎΠ²ΡΠΊΠΈΡ
exe ΠΈ dll.
Π‘Π²ΠΎΠΈ pdb Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ Π½Π° symbol server, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π±ΠΈΠ»Π΄ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ symstore.exe β ΡΠΎΠ³Π΄Π° Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ pdb.
ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ pdb ΡΡΠ΄ΠΎΠΌ Ρ Π΅Ρ
Π΅ β Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄ΡΠ΅ΠΏΠΈΡΡΡΡ. ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΡΠ΅ΠΏΠΈΡΡΡ, ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΡΡ ΠΊ pdb Π² _NT_SYMBOL_PATH.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π΄Π°ΠΌΠΏ ΡΠ°ΠΉΠ» ΠΈ Π½Π°Π΄ΠΎ Π΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠΎ ΠΎΠΏΡΡΡ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ WinDbg. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ _NT_SYMBOL_PATH ΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ VisualStudio, ΠΎΠ½ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΎΠ² Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠΎΡΡΠΎ Π΄Π°ΠΌΠΏ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ pdb! ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡ WinDbg.exe, File\open crash dump…, ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡ Π΄Π°ΠΌΠΏ, ΠΏΠΈΡΠ΅ΡΡ !analyze -v, ΠΏΠΎΡΠΎΠΌ !uniqstack ΠΈ ΡΠΆΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π² ΠΏΡΠΎΡΡΡΡ ΡΠ»ΡΡΠ°ΡΡ . ΠΠΈΠ΄ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ pdb Π½Π°ΡΠ»ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡ Π°Π½Π°Π»ΠΈΠ· Π΄Π°ΠΌΠΏΠ°. ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΡΡΡΡ ΠΎΠΊΠΎΡΠΊΠΈ Ρ callstack, Processes and threads ΠΈ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡΡΡ. ΠΡΠ»ΠΈ Π½Π°Π΄ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠΎΠ΄ β File\Source File Pathβ¦ β ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΡΡ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ (Π»ΡΡΡΠ΅ ΡΡΠ°Π·Ρ ΡΡΠΈ ΠΏΡΡΠΈ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π² enviroment variable _NT_SOURCE_PATH, ΡΡΠΎΠ±Ρ Π½Π΅ Π²Π±ΠΈΠ²Π°ΡΡ ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·). ΠΠΎΡΠΎΡΠ΅, ΠΎΠΏΡΡΡ Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ pdb π
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡΠΌΠΈ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π°ΠΌΠΏΠ° Π·Π°Π²ΠΈΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ WinDbg ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΠΈ ΠΈΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠΈΡΡ Π² Π²ΠΈΡΡΠ΅ Π² ΡΠ°ΡΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ΅ β ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π°ΠΌΠΏ:)
ΠΡΠΈΡΠ΅ΠΌ DebuggingTools ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ β Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π΅ Π½Π°Π΄ΠΎ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ» β ΡΠ½ΡΠ» Π΄Π°ΠΌΠΏ. ΠΠ»Ρ ΡΠ½ΡΡΠΈΡ Π΄Π°ΠΌΠΏΠ° ΡΠ·Π΅ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
pdb.
ΠΠΎΡΠΎΠΌ ΡΡΠΎΡ Π΄Π°ΠΌΠΏ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡ (Π² Windbg Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π΅Π΄Π»ΠΎΠΊΠΎΠ² ΠΈ Ρ.ΠΏ. β ΠΊΠΎΠΌΠ°Π½Π΄Π° !locks ΠΈ Π΄ΡΡΠ³ΠΈΠ΅).
ΠΡΠ²ΠΎΠ΄:
Π§ΡΠΎΠ±Ρ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΎΠΉ, Π½Π°Π΄ΠΎ ΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ pdb ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΠΠΠΠΠΠ Π±ΠΈΠ»Π΄Π° Π½Ρ ΠΈΠ»ΠΈ Ρ
ΠΎΡΡ Π±Ρ Π΄Π»Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ
Π±ΠΈΠ»Π΄ΠΎΠ². Π ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΡΡΠΈΡΡ Debugging tools ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΡΠ΅ΡΠ°ΠΌ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ β ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΡ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π°ΠΌΠΏ, ΠΊΡΠ΄Π° Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΡΠ΅ΡΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ WinDBG ΠΈ ΠΊΠΎΠΏΠΈΠΏΠ°ΡΡΠΈΡΡ Π² ΠΎΡΡΠ΅Ρ ΠΎ Π±Π°Π³Π΅ ΠΎΡΡΡΠ΄Π° Π½ΡΠΆΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° ΠΊΠ°Π»ΡΡΡΠΊΠ° Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ β ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅.
Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΡ
ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΏΡΠΎ WinDBG:
WinDbg. From A to Z!
Common WinDbg Commands (Thematically Grouped)
ΠΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ° Python, ΠΎΡΠ»Π°Π΄ΠΊΠ° / ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Mail.ru Group / Π₯Π°Π±Ρ
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±Π·ΠΎΡΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΡΡ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠΎΠ².
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠ΅ΠΆΠ΄Π΅, ΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΎΠ± ΠΎΡΠ»Π°Π΄ΠΊΠ΅, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡΡ, ΡΡΠΎ ΠΆΠ΅ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅. ΠΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΈ, ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ: Β«ΠΡΠ»Π°Π΄ΠΊΠ° β ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅, Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊΒ». ΠΠΎΠΎΠ±ΡΠ΅, Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ (Π½ΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ) Π΄Π²Π΅ Π²Π΅ΡΠΈ: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΡΡΠ΅ΠΊΡΡΠ΅ΠΉΡ: ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ. ΠΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π·Π½Π°ΡΡ ΠΎΠ± ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°: Π½Π°Π»ΠΈΡΠΈΠ΅ (ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅) ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ²) ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, Π½ΠΎ ΡΡΠΎ ΡΠ»Π΅Π³ΠΊΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ.
ΠΠ»Π°ΡΡΠΈΠΊΠ° ΠΆΠ°Π½ΡΠ°
Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΡΠ΅Ρ Β«ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΡΡΡΒ» Π²Π½ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΠ·ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ (Π² Π½ΡΠΆΠ½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ) ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠΉ)? ΠΠ½ ΠΏΡΠΈΠ±Π΅Π³Π°Π΅Ρ ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΠΎΠΌΡ, ΡΠ°ΠΌΠΎΠΌΡ ΠΏΡΠΎΡΡΠΎΠΌΡ ΠΈ ΡΠ°ΠΌΠΎΠΌΡ Β«Π΄Π΅ΠΉΡΡΠ²Π΅Π½Π½ΠΎΠΌΡΒ» ΡΠΏΠΎΡΠΎΠ±Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ: ΡΠ°ΡΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ Β«ΠΏΡΠΈΠ½ΡΡΒ» (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ print Π² Python 2.x ΠΈ ΡΡΠ½ΠΊΡΠΈΡ print() Π² Python 3.x). ΠΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ Π³ΡΠ΅ΡΠ°Ρ ΡΡΠΈΠΌ: ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠ΅Π½ΡΠΊΠΎ Π»Π΅Π½ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ, Π½Π°Π΄Π΅ΡΡΡ Π±ΡΡΡΡΠ΅Π½ΡΠΊΠΎ, Π·Π° ΠΏΠ°ΡΡ ΠΌΠΈΠ½ΡΡ, Π½Π°ΠΉΡΠΈ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ Π²ΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ, ΠΈ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Ρ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ°ΡΡΡΠ³ΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΠ°ΡΡ ΠΈ Π΄Π°ΠΆΠ΅ Π΄Π½ΠΈ. ΠΡΡΠ°ΡΠΈ, ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π°Π·ΡΠ²Π°ΡΡ Β«ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ».
Π‘ΡΠ΄Π° ΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π·Π°ΠΏΠΈΡΡ Π²ΡΠ΅ΠΉ Π½ΡΠΆΠ½ΠΎΠΉ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Π»ΠΎΠ³-ΡΠ°ΠΉΠ». ΠΠ½ΠΎΠ³Π΄Π° Π΄ΡΡΠ³ΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π½Π΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠΊΡΠΈΠΏΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ»Π³ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ΡΠ΅Π· Π΄Π²Π΅-ΡΡΠΈ Π½Π΅Π΄Π΅Π»ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ°).
ΠΠΎ ΠΌΡ ΠΆΠ΅ ΠΏΠΈΡΠ΅ΠΌ Π½Π° Python, ΡΠ°ΠΊ ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ Π½Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Sentry, ΡΡΠΎΠ±Ρ ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: ΡΡΠ΅ΠΊΡΡΠ΅ΠΉΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π΅ΡΠ΅ Π½ΡΠΆΠ½ΡΠΌ.
The Python Debugger
Python ΠΈΠΌΠ΅Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ: ΠΌΠΎΠ΄ΡΠ»Ρ pdb. Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π½Π° ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΡΡΠ°ΡΡΡ, Ρ.ΠΊ. pdb β ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΈ Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅, ΠΏΠΎ ΡΡΡΠΈ, Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Β«ΡΠΊΡΠ°ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π°Β» ΠΊ Π½Π΅ΠΌΡ. ΠΠΎ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ =)
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, pdb ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π²Π·ΡΠ» ΠΎΡ gdb (GNU Project debugger) β ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Π‘ΠΈ (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ) ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π ΡΠ»ΠΎΠ²Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ gdb, ΠΏΡΠΎΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΠΈ Π΄ΠΎΠ»ΡΡΠ΅, Ρ ΠΎΡΡ ΡΠ΅ΠΌ, ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠ³Π»ΡΠ±ΠΈΡΡΡΡ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠ·ΡΠΊΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΏΠΈΡΠ΅Ρ ΡΠΈΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΠΏΠΈΡΠΎΠ½Π° Π±Π΅Π· gdb Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, gdb ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ (ΡΠ΅ΡΠ΅Π· Π΅Ρ pid) ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΎΠΉ Β«ΠΏΡΡΠΌΠΎ Π½Π° ΠΌΠ΅ΡΡΠ΅Β».
Π― ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ pdb, Π²ΠΎΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ ΠΠ°Π³Π° Π₯Π΅Π»Π»ΠΌΠ°Π½Π½Π° (Doug Hellmann): pdb β Interactive Debugger Π½Π° ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌ ΡΠ΅ΡΡΡΡΠ΅ Python Module of the Week, Π° Π²ΠΎΡ Π΅Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π° Ρ Π°Π±ΡΠ΅: pdb β ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ xa4a.
IPython pdb
ΠΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΡΠ°Π·Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ IPython ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ipdb Π΄Π»Ρ Π½Π΅Π³ΠΎ:
β pip install ipython ipdb
IPython (ΠΈ ipdb, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΠ°ΡΡΡ) ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Β«Π±ΠΎΠ»Π΅Π΅ Π»ΡΡΡΡΡΒ» ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΈ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ: ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π°, Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈΡΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΡ Π»ΡΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π°Π»ΠΈΠ°ΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ IPython, Π²Π²Π΅Π΄Ρ «?» Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΡ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΈ Π΄Π΅Π»Π°Π΅Ρ Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΡΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ.
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ ΡΠΊΡΠΈΠΏΡΠ° Π² ipdb ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
β python -m ipdb script.py
β ipdb script.py
ΠΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΡΠΊΡΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅, Π΄Π°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π²ΡΡ, ΡΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ: ΡΡΠ°Π²ΠΈΡΡ Π±ΡΠ΅ΠΉΠΊΠΏΠΎΠΈΠ½ΡΡ, ΠΈΠ·ΡΡΠ°ΡΡ Π΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π½Π΅ΠΎΡΠ»ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΈΠ·Π½ΡΡΠΈΡΠ΅Π»Π΅Π½: ΠΏΠΎΠΊΠ° Π΄ΠΎΠ±Π΅ΡΡΡΡΡΡ Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ Β«nextΒ», Β«stepΒ», Π΄Π° ΠΈ ΡΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° (Β«breakΒ») ΡΡΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΎΡΠ°Π·Π΄ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ:
import ipdb; ipdb.set_trace()
Π ΡΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, β Π΄Π°Π»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎ ΡΡΡΠΈ, ΡΡΠ½ΠΊΡΠΈΡ Β«set_traceΒ» β ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° (breakpoint).
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΡΡΠ΅ΡΠΎΠ²
ΠΡΠ±ΠΎΠΉ, ΠΊΠΎΠΌΡ Π·Π½Π°ΠΊΠΎΠΌΠ° Π°Π±Π±ΡΠ΅Π²ΠΈΠ°ΡΡΡΠ° PEP8, Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π²ΠΈΠ½ΠΈΡΡ ΠΌΠ΅Π½Ρ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π²ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΊΡ Ρ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π²ΠΏΠΎΠ»Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΎ Π½Π° ΠΆΠΈΠ·Π½Ρ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡΠ΅Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ (ΠΎΠ± ΡΡΠΎΠΌ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Ρ ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ PEP8 ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ ΠΈ ΠΏΡΡΠ΅ΠΌ, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π°Π²ΡΠΎΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠΎΠ΄Π° Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅). ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ°ΠΊ ΠΏΡΠΎΡΠ΅ Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠΎΠ΄. ΠΡ ΠΈ Π²-ΡΡΠ΅ΡΡΠΈΡ , ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² PEP8: Β«A Foolish Consistency is the Hobgoblin of Little MindsΒ».
Python Debugger ΠΈΠΌΠ΅Π΅Ρ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΡΠΊΠ½ΡΠΈΠΈ set_trace. ΠΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β«post mortemΒ»: Π·Π°ΠΏΡΡΠΊ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠ΅ΠΉΡΠ±Π΅ΠΊΠΎΠΌ:
try:
some_code()
except:
import sys
import ipdb
tb = sys.exc_info()[2]
ipdb.post_mortem(tb)
ΠΈΠ»ΠΈ ΡΠ°ΠΊ:
import sys
import ipdb
def run_debugger(type, value, tb):
ipdb.pm()
sys.excepthook = run_debugger
some_code()
Π ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π»ΡΠ±ΡΡ Π½Π΅ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ½ΠΊΡΠΈΠΈ Β«some_codeΒ» Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
debug
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Β«set_traceΒ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ debug, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ipdb ΠΈ see (ΡΠ΄ΠΎΠ±Π½Π°Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ dir) ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΊΡ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠ»ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ:
import debug
Π ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Β«ipdbΒ» ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΌΠΎΠ΄ΡΠ»Ρ Β«seeΒ».
ipdbplugin
ΠΡΡ ΠΎΠ΄Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΠΈ, Π½Π° ΡΡΠΎΡ ΡΠ°Π·, ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°: nose-ipdb. Π‘ Π΅Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ (ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ ) ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈ Π½Π΅Π²Π΅ΡΠ½ΠΎ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΡΠ΅ΡΡΠ°Ρ (Ρ Π½Π°Π΄Π΅ΡΡΡ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ nose? =). ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ipdb ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ , Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΡΠΎΠ² Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ «—ipdb»:
β nosetests --ipdb
Π Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΏΡΠΈ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΠ²ΡΠΈΡ ΡΡ ΡΠ΅ΡΡΠΎΠ² Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ «—ipdb-failures»:
β nosetests --ipdb-failures
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΎΠ²ΠΈΡΡ Π²ΡΡ ΠΈ ΡΡΠ°Π·Ρ:
β nosetests --ipdb --ipdb-failures
Π― ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ ΡΠ΅Π±Π΅ ΠΆΠΈΠ·Π½ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.
werkzeug
ΠΠΎΡΡΡΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΡΠΌΠΈΠ½Π° Π ΠΎΠ½Π°Ρ Π΅ΡΠ° (Armin Ronacher), Π°Π²ΡΠΎΡΠ° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Flask ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΡΡΡΠ΅ΠΉΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Python Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ werkzeug ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ±ΠΎΡΠ½ΠΈΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΡ Π΄Π»Ρ WSGI ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ β ΠΊΠ»ΡΠ²ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΡΠ΅ΠΉΡΠ±Π΅ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Python Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅ ΡΡΠ΅ΠΉΡΠ±Π΅ΠΊΠ° ΠΏΡΡΠΌΠΎ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ middleware:
from werkzeug.debug import DebuggedApplication
from myapp import app
app = DebuggedApplication(app, evalex=True)
ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ werkzeug ΡΠΌΠ΅Π΅Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ Π΄Π°ΠΆΠ΅ Ajax-Π·Π°ΠΏΡΠΎΡΡ, Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Ρ ΡΠ°ΠΌ Π»ΠΈΡΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π». ΠΡΠ΄Ρ ΡΠ°Π΄ Π»ΡΠ±ΡΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ.
django-pdb
ΠΡΡ ΠΎΠ΄ΠΈΠ½ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π½Π° ΡΡΠΎΡ ΡΠ°Π· Π΄Π»Ρ Django: django-pdb. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ GET-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² Π·Π°ΠΏΡΠΎΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: http://127.0.0.1:8000/app/view?ipdb) Π»ΠΈΠ±ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ²:
β python manage.py runserver --ipdb
ΠΠΈΠ±ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ (ΡΠ΅ΠΆΠΈΠΌ Β«post-mortemΒ»):
β python manage.py runserver --pm
ΠΈΠ»ΠΈ
POST_MORTEM = True
Π² settings.py.
django-extensions
ΠΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ Π² Django ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ django-extensions, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ runserver_plus. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ Π±Π°ΡΠ°ΡΠ΅ΠΉΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠΆΠΈΡΡ Django ΠΈ Werkzeug (ΡΠΌ. Π²ΡΡΠ΅) ΠΈ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡ Ρ ΠΏΡΡΠΈΡΠΎΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ =)
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠ΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅ΡΡΠΊΠΈΠΉ ΡΠ΅ΡΠ²Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ runserver_plus:
β python manage.py runserver_plus
sentry
ΠΡΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅ΡΡΠΊΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠ°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ β Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎ Π±Π°Π³ΡΠ΅ΠΏΠΎΡΡΡ ΠΎΡ ΠΆΠΈΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π²ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Python, ΠΌΠΎΠ΄ΡΠ»Ρ Β«ΡΠ΅Π»Π΅ΠΏΠ°ΡΠΈΠΈΒ» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΡΠ°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Β«Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!!!11Β».
ΠΡΠΎΠ΅ΠΊΡ Sentry ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»Π½ΡΠΌ ΡΡΠ΅ΠΊΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π²ΡΠ΅Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ΅ΠΊΡΡΠ΅ΠΉΡΠ°, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ: ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π±ΡΠ°ΡΠ·Π΅Ρ, ΠΠ‘), Π²ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΡΡ, ΡΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ.
ΠΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° Β«ΠΏΡΠ»ΡΡΠΎΠΌΒ» ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠΈΠ½ΠΈΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ°ΠΌΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ°. ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ sentry β Π»ΠΎΠ³Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΏΠΎΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΠΈΡΡ Π² Π»ΠΎΠ³ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΈ Π²ΡΡ ΡΡΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² sentry.
ΠΠΎ ΡΠ°ΠΌΡΠΉ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ»ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ (ΠΈ Π½ΡΠΆΠ½ΠΎ!) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅.
PuDB
ΠΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ: PuDB ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ Π΄Π΅Π±Π°Π³Π΅Ρ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ:
ΠΠ΅ Π±ΡΠ΄Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π½ΡΠΌ ΠΏΠΈΡΠ°ΡΡ (ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Ρ ΡΠ°ΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠΌ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ), ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΊΠΎΡΠΎΡΠΊΡΡ Π·Π°ΠΌΠ΅ΡΠΊΠ° Π½Π° Ρ Π°Π±ΡΠ΅: Π£Π΄ΠΎΠ±Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π΄Π»Ρ Python/Django ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ int22h ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΎΠ±Π·ΠΎΡ: ΠΡΠ»Π°Π΄ΠΊΠ° Python/Django ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ PuDB.
Winpdb
Standalone ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Python, Π½Π° ΡΡΠΎΡ ΡΠ°Π· Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ: Winpdb:
ΠΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ winpdb Π² 20 ΡΠ°Π· Π±ΡΡΡΡΠ΅Π΅ pdb, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ΅Π΄Π°ΠΌΠΈ. ΠΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΡΡΠΎΡΠΈΠ°Π» ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅: code.google.com/p/winpdb/wiki/DebuggingTutorial.
IDE
ΠΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ Β«ΠΊΠΎΠΌΠ±Π°ΠΉΠ½ΡΒ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: IDE, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π΅ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ΄, ΠΎΡΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ. Π―, ΠΏΠΎΠΆΠ°Π»ΡΠΉ, Π²ΡΠ΄Π΅Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ², ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Python: PyCharm, PyDev, Wing IDE ΠΈ PTVS.
ΠΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π»ΠΈΡΠ½ΠΎ Ρ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΏΡΡΠ°Π»ΡΡ, ΡΠ°ΠΊ ΠΈ Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠ΅ΡΠ΅ΡΠΈΠ»ΠΈΡΡ ΡΠ΅Π±Ρ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ, ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ ΠΈ Π»ΡΠ±ΠΈΠΌΡΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ (Π±ΡΠ΄Ρ ΡΠΎ vim, emacs ΠΈΠ»ΠΈ sublime text) Π½Π° Π»ΡΠ±ΡΡ ΠΈΠ· Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ IDE, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠΎΠ²Π΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ Π΄Π°ΡΡ ΡΡΠΈΠΌ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌ ΡΠ°Π½Ρ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΈΡ .
ΠΡΠ»ΠΈ ΡΠ΅ΡΡΠ½ΠΎ, Ρ Π½Π΅ Π²ΠΈΠΆΡ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΡΠΌΡΡΠ»Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· ΡΡΠΈΡ IDE, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΡΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, β ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΡΡΡΠΎ ΠΈ Π·Π΄ΠΎΡΠΎΠ²ΠΎ.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌ, ΠΊΡΠΎ Π΄ΠΎΡΠΈΡΠ°Π» ΠΈ ΠΏΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π».
ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ Π ΡΠ΄Π½ΡΡ
,
Π’Π΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΠ°Π»Π΅Π½Π΄Π°ΡΡ Mail.Ru.
ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ Debug / Π₯Π°Π±Ρ
Debug Area β ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°Π±ΠΎΡΠ΅ iOS ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° Π² Xcode. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΠΎΠ΄ iOS, ΠΈ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΎΡΠΎΠΉΡΠΈ ΠΎΡ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ³ΠΎ ΠΈ Π»ΡΠ±ΠΈΠΌΠΎΠ³ΠΎ print ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈ Π½Π°ΠΉΡΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΈΠ·ΡΡΠ°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅Π±Π°Π³Π° (Debug Area).
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Debug ΠΏΠ°Π½Π΅Π»Ρ Π²Π°Ρ Π²Π·Π³Π»ΡΠ΄ ΡΠΏΠ°Π΄ΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΠΈΠΆΠ½Π΅Π΅ ΠΌΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΎΠ½ΠΎ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ»ΡΠΆΠΈΡΡ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ (ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΡΠ°ΡΡΡ Π΄ΠΎΠ±ΡΡΡ βFatal error: Index out of rangeβ), Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΎΡ Π½Π°Ρ Ρ ΠΎΡΠ΅Ρ Xcode ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ΡΡ Π³ΡΠ³Π»ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΎ ΠΏΠΎ Ρ ΠΎΠ΄Ρ ΡΠΎΡΡΠ° Π²ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ.
Π‘ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΡΡΠ΅ΠΌΠΈΠΌΡΡ ΠΏΠΎΠ½ΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠ΅ΡΠ΅ΡΠ»Π° Π² Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. Π ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΡΠΊΠΈ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ²ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·Π½ΠΈΡΡΡΡ. Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Debug ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ βprint()β, ΠΏΠΎΡΠΎΠΌ ΠΈΠ΄ΡΡ ΡΠ°ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Breakpoints ΠΈ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² βpoβ, Π΄Π°Π»Π΅Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Ρ Debug Variable Input (ΠΎΠ±Π»Π°ΡΡΠΈ ΡΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ Π² Xcode), Π° Π΄Π°Π»Π΅Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½Π° Breakpoint ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² β βexpressionβ (ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΡΠ°ΠΊΠ°Ρ Π±ΡΠ»Π° ΡΠ²ΠΎΠ»ΡΡΠΈΡ Ρ ΠΌΠ΅Π½Ρ).
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π·Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½ΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π‘Π°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ Π²ΡΠΎΠ΄Π΅ βprint()β, ΠΈ βpoβ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, Ρ Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΈ ΡΠ°ΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΠΈΡ ΡΡΡΡ ΠΈ ΡΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΊΡΠ°Π½ΠΎΠΌ Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΡΡΠ΅Π΅ΠΊ (TableViewcell) c Π΄Π²ΡΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π²Π½ΡΡΡΠΈ: UIImageView ΠΈ UILabel. Π ΡΡΠ΅ΠΉΠΊΠ°Ρ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°ΡΡ Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, Π° Π² ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΡΡΠ°Π²ΠΈΡΡ Π»ΠΈΠ±ΠΎ image1, Π»ΠΈΠ±ΠΎ image2.
ΠΠ΅ΡΠΎΠ΄ tableViewCellForRowAtIndexPath Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ Π½Π°Ρ ΡΡΠ΅ΠΉΠΊΠΈ, ΠΏΡΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ:
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ΡΠ°Π±Π»ΠΈΡΡ:
Breakpoint
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΠΊΡΡ Π² Π½Π°Ρ Label.
1. Π‘ΡΠ°Π²ΠΈΠΌ Breakpoint:
2. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° 55 ΡΡΡΠΎΠΊΠ΅, ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π½Π° ΡΡΡΠΎΠΊΠ΅, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π·ΠΎΠ½Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠ΅ΠΉΠΊΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅ΠΉΠΊΠΎΠΉ.
3. ΠΠΈΡΠ΅ΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡ ΡΡΠ΅ΠΉΠΊΠΈ:
4. Π£Π±ΠΈΡΠ°Π΅ΠΌ Π½Π°Ρ Breakpoint ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ».
5. ΠΠ° ΡΠΊΡΠ°Π½Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½Π° Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π²ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
expression Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅.
Edited Breakpoint
ΠΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡ Π² Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΅ΠΊ? ΠΠ»ΠΈ ΠΌΡ ΡΠΆΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ?
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ, ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ° Π² ΡΡΠ΅ΠΉΠΊΠΈ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ Breakpoint ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π΅ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Ρ Breakpoint, ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠ΄Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π² Π·ΠΎΠ½Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π°ΡΠ΅ΠΉ ΡΡΠ΅ΠΉΠΊΠΈ ΠΌΠ΅Π½ΡΡΡ Π΅Ρ ΡΠ΅ΠΊΡΡ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ breakpoint.
- ΠΠ΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΡΡΡΠ΅Π»ΠΎΡΠΊΠ΅ breakpointβa.
- ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Edit Breakpoint.
- Condition β ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Breakpoint ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠ΅ΠΉΡΠ°Ρ ΠΎΠ½ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½.
- Ignore β ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Breakpoint ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ (ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠΎ).
- Π Π²ΠΎΡ Action β ΡΠΎ, ΡΡΠΎ Π½Π°Π΄ΠΎ, Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΏ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Debugger Command.
- ΠΠΈΡΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ:
- expression cell.desriptionTextOutlet.text = «\(indexPath.item) mission completeβ.
- Π‘ΡΠ°Π²ΠΈΠΌ Π³Π°Π»ΠΎΡΠΊΡ β ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
9. ΠΡΠΎΠ±ΡΠ΅ΠΌ.
ΠΡΠΎ ΡΡΠΏΠ΅Ρ , ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΈ Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΆΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ.
Breakpoint function
ΠΡΠ΅Π³Π΄Π° Π±ΡΠ²Π°ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ³Π΄Π° Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΎ-ΡΠΎ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ Breakpoint Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΠΊΡΠ΄Π°. ΠΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ Obj-C, ΠΈ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π° Π½Π΅Π³ΠΎ Breakpoint ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π΅ΡΡΡ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Assembler ΠΊΠΎΠ΄Π°.
1. Π Breakpoint Π½Π°Π²ΠΈΠ³Π°ΡΠΎΡΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Symbolic Breakpoint.
2. ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΠ° Π² ΡΡΠ΅ΠΉΠΊΠ΅, ΠΏΠΈΡΠ΅ΠΌ -[UILabel setText:].
3. ΠΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΈ ΡΡΠ΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠΉΠΌΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΡΠΎΡ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ (ΠΎΠ½ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² ΡΡΠ°ΡΡΡ Π±Π°Ρ), Π° Π²ΡΠΎΡΠΎΠΉ ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π°Ρ:
4. ΠΠΎΠ΄ β$arg1β Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
5. ΠΠΎΠ΄ β$arg2β Ρ ΡΠ°Π½ΠΈΡΡΡΡ selector ΡΡΠ½ΠΊΡΠΈΠΈ.
6. ΠΠΎΠ΄ β$arg3β Ρ ΡΠ°Π½ΠΈΡΡΡΡ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ.
ΠΠΊ, Ρ ΡΡΠΈΠΌ Π²ΡΠΎΠ΄Π΅ Π±Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π² ΡΡΠ°ΡΡΡ Π±Π°Ρ Π΄Π΅Π»ΠΎ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΈ Π½Π°Π΄ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅, ΡΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°ΡΡ? ΠΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ Breakpoint ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅, Π½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π² ΠΊΠΎΠ΄Π΅. Π§ΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ? ΠΡ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ Π½Π°Ρ view ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ Π² ΡΡΠ΅ΠΉΠΊΡ, Π·Π½Π°ΡΠΈΡ ΡΠ°ΠΌΠΎΠ΅ ΡΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π²ΠΎ viewDidLoad ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅ΠΉΠΊΠΈ.
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ breakpoint ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° Π»ΠΈΠ½ΠΈΠΈ, ΠΈ Π² action ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
breakpoint set --one-shot true --name "-[UILabel setText:]β
breakpoint set βone-shot true
β ΡΠΎΠ·Π΄Π°Π΅ΠΌ breakpointβname
β ΠΈΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ breakpointβ-[UILabel setText:]β
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΌΠ΅ΡΠΎΠ΄
ΠΠΎΡ ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
Skip Lines
Π ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΠ»ΠΈ, ΡΡΠΎ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° ΠΏΠΎΡΡΠΈΡ Π½Π°ΠΌ Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ? Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΠ°ΠΊ:
- Π‘ΡΠ°Π²ΠΈΠΌ breakpoint Π½Π° ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ.
- ΠΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ, ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΡΡΡΠΎΠΊΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΠΎΡΠΈΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π·Π°Π±Π°Π²Π½ΠΎ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΈΠΆΠ΅ Π²Π°ΡΠΈΠ°Π½Ρ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°Π½ΠΈΡ).
Π’Π°ΠΊ ΠΆΠ΅ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ, β ΡΡΠΎ ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² βedit breakpointβ. ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΡΡ ΡΠ°ΠΊΠΈΡ ΡΠΊΠ°ΡΠΊΠΎΠ² β ΡΡΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡΡ Π½Π°Ρ ΠΎΡ ΡΠ΅Π±ΠΈΠ»Π΄Π°, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΏΠ°Π΄ΡΡ.
ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, ΠΈ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ ΡΡΠ΅ΠΉΠΊΠ΅, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΡΡΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈ Π²Π΅ΡΠ½ΡΡΡ ΡΡΠ΅ΠΉΠΊΡ Π±Π΅Π· ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΌΡ ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΡΠΈ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
ΠΠ²ΡΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π²ΡΡ ΠΆΠ΅ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Ρ ΠΎΡΠ΅ΡΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ Π² breakpoint:
Π£Π΄Π°ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ, ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ.
Watchpoint
ΠΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² Π΄Π΅Π±Π°Π³Π΅ΡΠ΅ β ΡΡΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, watchpoints. Watchpoint ΡΠ΅ΠΌ ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° KVO, ΠΌΡ ΡΡΠ°Π²ΠΈΠΌ breakpoint Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΌΠ΅ΡΡΠ°, ΠΎΡΠΊΡΠ΄Π° ΠΈ ΠΊΠ΅ΠΌ Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» watchpoint Π½Π° ΡΡΠ΅ΠΉΠΊΡ, ΡΡΠΎ Π±Ρ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π»ΠΈΡΡΠ°Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π³ΠΎ Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΎΠΌΡΠ½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ layout view Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΠΏΡΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° constraint, Π°Π½ΠΈΠΌΠ°ΡΠΈΡ, ΠΏΡΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π΄Π»Ρ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅-ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΠ»Ρ ΠΏΡΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ watchpoint Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ breakpoint Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² βdebug variableβ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ Π²ΡΠ±ΡΠ°ΡΡ watch β<ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ>β.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΡΠ½ΡΡΡ watchpoint Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π°Π΄ΠΎ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² breakpoint navigator, ΡΠ°ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ breakpoint Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈ Π½Π°Ρ watchpoint.
Breakpoint UI Change
ΠΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΎΡΠ΄Π΅Π±Π°ΠΆΠΈΡΡ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ βpoβ, Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΈ ΡΠ°ΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎ Π±ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΡΡΠΌΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠ½ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² API view, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π»Π΅ΠΆΠΈΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ View Hierarchy, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ Π²Ρ Π½Π°ΡΠ»ΠΈ Π½ΡΠΆΠ½ΡΠΉ view Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
expression self.view.recursiveDescription()
ΠΠ½Π° Π΅ΡΡΡ Π² Obj-C Π½ΠΎ Π² Swift Π΅Ρ ΡΠ±ΡΠ°Π»ΠΈ ΠΈΠ· Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ·ΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΡ Π΅Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π° Debuger ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Obj-C, Π² ΡΠ΅ΠΎΡΠΈΠΈ Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΡΠΌΠΈΡΡ ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΈ ΠΎΠ½ ΠΏΠΎΠΉΠΌΡΡ, ΡΡΠΎ Π²Ρ ΠΎΡ Π½Π΅Π³ΠΎ Ρ ΠΎΡΠΈΡΠ΅. ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Obj-C Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²Π²Π΅ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
expression -l objc -O - - [`self.view` recursiveDescription]
Π§ΡΠΎ Π²Ρ ΡΡΡ Π²ΠΈΠ΄ΠΈΡΠ΅? Π― Π²ΠΈΠΆΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΈΠ²ΡΠΊΠ½ΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Π»ΡΡΡΠ΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ, Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ typealias Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
command alias poc expression -l objc -O β
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅ΡΡΡ, Π½ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ:
poc [`self.view` recursiveDescription]
ΠΡΠ΄Π΅Ρ Π»ΠΈ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ Xcode ΠΈΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅? Π£Π²Ρ, Π½Π΅Ρ. ΠΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ! Π‘ΠΎΠ·Π΄Π°Π² ΡΠ°ΠΉΠ» .lldbinit ΠΈ Π²ΠΏΠΈΡΠ°Π² ΡΡΠ΄Π° Π½Π°Ρ alias. ΠΡΠ»ΠΈ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ, Π²ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΏΡΠ½ΠΊΡΠ°ΠΌ:
1. Π‘ΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΡΠ°ΠΉΠ» .lldbinit (Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π·ΡΡΡ .gitignore, ΠΎΠ½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²).
2. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΠΎΠ²Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
command alias poc expression -l objc -O - -
3. Π€Π°ΠΉΠ» ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π² ΠΏΠ°ΠΏΠΊΡ ΠΏΠΎ Π°Π΄Π΅ΡΡ βMacintoshHD/Users/β.
Π ΡΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ view, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ»Ρ Swift ΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊΠΎΠΌ, Π½Π°Π΄ΠΎ Π²ΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
po unsafeBitCast(0x105508410, to: UIImageView.self)
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΡΡΠ΅ΠΉΠΊΠ΅, Π΄Π°Π²Π°ΠΉΡΠ΅ Π΅Ρ ΠΏΠΎΠ΄Π²ΠΈΠ½Π΅ΠΌ ΡΡΠΎ Π±Ρ ΠΎΠ½Π° Π±ΡΠ»Π° ΠΏΠΎ ΡΠ΅Π½ΡΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ ΠΈΠΌΠ΅Π»Π° ΠΎΡΡΡΡΠΏ Ρ Π±ΠΎΠΊΡ 20 px.
ΠΡΠ²Π°Π΅Ρ Π½Π΅ ΡΡΠ°Π·Ρ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½ΡΡΡ Ρ debug ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎ Π±Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.
ΠΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²ΠΈΠ΄Π΅ΡΡ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ, Π½Π°Π΄ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Python Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π½Π°Ρ (ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΊΡΠΈΠΏΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π΄Π΅ΡΡ www.raywenderlich.com/612-custom-lldb-commands-in-practice), ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΌΠ΅Π΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Ρ Python ΠΈ Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Π½ΡΠΌ Π΄Π»Ρ lldb ΡΠΎ Π²Π°ΠΌ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ.
Π― ΠΆΠ΅ ΡΠ΅ΡΠΈΠ» Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° UIView, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡ view Π² Π½ΡΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΌΠ½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ ΡΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΊ LLDB ΠΈ Π½Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ iOS ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° (ΠΈΠ½Π°ΡΠ΅ Π½Π°Π΄ΠΎ ΠΎΡΠ²Π°ΠΈΠ²Π°ΡΡ Python Π΄Π»Ρ LLDB).
Π― Π½Π΅ ΡΡΠ°Π» ΠΈΡΠΊΠ°ΡΡ ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ Π΅Π³ΠΎ Π² Π½ΡΠΆΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΡΡΠΎ Π±Ρ ΠΏΠΎΡΠΎΠΌ Π²Π·ΡΡΡ frame, ΡΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π·Π°ΠΉΠΌΠ΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎΠΏΡΠΎΡ ΡΠ΅ΡΠΈΠ»ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΈ UIView:
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΠ½Π° ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΡΠ΅ΠΉΠΊΠ°ΠΌΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠ· Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ flush Π½Π΅ Π²ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΡΠΎΡΡΠΈΡΠ°Π½Ρ ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ (ΠΌΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π²Π΅ΡΠ½ΡΠ»ΠΈ tableViewCell). Π‘ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ.
ΠΠ½Π°Ρ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ view Π² ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ViewHierarchy ΠΈ Ρ ΠΎΡΠΈΠΌ ΠΎΡΡΡΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ view. Π Xcode Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ view Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²Π΅ΡΠ°, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΈΠΏΡ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ constraints Π½Π°ΡΠ΅Π³ΠΎ UIImageView.
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎ constraint:
1. ΠΠ°ΠΆΠΌΠΈΡΠ΅ Π½Π° Debug View Hierarchy.
2. ΠΠΊΠ»ΡΡΠΈΡΠ΅ Clipped Content Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π²Π½ΠΈΠ·Ρ ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΡΠΊΡΠ°Π½Π°.
3. ΠΠΊΠ»ΡΡΠΈΡΠ΅ Constraints Π½Π° ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ.
4. ΠΡΠ±Π΅ΡΠΈΡΠ΅ Contraint.
5. Π ΠΌΠ΅Π½Ρ Π½Π°ΠΆΠΌΠΈΡΠ΅ Edit -> Copy (Command + C).
6. ΠΠΎΠΏΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° Π²ΠΎΡ ΡΠ°ΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°: ((NSLayoutConstraint *)0x2838a39d0).
7. Π ΡΠ΅ΠΏΠ΅ΡΡ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠ΅Π½ΡΠ΅ΠΌ Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ΄ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΠΈ Π² lldb: expression [((NSLayoutConstraint *)0x2838a39d0) setConstant: 60]
8. ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ, ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ ΡΠ²ΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠ°Π½Π΅.
Π’Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅ΡΠ°, ΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅:
expression [(UILabel *)0x102d0a260] setTextColor: UIColor.whiteColor]
Demo ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΡΠΎΡΡΡΠΌ (60 ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Π²ΠΎ ViewController), Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ Π½Π°ΠΏΠΈΡΠ°Π», ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΡΡΠ°ΡΡΠ΅, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π² Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ.
P.S.: ΠΡΠ»ΠΈ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΏΠΈΡΠΈΡΠ΅. ΠΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ WWDC ΠΈ ΠΠ΅Π±Π°ΠΆΡΠ΅ ΠΊΠ°ΠΊ Pro.
Π‘ΠΎΠ²Π΅ΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°ΠΌΠΈ:
ΠΠ΄ΠΎΡ
Π½ΠΎΠ²Π»ΡΠ»ΡΡ Advanced Debugger WWDC 18 Session
ΠΠΎΠΌΠ°Π½Π΄Ρ Debugger
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Python Π² LLDB Xcode
AVR. Π£ΡΠ΅Π±Π½ΡΠΉ ΠΡΡΡ. ΠΡΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. Π§Π°ΡΡΡ 2
ΠΠ΅ΡΠΎΠ΄ 2. ΠΠΎΡΠ³Π°Π»ΠΊΠΈ (Π Π°Π±ΠΎΡΠ° ΠΏΠΎΡΡΠ°ΠΌΠΈ ΠΠ²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°)
Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ° ΡΡΠΎ Π²ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΡΡΠΎ ΡΠΎ Π²Π½Π΅ΡΠ½Π΅Π΅, ΡΠΎ ΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΌΠ°Π»ΠΎ. Π’.ΠΊ. Π³Π»ΡΡΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²Π½ΡΡΡΠΈ, Π° ΡΠ½Π°ΡΡΠΆΠΈ.
Β
ΠΠΈΠ±ΠΎ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π½Π΅ Π³Π»ΡΠΊ, Π° Π±Π°Π½Π°Π»ΡΠ½ΠΎΠ΅ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π€ΡΠ°Π·Ρ ΠΈΠ· Π΄Π°ΡΠ°ΡΠΈΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅Π» ΠΈΠ»ΠΈ Π³Π»Π°Π· Π·Π°ΠΌΡΠ»ΠΈΠ»ΡΡ. Π§ΡΠΎ ΡΠΎ Π·Π°Π±ΡΠ» ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠ΄Π° ΠΏΡΠΈΠΏΠ°ΡΠ». ΠΠ° ΠΌΠ°Π»ΠΎ Π»ΠΈ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΊΠΎΡΡΡΠΈΡΡ.
Β
Π ΠΎΠ±ΡΠ΅ΠΌ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ·-Π·Π° ΠΊΡΠΈΠ²ΠΎΠΉ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π³Π΄Π΅ ΠΊΠΎΡΡΠΊ Π½Π°Π΄ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΠΈ Π·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π½ΡΡΡΠΈ. Π ΠΎΠ±ΡΠ΅ΠΌ, Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Β
ΠΡΠΈΡΠ΅ΠΌ Π½Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎ β ΡΡΠΎ ΠΌΡ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈΠ»ΠΈ ΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ»Π°Π΄ΠΈΠΌ. ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅ΠΉ Π·Π½Π°ΡΡ ΠΊΡΠ΄Π° ΡΡΠ»Π° ΠΏΡΠΎΠ³Π°.
Β
Π‘Π°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄. ΠΡΠ΅ ΠΏΡΠΎΡΡΠΎ β ΠΌΡ Π±Π΅ΡΠ΅ΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΠΊΡ. ΠΡΠΈΡΠ΅ΠΌ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ ΠΊΠ°ΠΊΠ°Ρ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΊΡΠΎΡΠ΅ΡΠ½Π°Ρ ΡΠΈΠ½ΡΠΊΠ° ΠΈ Π²ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ°ΡΠΏΠΈΡΠ°Π½Ρ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π·, ΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΎΠ΄ΠΈΠ½ Π»ΠΈΡΠ½ΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ, Π½ΠΎ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π½Π°Ρ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ.
Β
Π Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ β Hi, Lo ΠΈ Hi-Z. Π’Π°ΠΊ ΡΡΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΠΊΡΠ΅Π°ΡΠΈΠ²ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΡ ΠΏΡΠΎΠ±Π½ΠΈΡΠ΅ΠΊ:
Β
Β
Π’ΠΎΠ³Π΄Π° Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Hi-Z ΡΠΎ Π±ΡΠ΄ΡΡ ΡΡΡΠΊΠ»Π΅Π½ΡΠΊΠΎ Π³ΠΎΡΠ΅ΡΡ ΠΎΠ±Π° Π΄ΠΈΠΎΠ΄Π°. ΠΡ, Π° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ²ΠΎΠΉ Π΄ΠΈΠΎΠ΄ Π² Π³ΠΎΡΠ΄ΠΎΠΌ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ΅ΡΡΠ²Π΅.
Β
Π Π² ΠΊΠΎΠ΄ ΠΏΠΈΡ
Π°Π΅ΠΌ Π΄Π΅Π±Π°ΠΆΠ½ΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ Π²ΠΈΠ΄Π°:
Β
1 2 3 | ;Set Hi SBI DEBUGDDR,DEBUG SBI DEBUGPORT,DEBUG |
;Set Hi
SBI DEBUGDDR,DEBUG
SBI DEBUGPORT,DEBUG
1 2 3 | ;Set Lo SBI DEBUGDDR,DEBUG CBI DEBUGPORT,DEBUG |
;Set Lo
SBI DEBUGDDR,DEBUG
CBI DEBUGPORT,DEBUG
1 2 3 | ;Set Hi-Z CBI DEBUGDDR,DEBUG CBI DEBUGPORT,DEBUG |
;Set Hi-Z
CBI DEBUGDDR,DEBUG
CBI DEBUGPORT,DEBUG
Β
ΠΠΎΠΆΠ½ΠΎ ΠΈΡ
Π² ΠΌΠ°ΠΊΡΠΎΡΡ Π·Π°Π²Π΅ΡΠ½ΡΡΡ. Π£Π΄ΠΎΠ±Π½Π΅ΠΉ Π±ΡΠ΄Π΅Ρ.
Β
ΠΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄Π΅Π±Π°Π³ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΠ»Π°. Π ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡ Π½Π°ΡΡ ΡΡΠΎΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ΅Π»ΡΡ
9 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π½Π° 2 Π²ΡΠ²ΠΎΠ΄Π°.
Β
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π½Π°Π΄ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ Π½Π΅ ΡΡΠΏΠ΅ΡΡ ΡΠ°Π·Π³Π»ΡΠ΄Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ³ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΈΠΊΠΎΠ². ΠΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ Π²ΠΎΡΠΊΠ½ΡΡΡ Π² ΠΊΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΡΠΌΠ΅Π½Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄Π΅Π±Π°Π³Π²ΡΠ²ΠΎΠ΄Π° ΡΡΠΏΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ Π²ΠΈΠ΄Π°:
Β
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | PUSHF ; ΠΠ°ΠΊΡΠΎΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² PUSH R16 PUSH R17 PUSH R18 Β LDI R16,255 ; ΠΡΡΠ·ΠΈΠΌ ΡΡΠΈ Π±Π°ΠΉΡΠ° LDI R17,255 ; ΠΠ°ΡΠ΅ΠΉ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΈ LDI R18,255 Β Dloop: SUBI R16,1 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ 1 SBCI R17,0 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π‘ SBCI R18,0 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π‘ Β BRCC DLoop ; ΠΡΠ»ΠΈ Π½Π΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° - ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Β POP R18 POP R17 POP R16 POPF ; ΠΠ°ΠΊΡΠΎΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ² |
PUSHF ; ΠΠ°ΠΊΡΠΎΡ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ²
PUSH R16
PUSH R17
PUSH R18
LDI R16,255 ; ΠΡΡΠ·ΠΈΠΌ ΡΡΠΈ Π±Π°ΠΉΡΠ°
LDI R17,255 ; ΠΠ°ΡΠ΅ΠΉ Π²ΡΠ΄Π΅ΡΠΆΠΊΠΈ
LDI R18,255
Dloop: SUBI R16,1 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ 1
SBCI R17,0 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π‘
SBCI R18,0 ; ΠΡΡΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π‘
BRCC DLoop ; ΠΡΠ»ΠΈ Π½Π΅Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° — ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄
POP R18
POP R17
POP R16
POPF ; ΠΠ°ΠΊΡΠΎΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ»Π°Π³ΠΎΠ²
Β
ΠΡΠΎΡΠΌΠ»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄. ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠΆΠ΅ ΠΎΡΠΎΡΠΌΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΠΊΡΠΎΡΠ° ΠΈ Π²ΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΡΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠ΅Ρ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠΉ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ.
Β
ΠΠΈΠ±ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡ Π·Π°ΡΡΠΏ:
Β
ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π½Π° ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΡΡΠ°Π½Π΅Ρ ΠΈ Π΄Π°Π»ΡΡΠ΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ ΠΏΠΎΠΉΠ΄Π΅Ρ (ΠΏΡΠ°Π²Π΄Π° Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ Π²Π°ΡΠ΄ΠΎΠ³, ΡΠΎ ΠΎΠ½ ΡΠ΅Π±ΡΡΠ½Π΅ΡΡΡ ΠΏΠΎ Π²Π°ΡΠ΄ΠΎΠ³Ρ).
Β
Π ΠΌΠΎΠΆΠ½ΠΎ ΠΆΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π² ΡΠ΅ΠΆΠΈΠΌ Π²Ρ
ΠΎΠ΄Π° PullUp ΠΈ ΠΏΡΠΎΡΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΡΠΎΠ±Π½ΠΈΠΊΠ°. ΠΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄ΡΠΈ Π΄Π°Π»ΡΡΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΈ Π±Π΅Π· Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ, ΡΠ΄Π΅Π»Π°ΡΡ, Π½ΠΎ Π½Π°Π΄ΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π΄ΡΠ΅Π±Π΅Π·Π³ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π».
Β
1 2 3 4 5 6 | ;STOP DB_BTN CBI DEBUGDDR,DEBUG SBI DEBUGPORT,DEBUG Β SBIC DEBUGPIN,DEBUG RJMP PC-1 |
;STOP DB_BTN
CBI DEBUGDDR,DEBUG
SBI DEBUGPORT,DEBUG
SBIC DEBUGPIN,DEBUG
RJMP PC-1
Β
ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊΠΈΡ
ΠΊΠ½ΠΎΠΏΠΎΡΠ½ΡΡ
ΡΠ΅ΠΊΠΏΠΎΠΈΠ½ΡΠΎΠ². Π ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ Π½ΠΈΠΌ ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠΎΠ³ΡΡΠ΅ΠΉ Π²ΠΎΠ»Π΅Π²ΠΎΠΉ ΡΡΠΊΠΎΠΉ. Π ΠΏΠΎΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΏΠΈΡ Π½Π° Π·Π°Π΄Π΅ΡΠΆΠΊΠ°Ρ
ΠΈΠ»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΡ
ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π½Π°ΠΏΡΡΠΆΠ΅Π½ΠΈΡ/ΠΏΠΎΡΡΠΏΠ°ΡΡ Π»ΠΎΠ³ ΡΡΠΎΠ²Π½ΠΈ, ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ
Π²ΡΠ²ΠΎΠ΄ΠΎΠ², Π΄Π° ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ.
Β
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π² ΡΡ
Π΅ΠΌΠ΅ ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡΠΎ ΠΈ ΠΏΡΠΎΠ±Π½ΠΈΠΊ ΡΡΡ Π½Π΅ Π½ΡΠΆΠ΅Π½ β ΠΎΠ±ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ β ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠΈΠ² ΠΈΡ
Π½Π° Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠΊΠ°.
Β
ΠΡΠ°Π²Π΄Π° Π² ΡΠ»ΡΡΠ°ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Π½Π° ΡΠ΅ΡΠΊΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΠ΄Π΅ΡΠΆΠΊΠ°Ρ Π΄Π°Π½Π½Π°Ρ Π·Π°ΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΡΠΎΠΊΠ°ΡΠΈΡΡ, Π½ΠΎ Π΄Π»Ρ Π½ΠΈΡ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΎ Π½ΠΈΡ ΠΏΠΎΠ·ΠΆΠ΅.
R Debug — ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ!
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΠΈΠ·ΡΡΠΈΡΡ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΡΠ΅ΠΌΡ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ»Π°Π΄ΠΊΡ R. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R ΠΈ Π΅Π³ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° R Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.
ΠΡΠ°ΠΊ, ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ ΡΡΠΎΠΊΡ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ R Debug?
ΠΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π΄Π°Π²Π°ΡΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ·-Π·Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ.Π ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ (Ρ. Π. ΠΡΠΈΠ±ΠΎΠΊ) Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΈ Π³Π΄Π΅ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Β« ΠΎΡΠ»Π°Π΄ΠΊΠ° Β».
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
- ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ()
- ()
- Π±ΡΠ°ΡΠ·Π΅Ρ ()
- ΡΠ»Π΅Π΄ ()
- Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ()
ΠΡΠ»Π°Π΄ΠΊΠ°
ΠΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ.ΠΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² R.
.
Π‘Π΅ΠΊΡΠ½Π΄ΠΎΡΠΊΡ! ΠΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ — ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π² R Programming
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ°ΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΠ°ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅ΠΌ Π½Π° Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅. ΠΠΎΡΡΠΎΠΌΡ Π±Π΅ΡΡΠ΅Π½Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π½Π°Π²ΡΠΊΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
1. Π‘ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
ΠΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ:
ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ — ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΠΎΠ΄Π½ΠΎ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ Π²Ρ ΡΡΠΈΡΠ°Π΅ΡΠ΅, Π²Π΅ΡΠ½Ρ Π² ΠΊΠΎΠ΄Π΅, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π΅ΡΠ½Ρ.2 + 3 * g (z, 2)
w <- 28
if (w + q> 0) u <- 1 else v <- -10
2. ΠΠ°ΡΠ½ΠΈΡΠ΅ Ρ ΠΌΠ°Π»ΠΎΠ³ΠΎ
ΠΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΡΡΡΡ ΡΠ΅ΡΡΠΎΠ², ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡΠ»Π°Π΄ΠΊΠΈ R. Π Π°Π±ΠΎΡΠ° Ρ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΡΠ΄Π½ΠΈΡΡ ΠΎΡΠΎΠ·Π½Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π² Π±ΠΎΠ»ΡΡΠΈΡ , ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , Π½ΠΎ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΌΠ°Π»ΠΎΠ³ΠΎ.
3. ΠΡΠ»Π°Π΄ΠΊΠ° Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·:
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ½Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ.ΠΠ°Ρ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»ΠΈΠ½Π½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ. Π ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΊΠΎΠ΄ Π½Π° ΡΡΠ°ΠΏΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ΄Π΅Ρ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΊΠΎΠ΄.
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ f () , ΠΈ ΠΎΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Y <- g (x, 8)
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΡ (g).ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΈ g () ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ g (). ΠΡΠ»ΠΈ g () Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠ·Π²Π°ΡΡ debug (g).
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ Π²Π΅ΠΊΡΠΎΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ R
4. ΠΠ°ΡΠΈΡΠ° ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ x Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, ΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΡ ΡΡΡΠΎΠΊΡ:
Stopifnot (x> 0)
ΠΡΠ»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ x ΡΠ°Π²Π½ΡΠΌ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, -3, Π²ΡΠ·ΠΎΠ² stopifnot () ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΡΠΎΠΌΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ:
ΠΡΠΈΠ±ΠΊΠ°: x> 0 ΠΠ ΠΠ‘Π’ΠΠΠ
R Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² R:
.
1.ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ()
ΠΡΠ»ΠΈ Π½Π°Ρ ΠΊΠΎΠ΄ ΡΠΆΠ΅ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π» ΠΊΡΠ°Ρ , ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π½Π°ΡΡ, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΡΡΠΎΠΊΠ° Ρ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ traceback (). ΠΡΠΎ (ΠΈΠ½ΠΎΠ³Π΄Π°) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΡΠΎΠ½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ R Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. Π‘ΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ traceback (), ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°. Π€ΡΠ½ΠΊΡΠΈΡ traceback () ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Π²ΡΠ·Π²Π°Π½Ρ Π΄ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.3
}
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°:
ΠΡΡ ΠΎΠ΄:
2. ΠΎΡΠ»Π°Π΄ΠΊΠ° ()
Π€ΡΠ½ΠΊΡΠΈΡ debug () Π² R ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΡΠΎΠΊΠ° Π·Π° ΡΡΡΠΎΠΊΠΎΠΉ. Π Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π½Π°Π±ΡΠ°ΡΡ Β«cΒ», ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΠΊΠΎΠ΄Π°. traceback () Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π½Π°ΠΌ, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ.2
ΠΏΠΎΠ»ΡΡΠΈΡΡ <- ΡΡΠΌΠΌΠ° (sqr)
ΠΏΠΎΠ»ΡΡΠΈΡΡ
}
set.seed (100)
val <- rnorm (100)
Π²Π΅ΡΠ΅Π»ΡΠ΅ (1, val)
#Author DataFlair
ΠΡΡ ΠΎΠ΄:
> # ΠΠ²ΡΠΎΡ DataFlair > ΠΎΡΠ»Π°Π΄ΠΊΠ° (Π²Π΅ΡΠ΅Π»ΠΎ) > Π²Π΅ΡΠ΅Π»ΡΠ΅ (1, val)
ΠΡΡ ΠΎΠ΄:
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Β«ΠΠ±Π·ΠΎΡ [1]>Β», Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅Π»Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ:
- ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ n Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ;
- ΠΠ°Π±ΡΠ°Π² Q, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΉΡΠΈ ΠΈΠ· ΠΎΡΠ»Π°Π΄ΠΊΠΈ;
- ΠΠ²ΠΎΠ΄ Β«Π³Π΄Π΅Β» ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π³Π΄Π΅ Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ;
- ΠΠ°Π±ΡΠ°Π² ls () , ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
ΠΠ²ΠΎΠ΄ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ°ΡΠΈ (<ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°>) ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Π½Π°ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ n, c ΠΈΠ»ΠΈ Q, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ print () , ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ½Π°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π² R
3. Π±ΡΠ°ΡΠ·Π΅Ρ ()
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R browser () ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠΈΡ Π΅Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ, Π½ΠΎ Ρ
ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅, ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ.3
}
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°:
ΠΡΡ ΠΎΠ΄:
4. ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ()
ΠΡΠ·ΠΎΠ² trace () Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΡΠ°Π²Π»ΡΡΡ Π±ΠΈΡΡ ΠΊΠΎΠ΄Π° Π² ΡΡΠ½ΠΊΡΠΈΡ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R trace () Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π΅Π½ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ debug ().
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
#Author DataFlair f <-ΡΡΠ½ΠΊΡΠΈΡ (x) { Π³ <-x-g (Ρ ) Ρ } g <-ΡΡΠ½ΠΊΡΠΈΡ (y) { Π³ <-Ρ * Ρ (Ρ) Ρ } h <-ΡΡΠ½ΠΊΡΠΈΡ (z) { Π³ <-log (Π³) Π΅ΡΠ»ΠΈ (r <10) Π³ ^ 2 Π΅ΡΠ΅ Π³ ^ 3 }
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°:
Π ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π½Π°Π±ΠΈΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
> ΠΊΠ°ΠΊ.ΡΠΏΠΈΡΠΎΠΊ (ΡΠ΅Π»ΠΎ (h)) > trace ("h", ΡΠΈΡΠ°ΡΠ° (if (is.nan (r)) {browser ()}), at = 3, print = FALSE) > f (1) > f (-1) ΠΠ±Π·ΠΎΡ [1]> n ΠΠ±Π·ΠΎΡ [2]> ls () ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅: Π ΠΆΡΡΠ½Π°Π»Π΅ (z): ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ NaN ΠΠ±Π·ΠΎΡ [2]> r ΠΠ±Π·ΠΎΡ [2]> z ΠΠ±Π·ΠΎΡ [2]> trace ("h", ΡΠΈΡΠ°ΡΠ° (if (z <0) {z <-1}), at = 2, print = FALSE) ΠΠ±Π·ΠΎΡ [2]> f (-1)
ΠΡΡ ΠΎΠ΄:
5. Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ()
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, recovery () ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ.
ΠΠ°Π±ΡΠ°Π² ΡΠΈΡΠ»ΠΎ Π² Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅, ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌΡΡ Π² ΡΡΠ΅Π΄Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
- ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ recovery () ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΉ () (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΡΠΈΠΉ (error = recovery)).
- ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΡΠΊΠ΅ ΡΠ±ΠΎΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄Ρ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ f (), g () ΠΈ h () Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
> trace ("h", ΡΠΈΡΠ°ΡΠ° (if (is.nan (r)) {Recovery ()}), at = 3, print = FALSE) > f (-1) ΠΡΠ±ΠΎΡ: 1 ΠΠ±Π·ΠΎΡ [1]> n ΠΡΠ±ΠΎΡ: n ΠΡΠ±ΠΎΡ: 2 ΠΠ±Π·ΠΎΡ [3]> n ΠΡΠ±ΠΎΡ: n ΠΡΠ±ΠΎΡ: 3 ΠΠ±Π·ΠΎΡ [5]> n ΠΡΠ±ΠΎΡ: n ΠΡΠ±ΠΎΡ: 0 ΠΠ±Π·ΠΎΡ [4]>
ΠΡΡ ΠΎΠ΄:
ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΡΠΈΡΠ»Π° Π² Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠ΅ΠΊΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌΡΡ Π² ΡΡΠ΅Π΄Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
ΠΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ R
ΠΡΠ»Π°Π΄ΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² R
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ R. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΎΡΠΈΠ±ΠΊΠ° = Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅), Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ n.
- ΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈ ΡΠ΅Π±Π΅ ΠΊΠΎΠΏΠΈΡ ΠΊΠΎΠ΄Π° ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ R Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π½ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ.ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ.
- ΠΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ΡΠ΅Π½Ρ, Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ devtools ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ install (), load_all () , ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² R
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ - ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π°Π½ΠΎΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΡΡΠ°ΡΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π ΠΎΠ±ΡΠ΅ΠΌ, ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΊΠΎΠΉ.R ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ try () ΠΈ trycatch () .
Π€ΡΠ½ΠΊΡΠΈΡ try () ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ trycatch (), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, trycatch () Π΄Π°Π΅Ρ Π²Π°ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
#Author DataFlair f <- ΡΡΠ½ΠΊΡΠΈΡ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) { if (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ == 0) { stop (Β«ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ 0Β») } else { ΠΏΠ΅ΡΠ°ΡΡ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) }
ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°:
> inp <- sapply (0: 3, ΡΡΠ½ΠΊΡΠΈΡ (i) f (i)) > Inp <- sapply (0: 3, ΡΡΠ½ΠΊΡΠΈΡ (i) try (f (i))) > Inp <- sapply (0: 3, ΡΡΠ½ΠΊΡΠΈΡ (i) tryCatch (f (i), error = function (e) NA))
ΠΡΡ ΠΎΠ΄:
Π‘Π²ΠΎΠ΄ΠΊΠ°
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ R ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² R Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ.ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·ΡΡΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² R-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΡΠ½ΠΊΡΠΈΡΡ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ R
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΎΠΉ Π² ββR, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π½Π°ΠΌΠΈ. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΡ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Π°ΠΌ.
.ΠΡΠ»Π°Π΄ΠΊΠ°
- ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ browser () R
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
ΠΠ°Π³ΡΡΠ·ΠΊΠ°β¦
- ΠΠ²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ
Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ
.