Подпишитесь на наши новости
Вернуться к началу с статьи up
 

ОТЛА́ДКА ПРОГРА́ММЫ

  • рубрика
  • родственные статьи
  • image description

    В книжной версии

    Том 24. Москва, 2014, стр. 661

  • image description

    Скопировать библиографическую ссылку:




Авторы: В. П. Котляров

ОТЛА́ДКА ПРОГРА́ММЫ, про­цесс по­ис­ка, ло­ка­ли­за­ции и ис­прав­ле­ния оши­бок в ком­пь­ю­тер­ной про­грам­ме. На всех эта­пах раз­ра­бот­ки про­грамм­но­го обес­пе­че­ния О. п. тес­но свя­за­на с тес­ти­ро­ва­ни­ем про­грамм. В про­цес­се тес­ти­ро­ва­ния (напр., с ис­поль­зо­ва­ни­ем спец. по­доб­ран­ных на­бо­ров ис­ход­ных дан­ных) мо­гут дос­ти­гать­ся та­кие со­стоя­ния про­грам­мы, в ко­то­рых фик­си­ру­ют­ся рас­хо­ж­де­ния с за­дан­ны­ми спе­ци­фи­ка­ция­ми. О. п. обес­пе­чи­ва­ет по­иск при­чин этих рас­хо­ж­де­ний (ло­ка­ли­за­цию оши­бок) и со­от­вет­ст­вую­щую кор­рек­ти­ров­ку про­грам­мы. В про­цес­се транс­ля­ции (см. Транс­ля­тор) и вы­пол­не­ния про­грам­мы (ко­то­рая реа­ли­зу­ет не­ко­то­рую функ­цию) ком­пь­ю­тер, ис­поль­зуя свои ап­па­рат­но-про­грамм­ные ре­сур­сы, до­оп­ре­де­ля­ет (напр., вы­зы­ва­ет из биб­лио­те­ки стан­дарт­ные под­про­грам­мы) час­тич­но оп­ре­де­лён­ную про­грам­мой функ­цию до т. н. то­таль­но оп­ре­де­лён­ной. Т. о. су­дить о пра­виль­но­сти или не­пра­виль­но­сти ре­зуль­та­тов вы­пол­не­ния про­грам­мы мож­но толь­ко срав­ни­вая за­дан­ную спе­ци­фи­ка­цию функ­ции с ре­зуль­та­та­ми её вы­чис­ле­ний, что и осу­ще­ст­в­ля­ет­ся в про­цес­сах тес­ти­ро­ва­ния и от­лад­ки.

Методы отладки программ

