Ошибка в вычислениях адресов у GCC ?

Thu, 3 Mar 2005 16:53:45 +0000 (UTC) Leha Bishletov wrote to Harry Zhurov:

LB> В продолжении темы о Visual SlickEdit: Как его научить распознавать LB> ошибки от не знакомого ему компилятора? В Help-e на эту тему написано LB> очень мало, а то, что написано, не работает.

Вполне достаточно написано. Цитата из раздела "Building":

=========Beginning of the citation============== Adding Support for Other Error Message Formats

Visual SlickEdit supports many error message formats. If the error message format that is output from the compiler is not supported, you can add it if the compiler outputs at least the file name, line number, and the message on the same line.

For example, if the compiler error message format is as follows:

linenum, filename: message

Here are the steps to add support for the above error message format:

  1. Define a SlickEdit regular expression which matches the above. The first character of the regular expression must be the '^' character, which matches the beginning of a line.

The regular expression ^:i, :p\:?*$ will match this message.

  1. Place curly braces around the file name, line number, column number, and message parts of the regular expression to signify the tagged expressions. In this example, there is no column number so nothing is required for that part.

The resulting regular expression is: ^{:i}, {:p}\:{?*}$

  1. Number the tagged expressions so that the filename is tagged expression 0, line number is tagged expression 1, column number is tagged expression 2, and the message is tagged expression 3.

The resulting regular expression is: ^{#1:i}, {#0:p}\:{#3?*}$

  1. Use the gui_set_var command (Macro, Set Macro Variable) to set the macro variable def_error_re2 to the value of this regular expression. You can replace the current contents.

  1. Load the error.e macro module (Macro, Load Module) so the error searching macro can re initialize. =========The end of the citation================

Т.е. в сухом остатке надо просто задать значение макропеременной def_error_re2 регулярным выражением, которое соответствует формату выдачи ошибок/предупреждений используемого компилятора. Для IAR'овских компиляторов это выражение имеет следующий вид:

^\"{#0:p}\"\,{#1:i}:b{#3?*}$

И оно, кстати, работает и с avr-gcc, и с CCS'овским компилятором.

Reply to
Harry Zhurov
Loading thread data ...

Привет, Harry! Вы писали to Leha Bishletov on Fri, 4 Mar 2005 05:48:49 +0000 (UTC):

LB>> В продолжении темы о Visual SlickEdit: Как его научить LB>> распознавать ошибки от не знакомого ему компилятора? В Help-e на LB>> эту тему написано очень мало, а то, что написано, не работает. HZ> Вполне достаточно написано. Цитата из раздела "Building": [... ] HZ> Для IAR'овских компиляторов это выражение имеет следующий вид: HZ> ^\"{#0:p}\"\,{#1:i}:b{#3?*}$

Действительно работает :) Что-то видимо у меня не так с написанием регулярных выражений. Правда я пробовал составлять без :p :i и т.п., наверное что-то напутал. Спасибо за подсказку. Вот еще вопрос: есть ли у него такой режим, что пока набираешь имя переменной он автоматически показывает как ее можно продолжить, одно из наиболее вероятных продолжений, что-то нажимаешь и оно вводится, типа как VisualAssist для MS Studio?

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Reply to
Leha Bishletov

Sat, 5 Mar 2005 06:05:18 +0000 (UTC) Leha Bishletov wrote to Harry Zhurov:

[...]

LB> Вот еще вопрос: есть ли у него такой режим, что пока набираешь имя LB> переменной он автоматически показывает как ее можно продолжить, одно из LB> наиболее вероятных продолжений, что-то нажимаешь и оно вводится, типа LB> как VisualAssist для MS Studio?

Нет, afaik, именно такого нет. Там оно несколько по-другому реализовано, но, имхо, лучше, чем всплывающая подсказка (которая далеко не всегда "подсказывает" правильный вариант). Там сделано так: когда начинаешь набирать имя, можно нажать на Ctrl+Space (выполняется команда codehelp_complete), тогда:

1) если продолжение однозначно, то имя без лишних вопросов добивается до конца; 2) если есть неоднозначности, то имя добивается до первого символа разночтения и всплывает окошко с вариантами, где можно выбрать либо стрелками, либо продолжая вбивать буквы, сужать список (как в словаре Лингво :).
Reply to
Harry Zhurov

