Можно ли в подменю «Шаг без входа в подпрограмму» выполнять программу с нужной строки, а не а не с начала программы?

Здравствуйте. Можно ли в подменю «Шаг без входа в подпрограмму» выполнять программу с нужной строки, а не а не с начала программы?

Спасибо. Нашёл. “Идти к курсору”.

я вот тоже хотел бы узнать как работают те кнопочки… и что они вообще обозначают, название ничего не даёт

F8 шаг без входа в процедуру, F7 шаг с входом в процедуру, то есть курсор отладки зайдет в процедуру

Поскольку, судя по вопросу, вы в программировании совсем еще новичок, для начала замечу, что чтобы при отладке быстро отключить ненужные (и некритичные для работы) куски программы, их просто превращают в комментарии ( // строка, (* блок *) или { блок } ).

А начинать выполнение программы “с нужной строки, а не с начала” (т.е. выполнить snippet, произвольный кусок кода) в PascalABC.NET нельзя. Хотя, полагаю, это было бы теоретически возможно реализовать, но с массой ограничений (что все равно в некоторых сценариях обучения/использования было бы весьма даже удобно, как сделано напр., в LINQPad с C# / F# и VB.NET). Но обычно такое принято только в скриптовых языках с динамической типизацией (правда тоже с ограничениями, но гораздо меньшими). Например, так можно делать в интерактивной консоли Python, Lua, JavaScript и им подобных.

Для структурированного Паскаля со строгой статической типизацией, коим далеким, хотя и весьма “фривольным” и продвинутым, наследником также является диалект PascalABC.NET, такой подход традиционно считается идеологически чуждым (и в классическом варианте принципиально невозможным), поэтому его код всегда перед запуском компилируется полностью (в данном с случае не сразу в команды процессора, а сначала в промежуточное представление языка виртуальной машины .NET, а затем уже, постепенно – в машинный код) и всегда выполняется с самого начала. Хотя существуют и интерпретируемые скриптовые реализации, напр., Pascal Script, но они сильно ограничены функционально и предназначены обычно только для реализации макросов внутри приложений, созданных с помощью других, более полноценных языков. Даже в старой, интерпретируемой, реализации PascalABC нельзя было выполнять произвольные куски кода.

Что касается пункта меню “Идти к курсору”, то это не самый удачный перевод классической возможности работы под отладчиком “Run to cursor” (Выполнить до строки, где стоит курсор), т.е. начать с начала и остановиться, когда дойдем до места в исполнимом коде, который связан с требуемой строкой программы. В этот момент можно проверить текущие значения любых видимых переменных (либо через Intellisense, т.е. просто наводя на них курсор, либо выделив и добавив их через контекстное меню “Добавить выражение” – они появяться внизу во вкладке “Просмотр выражений”). Добавлять так для анализа можно не только переменные, но и целые выражения с операторами, константами и стандартными функциями).

Остановив таким образом работу своей программы под управлением отладчика, затем можно либо просто по F9 продолжить её выполнение до конца (или же до следующей точки останова, если они были предварительно заданы), либо выполнять её пошагово, но уже в двух подвариантах: без входа в подпрограмму, что означает выполнить сразу всю текущую строку и перейти на следующую, или со входом в подпрограмму, что означает, что если в текущей строке есть обращение к паскалевской функции или процедуре, то отладчик перейдет прямо туда на её первую исполнимую строчку (если, конечно, ему будет доступен исходный код этой подпрограммы в системе). Там, в свою очередь, можно углубиться еще дальше и “войти в подпрограмму” при необходимости. Далее можно сразу выйти на один уровень вверх с помощью команды отладчика “Шаг с выходом из подпрограммы” и т.д. Кроме того, в открытых файлах можно заранее установить принудительные точки останова, кликнув в редакторе на поле левее начала текста (снимаются также) – эти строки выделятся темно-красным фоном.

К сожалению, некоторые команды отладчика доступны только через верхнее меню или горячие клавиши, их нет на панели инструментов. Даже в контекстном меню нет ничего, кроме “Выполнить” и “Добавить выражение”. Также имейте в виду, что исходный код на С# (или промежуточный CIL-ассемблер) под этим отладчиком вы никогда не увидите, только свои родные исходники на Паскале и стандартные библиотеки дистрибутива (все, что находится в c:\Program Files (x86)\PascalABC.NET\LibSource\).

В завершении хочу заметить, что наличие интегрированного отладчика – вещь весьма полезная и нужная, но, увы, в данной среде отладчик весьма ограниченный и очень глючный (или его интеграция такая кривая) – среда под ним иногда зависает, иногда просто крашится на ровном месте, часто “залипают” или, наоборот, не срабатывают точки останова и т.п. Но в учебных целях вполне сгодится.

1 лайк
  1. если вы обращаетесь к человеку который только начинает програмить то можно было и постараться не юзать заумные слова которые и я понимаю только догадываясь или недолго подумав и вспомнив
  2. я не так и мало програмлю но не раз не использовал шаг без входа и со входом в программу, ибо описания им нормального нигде не найти

@Sun_Serega Молодой человек, в следующий раз, получив вежливый, грамотный и подробный ответ, просто скажите спасибо тому, кто не пожалел своего времени и попытался просветить вас, вместо того чтобы называть все непонятные вам термины “юзанием заумных слов”. Что, с одной стороны, только подтверждает то, что вы новичок и не имеете хоть сколь-нибудь систематизированных знаний в этой области (что само по себе не грех, но стремится к хорошим знаниям то надо), а с другой – может быть воспринято как публичное проявление неуважения к тому, кто явно старше, опытнее и образованнее вас.

Это все-таки форум мехмата федерального ВУЗа, а не кружок для детей индиго, чтобы мне в ответе опускаться совсем уж на уровень детского сада. Если вам было что-то непонятно, просто вежливо переспросите, а еще лучше – загуглите и почитайте подробнее, вам же будет потом легче, если уж всерьез выбрали программирование как свою будущую профессию… Не обижайтесь!

P.S. Вот, кстати, отличная статья про типизацию (просто, коротко и с юмором) https://habrahabr.ru/post/161205/

2 лайка

ну вот к примеру:

если вы действительно обращались к тому кто только начинает програмить и не знает что паскаль создаёт ещё несколько кодов на разных языках во время компиляции - то его эти строчки только запутают[quote=“spectatorBH, post:5, topic:1702”] Поскольку, судя по вопросу, вы в программировании совсем еще новичок [/quote]

кроме того не путайте к кому обращаетесь, потому что послядняя цитата из слов к borvm

то что вы написали было действительно неплохо, но если делаете что то на высшем уровне - надо сделать всё идеально, а не так что написать всё вежливо и грамотно забыть про то как понятно будет тому кто читает

@Sun_Serega: Если Вы начинающий, то не нужно засорять речь жаргонными словами (“програмить”, “юзать”). Это допустимо в профессиональном сообществе, где все уже имеют определенный уровень знаний и навыков - тогда жаргон плавно перетекает в арго. А когда приходит “птенец” (я не имею в виду кого-либо персонально) и начинает важно рассуждать, как у него мамка убилась, камень глючит, винт посыпался и дров на видюху нет, кроме улыбок это ничего не вызывает. Равно как и рассуждения “крутого прогера” про “юзанье кодерских приблуд для суперской проги”.

жаргон можно использовать чтоб показать что крут, а можно чтоб улегчить произношение и написание, те кто имеют опыт под 30 лет разумеется не будут его юзать потому что это только усложнит им жизнь ибо переучиваться, но не надо говорить как будто их используют только школота чтоб казаться взрослее…

Вы либо невнимательны, либо нелогичны. Либо и то, и другое одновременно. Читаете текст и воспринимаете не написанное, а лишь то, что укладывается в Ваше мировоззрение, подменяя написанное собственным, выгодным в данное время пониманием. Подобным людям что-то объяснять - пустое времяпровождение.

не замечал.

@ibond Если быть точнее, то не совсем наглухо зависает, а впадает в какое-то нестабильное состояние, при котором она перестаёт нормально работать, например, вдруг перестают работать все точки останова (хотя остаются подсвеченными), при этом старые больше не снимаются, а новые не устанавливаются, или же рабочий код перестаёт нормально компилироваться (выдает какую-то нелепую ошибку), или просто перестаёт запускаться (на тулбаре остаётся активной кнопка “стоп”, а “запуск” недоступен). Перезагрузишь среду – все опять ОК. Разные “фокусы” уже видел, но пока так и не смог определить четкий паттерн, тем более что я пользуюсь дебаггером довольно редко. Но почти каждый раз, когда пользуюсь, что-нибудь странное да возникает, и вроде бы все на ровном месте. Если поймаю “за руку” – сообщу. Но пока точно могу сказать, что брейкпойнты чаще всего глючат. Или это только у меня так все “заколдовано”? Win7 x64 + .NET 4.5, 4.6, 4.7 (runtime + SDK)

У меня под WinXP 32 bit тоже весьма часто точки прерывания проскакивают.