Ме­то­ды О. п. для по­сле­до­ва­тель­ных и па­рал­лель­ных вы­чис­лит. про­цес­сов су­ще­ст­вен­но раз­ли­ча­ют­ся. Для по­сле­до­ва­тель­ных про­цес­сов ха­рак­тер­на по­вто­ряе­мость ре­зуль­та­тов при вы­пол­не­нии про­грам­мы с од­ни­ми и те­ми же ис­ход­ны­ми дан­ны­ми. По­это­му для от­сле­жи­ва­ния и кон­тро­ля со­стоя­ний вы­чис­лит. про­цес­са при их от­лад­ке при­ме­ня­ют О. п.: руч­ную, по­ша­го­вую, О. п. по пред­ва­ри­тель­но за­дан­ным т. н. точ­кам ос­та­но­ва и др. При руч­ной О. п. (desk checking) ана­лиз со­стоя­ния вы­чис­лит. про­цес­са (ис­поль­зуя ис­ход­ные дан­ные, при ра­бо­те с ко­то­ры­ми бы­ла об­на­ру­же­на ошиб­ка) вы­пол­ня­ет не­по­сред­ст­вен­но раз­ра­бот­чик на ос­но­ва­нии сво­его опы­та, зна­ний и ин­туи­ции. В про­цес­се по­ша­го­вой О. п. (single-step operation) со­стоя­ние вы­чис­лит. про­цес­са ана­ли­зи­ру­ют по­сле вы­пол­не­ния ка­ж­до­го опе­ра­то­ра (ко­ман­ды) про­грам­мы. О. п. по пред­ва­ри­тель­но за­дан­ным точ­кам ос­та­но­ва про­грам­мы (break­points – мет­кам опе­ра­то­ров) по­зво­ля­ет по­сле вы­пол­не­ния за­дан­но­го за­ра­нее мно­же­ст­ва опе­ра­то­ров при­ос­та­но­вить на вре­мя вы­пол­не­ние про­грам­мы, напр. для про­смот­ра со­стоя­ний вы­бран­ных па­ра­мет­ров. Про­во­дят так­же ана­лиз за­фик­си­ро­ван­ных со­стоя­ний вы­де­лен­ных об­лас­тей па­мя­ти (dump) от­ла­жи­вае­мо­го про­цес­са и его про­грамм­но-ап­па­рат­но­го ок­ру­же­ния. При О. п. об­рат­но­го вы­пол­не­ния (re­versible execution) осу­ще­ст­в­ля­ют ана­лиз вы­чис­лит. про­цес­са на­чи­ная с со­стоя­ния, в ко­то­ром за­фик­си­ро­ва­на ошиб­ка, и за­кан­чи­вая со­стоя­ни­ем, иден­ти­фи­ци­руе­мым как при­чи­на ошиб­ки. Трас­си­ров­ка (tracing) пре­дос­тав­ля­ет для ана­ли­за ин­фор­ма­цию о по­ве­де­нии про­грам­мы, ко­то­рая со­дер­жит в т. ч. дан­ные о по­то­ке управ­ле­ния, т. е. по­сле­до­ва­тель­но­сти со­бы­тий (пу­тей) в про­цес­се вы­пол­не­ния про­грам­мы. Ин­фор­ма­ция, не­об­хо­ди­мая для ана­ли­за О. п., как пра­ви­ло, со­би­ра­ет­ся ав­то­ма­ти­че­ски в про­цес­се тес­ти­рова­ния О. п. и со­хра­ня­ет­ся в фай­ле спец. фор­ма­та (Log – жур­нал). Со­став и струк­ту­ра со­хра­няе­мой в жур­на­ле ин­фор­ма­ции оп­ре­де­ля­ет­ся раз­ра­бот­чи­ком за­ра­нее. Для сбо­ра ин­фор­ма­ции об О. п. час­то при­ме­ня­ют т. н. ин­ст­ру­мен­та­цию от­ла­жи­вае­мой про­грам­мы, т. е. пре­об­ра­зо­ва­ние ис­ход­ной про­грам­мы в функ­цио­наль­но эк­ви­ва­лент­ную, ко­то­рая в за­дан­ных точ­ках рас­ши­ре­на опе­ра­то­ра­ми, фик­си­рую­щи­ми вы­бран­ное под­мно­же­ст­во со­стоя­ний вы­чис­лит. про­цес­са. Ин­ст­ру­мен­та­ция про­грам­мы не на­ру­ша­ет ре­зуль­та­тов вы­чис­ле­ний от­ла­жи­вае­мо­го про­цес­са, но влия­ет на вре­мя его вы­пол­не­ния. Для О. п. по­сле­до­ват. про­цес­сов с не­де­тер­ми­ни­ро­ван­ным ок­ру­же­ни­ем сле­ду­ет соз­да­вать спец. ус­ло­вия (напр., спец. мно­же­ст­ва тес­тов – тес­то­вые на­бо­ры), по­зво­ляю­щие учи­ты­вать все ва­ри­ан­ты не­де­тер­ми­ни­ро­ван­ных вза­и­мо­дей­ст­вий от­ла­жи­вае­мой про­грам­мы с про­грамм­но-ап­па­рат­ным ок­ру­же­ни­ем.