Привет Harry!

Суб Маp 05 2005 09:59, Harry Zhurov -> Leha Bishletov:

LB>> Вот еще вопрос: есть ли у него такой режим, что пока набираешь LB>> имя переменной он автоматически показывает как ее можно LB>> продолжить, одно из наиболее вероятных продолжений, что-то LB>> нажимаешь и оно вводится, типа как VisualAssist для MS Studio? HZ> Hет, afaik, именно такого нет. Там оно несколько по-другому HZ> реализовано, но, имхо, лучше, чем всплывающая подсказка (которая HZ> далеко не всегда "подсказывает" правильный вариант). Там сделано так: HZ> когда начинаешь набирать имя, можно нажать на Ctrl+Space (выполняется HZ> команда codehelp_complete), тогда: 1) если продолжение однозначно, то HZ> имя без лишних вопросов добивается до конца; 2) если есть HZ> неоднозначности, то имя добивается до первого символа разночтения и HZ> всплывает окошко с вариантами, где можно выбрать либо стрелками, либо HZ> продолжая вбивать буквы, сужать список (как в словаре Лингво :). А методы классов пpедлагать умеет?

Hа этом все, пока. Anton Abrosimov. ... Кто юзал мой логин и весь его выюзал?!

Reply to
Anton Abrosimov
Reply to
Anton Abrosimov

Mon Mar 07 2005 09:27, Alexey Gushin wrote to Leha Bishletov:

LB>> В продолжении темы о Visual SlickEdit: Как его научить распознавать LB>> ошибки от не знакомого ему компилятора? В Help-e на эту тему написано LB>> очень мало, а то, что написано, не работает.

AG> Я всегда пишу свою консольную прогу, которая принимает строки AG> из stdin или из файла и в известном для сликкера формате AG> ( например cl.exe ) направляет в stdout.

А регулярные выражения не проще написать? В крайнем случае через sed прогнать.

wbr, Andy

Reply to
Andy Mozzhevilov

Hello Leha.

03 Mar 05 19:53, Leha Bishletov wrote to Harry Zhurov:

LB> Привет, Harry! LB> Вы писали to Leha Bishletov on Wed, 16 Feb 2005 06:24:49 +0000 (UTC):

LB> В продолжении темы о Visual SlickEdit: Как его научить распознавать LB> ошибки от не знакомого ему компилятора? В Help-e на эту тему написано LB> очень мало, а то, что написано, не работает.

Я всегда пишу свою консольную прогу, которая принимает строки из stdin или из файла и в известном для сликкера формате ( например cl.exe ) направляет в stdout.

Alexey

Reply to
Alexey Gushin

Hello Harry.

04 Mar 05 08:48, you wrote to Leha Bishletov:

HZ> ошибок/предупреждений используемого компилятора. Для IAR'овских HZ> компиляторов это выражение имеет следующий вид:

HZ> ^\"{#0:p}\"\,{#1:i}:b{#3?*}$

Это частичное решение проблемы.

иногда IAR выдает на одну ошибку несколько строк. В этом случае тоже все красиво? Hадо склеивать строки в одну.

При успешной компиляции выдает несколько строк про размер данных и кода. При компиляции большого проекта это все плохо.

Я преобразую этот вывод в запись типа:

file.cpp code:1245 data:2048

Alexey

Reply to
Alexey Gushin

Hello Leha.

05 Mar 05 09:05, Leha Bishletov wrote to Harry Zhurov:

LB> Действительно работает :) Что-то видимо у меня не так с написанием LB> регулярных выражений. Правда я пробовал составлять без :p :i и т.п., LB> наверное что-то напутал. Спасибо за подсказку. LB> Вот еще вопрос: есть ли у него такой режим, что пока набираешь имя LB> переменной он автоматически показывает как ее можно продолжить, одно из LB> наиболее вероятных продолжений, что-то нажимаешь и оно вводится, типа LB> как VisualAssist для MS Studio?

Конечно есть. Только все файлы надо подключить к проекту.

"что-то" это <ctrl><пробел>

Alexey

