У чым розніца паміж камандай hbreak і break ў gdb?


адказ 1:

Ёсць два асноўныя спосабы ўсталёўваць выніковыя кропкі ў кодзе.

Першы, больш распаўсюджаны тып - гэта "праграмная кропка перапынку". Калі вы патрабуеце адладчыка ўсталяваць кропку перапынку для пэўнай інструкцыі, першая інструкцыя па зборцы, звязаная з гэтай інструкцыяй, знойдзена. Затым гэтая інструкцыя замяняецца іншай спецыяльнай інструкцыяй, якая, пры выкананні, прыводзіць да таго, што кантроль будзе перанесены з адладчыка (праграма для адладкі) у адладчык.

Другі тып - гэта "апаратная кропка перапынку". Для гэтага патрэбна больш спецыялізаваная апаратная падтрымка. У апаратных пунктах перарыву адладчык наладжвае працэсар для перадачы кіравання адладчыку, калі інструкцыя выконваецца па пэўным адрасе. Звярніце ўвагу, што гэта азначае, што нам не трэба мяняць інструкцыю, трэба проста ведаць адрас.

Каманда перапынку Gdb ўсталёўвае кропку перапынку, але не ўсталёўвае тып пункту пералому, які ўсталёўваецца. У адрозненне ад гэтага, "Hbreak" заўсёды выкарыстоўвае апаратную кропку ўзлому. Такім чынам, вы сапраўды павінны заўсёды выкарыстоўваць перапынак, калі вы не ведаеце, што вам патрэбны апаратны пункт прарыву, і вы таксама ведаеце, што gdb не можа самастойна разабрацца ў гэтым.

Калі вам спатрэбіцца? Для большасці людзей адказ, напэўна, ніколі. Аднак ёсць выключэнне. Мы толькі што сказалі, што выкарыстанне апаратнага пункту азначае, што код не трэба мяняць. Калі па нейкай прычыне код проста немагчыма змяніць - напрыклад, калі ён знаходзіцца ў памяці, даступнай толькі для чытання - апаратная кропка разбурэння ў значнай ступені ваша адзіная магчымасць.

Звярніце ўвагу, што існуе значна больш карысная канцэпцыя, якая называецца пункту гледжання апаратнага кантролю. Але яны не ўсталёўваюцца з хрупам. Больш падобна на перапынак, вы павінны выкарыстоўваць каманду watch, і gdb вырашае, які тып агляду варта выкарыстоўваць, абсталяванне ці праграмнае забеспячэнне.