При О. п. па­рал­лель­ных про­цес­сов сле­ду­ет учи­ты­вать, что по­ря­док вы­пол­не­ния опе­ра­то­ров (ко­манд) ка­ж­до­го из про­цес­сов при па­рал­лель­ных вы­чис­ле­ни­ях со­хра­ня­ет­ся, од­на­ко по­ря­док вы­пол­не­ния опе­ра­то­ров раз­ных про­цес­сов не­де­тер­ми­ни­ро­ван (свой­ст­во ин­тер­ли­вин­га), что мо­жет при­вес­ти к по­лу­че­нию раз­ных ре­зуль­та­тов вы­пол­не­ния па­рал­лель­ных про­цес­сов (на од­ном и том же на­бо­ре дан­ных). Ес­ли па­рал­лель­ные про­цес­сы не­за­ви­си­мы, т. е. со­вме­ст­но не ис­поль­зу­ют об­щих пе­ре­мен­ных и иных об­щих ре­сур­сов, а так­же не об­ме­ни­ва­ют­ся со­об­ще­ния­ми, то их от­лад­ка мо­жет быть све­де­на к от­лад­ке не­сколь­ких па­рал­лель­ных про­цес­сов. Ес­ли вы­ше­пе­ре­чис­лен­ные ус­ло­вия не вы­пол­ня­ют­ся, то в про­цес­се О. п. не­об­хо­ди­мо ло­ка­ли­зо­вать и про­ана­ли­зи­ро­вать точ­ки (об­лас­ти) па­рал­лель­ных вы­чис­лит. про­цес­сов, в ко­то­рых со­сре­до­то­че­но их взаи­мо­влия­ние; ча­ще все­го в этих точ­ках про­цесс вы­пол­не­ния опе­ра­то­ров раз­ных про­цес­сов не­об­хо­ди­мо упо­ря­до­чить (син­хро­ни­зо­вать). Т. е. в про­грам­мы про­цес­сов сле­ду­ет вне­сти та­кие из­ме­не­ния, ко­то­рые га­ран­ти­ру­ют при ис­пол­не­нии про­грамм не­за­ви­си­мый (ин­ва­ри­ант­ный) от ин­тер­ли­вин­га ре­зуль­тат вы­чис­ле­ний.

При от­лад­ке па­рал­лель­ных про­грамм обыч­но при­ме­ня­ют сле­дую­щие ме­то­ды. Ана­лиз вы­пол­не­ния па­рал­лель­ных про­цес­сов на пред­мет воз­ник­но­ве­ния не­до­пус­ти­мой си­туа­ции – од­но­вре­мен­но­го дос­ту­па к об­ще­му ре­сур­су не­сколь­ких про­цес­сов, и обес­пе­че­ние ус­ло­вий, ис­клю­чаю­щих дан­ную си­туа­цию. Ло­ка­ли­за­ция то­чек из­ме­не­ния об­ще­го ре­сур­са од­ним из па­рал­лель­ных про­цес­сов, ана­лиз влия­ния этих из­ме­не­ний на др. па­рал­лель­ные про­цес­сы, а так­же обес­пе­че­ние син­хро­ни­за­ции про­цес­сов в ло­ка­ли­зо­ван­ных точ­ках. Ло­ка­ли­за­ция и ана­лиз то­чек не­де­тер­ми­ни­ро­ван­но­го взаи­мо­дей­ст­вия па­рал­лель­ных про­цес­сов и соз­да­ние спец. ус­ло­вий (напр., спец. тес­то­вые на­бо­ры), по­зво­ляю­щих учи­ты­вать все ва­ри­ан­ты не­де­тер­ми­ни­ро­ван­ных взаи­мо­дей­ст­вий. Ре­зуль­та­том кор­рек­ти­ров­ки про­грам­мы в про­цес­се от­лад­ки мо­жет яв­лять­ся не толь­ко ис­прав­ле­ние най­ден­ных оши­бок, но и вне­се­ние в про­грам­му но­вых оши­бок (т. н. ин­ду­ци­ро­ван­ных оши­бок), что при­во­дит к по­втор­но­му цик­лу тес­ти­ро­ва­ния и от­лад­ке про­грамм.