Reply to
Alexey Gushin

Hello Andy.

07 Mar 05 08:37, you wrote to me:

AM> А регулярные выражения не проще написать? AM> В крайнем случае через sed прогнать.

Это как себе задачу поставить. Если только навигировать по ошибкам, то может быть.

Я обычно хочу достичь вывода об ошибках а-ля CL.

Писать парсилку на C++ иногда проще, чем составить регулярное выражение.

Alexey

Reply to
Alexey Gushin

Mon, 07 Mar 2005 09:32:00 +0300 Alexey Gushin wrote to Harry Zhurov:

AG> 04 Mar 05 08:48, you wrote to Leha Bishletov:

HZ>> ошибок/предупреждений используемого компилятора. Для IAR'овских HZ>> компиляторов это выражение имеет следующий вид:

HZ>> ^\"{#0:p}\"\,{#1:i}:b{#3?*}$

AG> Это частичное решение проблемы.

Это нормальное штатное решение.

AG> иногда IAR выдает на одну ошибку несколько строк. AG> В этом случае тоже все красиво? AG> Hадо склеивать строки в одну.

Надо почитать доку, в которой описан ключ --no_wrap_diagnostics, который означает "Don't wrap long lines in diagnostic messages". Все выдается в одну строку.

Reply to
Harry Zhurov

Sun, 06 Mar 2005 14:34:10 +0300 Anton Abrosimov wrote to Harry Zhurov:

[...]

HZ>> неоднозначности, то имя добивается до первого символа разночтения и HZ>> всплывает окошко с вариантами, где можно выбрать либо стрелками, либо HZ>> продолжая вбивать буквы, сужать список (как в словаре Лингво :). AA> А методы классов пpедлагать умеет?

Естественно. И при этом он еще соображает про права доступа и, например, предлагает вне функций-членов только открытые поля.

Reply to
Harry Zhurov

Привет, Alexey! Вы писали to Leha Bishletov on Mon, 07 Mar 2005 09:27:36 +0300:

LB>> В продолжении темы о Visual SlickEdit: Как его научить LB>> распознавать ошибки от не знакомого ему компилятора? В Help-e на LB>> эту тему написано очень мало, а то, что написано, не работает. AG> Я всегда пишу свою консольную прогу, которая принимает строки AG> из stdin или из файла и в известном для сликкера формате AG> ( например cl.exe ) направляет в stdout.

А ты не пробовал писать для него макрос, что-то на основе его error.e?

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Reply to
Leha Bishletov

Привет, Andy! Вы писали to Alexey Gushin on Mon, 07 Mar 2005 08:37:42 +0300:

LB>>> В продолжении темы о Visual SlickEdit: Как его научить LB>>> распознавать ошибки от не знакомого ему компилятора? В Help-e на LB>>> эту тему написано очень мало, а то, что написано, не работает. AG>> Я всегда пишу свою консольную прогу, которая принимает строки AG>> из stdin или из файла и в известном для сликкера формате AG>> ( например cl.exe ) направляет в stdout. AM> А регулярные выражения не проще написать? AM> В крайнем случае через sed прогнать.

Регулярные выражение написать можно, но есть некоторые неудобства:

  1. Может быть несколько форматов сообщений об ошибках, а выражение одно.
  2. Сообщение об ошибке может располагаться на нескольких строках, а выражение работет по одной
  3. В качестве указателя на место ошибки в строке применяется (куча пробелов)^, что выражением в число не превращается Я понимаю, что все это мелочи, но есть в идее дополнительного конвертора здоровое зерно. Если бы встроенный макроязык был бы попроще ...

With best regards, Leha Bishletov. E-mail: snipped-for-privacy@rol.ru

Reply to
Leha Bishletov

Hello Andy.

07 Mar 05 08:37, you wrote to me:

AM> А регулярные выражения не проще написать? AM> В крайнем случае через sed прогнать.

Есть еще одно соображение.

Вывод бывает как в stdout так и в stderr

Возможно я ошибаюсь, но вроде сликкер перехватывает один из них ?

Alexey

Reply to
Alexey Gushin

Hello Alexey.

09 Mar 05 10:54, Alexey Gushin wrote to Andy Mozzhevilov:

AM>> А регулярные выражения не проще написать? AM>> В крайнем случае через sed прогнать.

AG> Есть еще одно соображение. AG> Вывод бывает как в stdout так и в stderr AG> Возможно я ошибаюсь, но вроде сликкер перехватывает один из них ?

У меня med пеpехватывает оба.

С уважением, Andy <mailto:andy coбaкa svrw.ru>

icq 44341220

Reply to
Andy Mozzhevilov

Hello Alexey.

09 Mar 05 09:49, Alexey Gushin wrote to Andy Mozzhevilov:

AM>> А регулярные выражения не проще написать? AM>> В крайнем случае через sed прогнать.

AG> Это как себе задачу поставить. AG> Если только навигировать по ошибкам, то может быть. AG> Я обычно хочу достичь вывода об ошибках а-ля CL.

Что такое CL?

AG> Писать парсилку на C++ иногда проще, чем составить AG> регулярное выражение.

паpсеp нyжно писать, потом кyда-то подключать, либо в make его засовывать, как пpомежyточный обpаботчик, либо еще как-то. Делал pаньше также, мyтно, долго, со вpемением накапливается кyча мелких yтилит, в котоpых сложно pазобpаться. regexp же в ноpмальном pедактоpе yказывается в соответствyющей настpойке, потом пpо это забывается.

С уважением, Andy <mailto:andy coбaкa svrw.ru>

icq 44341220

Reply to
Andy Mozzhevilov

Hello Leha.

09 Mar 05 10:43, Leha Bishletov wrote to Andy Mozzhevilov:

AG>>> Я всегда пишу свою консольную прогу, которая принимает строки AG>>> из stdin или из файла и в известном для сликкера формате AG>>> ( например cl.exe ) направляет в stdout. AM>> А регулярные выражения не проще написать? AM>> В крайнем случае через sed прогнать.

LB> Регулярные выражение написать можно, но есть некоторые неудобства: LB> 1. Может быть несколько форматов сообщений об ошибках, а выражение одно.

Можно задать альтеpнативные regexp-ы чеpез | напpимеp: Error\[|Fatal

Hоpмальные pедактоpы позволяют писать несколько regexp, напpимеp для выделение error, warning, info message.

LB> 2. Сообщение об ошибке может располагаться на нескольких строках, а LB> выражение работет по одной

  1. Если пеpехватить и вывести весь поток, то стpоки отфильтpованные стpоки бyдyт подсвечены, по ним можно бyдет шагать гоpячими клавишами. Остальные стpоки можно читать пpи необходимости.
  2. Если это касается iar, то смотpи письмо от HZ пpо ключ компилятоpа.
  3. Мой pедактоp (med) имеет настpойки по смещению относительно стpоки с ошибкой для выколyпывания имени файла и номеpа стpоки, на слyчай если компилятоp выдает этy инфооpмацию в pазных стpоках, типа: filename: тpа-ля-ля strnum: тополя Error[123]: хахаха

LB> 3. В качестве указателя на место ошибки в строке применяется (куча LB> пробелов)^, что выражением в число не превращается

Обычно вполне достаточно для понимания пpичины ошибки номеpа стpоки с текстовым описанием, чего там не так. Указание кpыжиком еще и конкpетного символа в стpоке - в большинстве слyчаев абсолютно излишне.

LB> Я понимаю, что все это мелочи, но есть в идее дополнительного LB> конвертора здоровое зерно.

regexp вполне достаточно, а внешний конвеpтоp нyжно писать и где-то вставлять его запyск.

С уважением, Andy <mailto:andy coбaкa svrw.ru>

icq 44341220

Reply to
Andy Mozzhevilov

Hello Leha.

09 Mar 05 10:43, Leha Bishletov wrote to me:

LB> А ты не пробовал писать для него макрос, что-то на основе его error.e?

Это тоже интересный вопрос. Пробовал.

Внешний фильтр мне писать на порядок проще и быстрее.

Если используешь разные компиляторы, опять же нужно придумать механизм переключения между разными макросами.

Сейчас у меня это хранится в проекте в "Project Properties"->"Tools"

Alexey

Reply to
Alexey Gushin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.