Инструменты для отладки программ

Раз­ра­бо­та­ны спец. про­грамм­ные сред­ст­ва (ин­ст­ру­мен­ты) для про­ве­де­ния О. п., сре­ди ко­то­рых наи­бо­лее по­пу­ляр­ны т. н. от­лад­чи­ки. Они име­ют удоб­ный поль­зо­ва­тель­ский ин­тер­фейс, по­зво­ля­ют про­во­дить О. п. по­ша­го­во и с пред­ва­ри­тель­но за­дан­ны­ми (за­ка­зан­ны­ми) точ­ка­ми ос­та­но­ва, про­смат­ри­вать и из­ме­нять со­стоя­ние вы­де­лен­ной об­лас­ти па­мя­ти, кон­тро­ли­ро­вать разл. ин­фор­ма­цию на эта­пе вы­пол­не­ния. От­лад­чи­ки час­то ин­тег­ри­ро­ва­ны в сис­те­му раз­ра­бот­ки ко­да про­грамм (напр., Eclipse CDT, MS Visual Studio). Ши­ро­ко ис­поль­зу­ют­ся ин­ст­ру­мен­ты ди­на­мич. и ста­тич. ана­ли­за. Ди­на­ми­че­ские ана­ли­за­то­ры (напр., Val­grind) кон­тро­ли­ру­ют вре­мя вы­пол­не­ния уча­ст­ков ко­да про­грам­мы, на­хо­дят точ­ки (об­лас­ти) не­кор­рект­ной ра­бо­ты с па­мя­тью и объ­ек­та­ми опе­ра­ци­он­ной сис­те­мы и др. Ста­ти­че­ские ана­ли­за­то­ры (напр., Kloc­work) вы­яв­ля­ют ошиб­ки вы­хо­да (об­ра­ще­ния) за гра­ни­цы мас­си­вов, по­тен­ци­аль­ные про­бле­мы безо­пас­но­сти, т. н. утеч­ки па­мя­ти, не­кор­рект­ность ис­поль­зо­ва­ния сис­тем­ных ре­сур­сов и др. По­пу­ляр­ны так­же ска­не­ры ин­тер­фей­сов (напр., Wire­shark, по­зво­ляю­щий осу­ще­ст­в­лять се­те­вой мо­ни­то­ринг). Од­на­ко для ана­ли­за ти­пич­ных оши­бок па­рал­лель­ных или мно­го­по­точ­ных при­ло­же­ний, напр. т. н. гон­ки дан­ных, ту­пи­ков (вза­им­ной бло­ки­ров­ки про­цес­сов), по­то­ков в со­стоя­нии ожи­да­ния, по­те­рян­ных сиг­на­лов, тре­бу­ют­ся спе­циа­ли­зир. сред­ст­ва от­лад­ки па­рал­лель­ных при­ло­же­ний (напр., Intel Thre­ad Checker). Сле­ду­ет от­ме­тить, что наи­бо­лее эф­фек­тив­но ком­плекс­ное при­ме­не­ние ин­ст­ру­мен­тов О. п., по­сколь­ку кон­крет­ные про­грамм­ные сред­ст­ва обес­пе­чи­ва­ют по­иск лишь оп­ре­де­лён­ных ти­пов оши­бок.

Лит.: Beizer B. Software testing techniques. 2nd ed. N. Y., 1990; Ин­ст­ру­мен­ты па­рал­лель­но­го про­грам­ми­ро­ва­ния в сис­те­мах с об­щей па­мя­тью. 2-е изд. М., 2010.

Вернуться к началу