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

Jan 27, 2005 Last reply: 21 years ago 566 Replies

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'овским компилятором.

ðÒÉ×ÅÔ, Anton! ÷Ù ÐÉÓÁÌÉ to Leha Bishletov on Wed, 02 Mar 2005 15:08:32 +0300:

AA> ðÏÎ æÅ× 28 2005 16:22, Leha Bishletov -> Anton Abrosimov:

LB>> úÄÅÓØ, ÏÐÑÔØ, ÏÐÔÉÍÉÚÁÃÉÑ ÐÏ ÍÉÎÉÍÕÍÕ. åÓÌÉ ×ËÌÀÞÉÔØ ÐÏ LB>> ÍÁËÓÉÍÕÍÕ, ÔÏ GCC ÓÐÁÒÉ×ÁÅÔ ÐÒÏ×ÅÒËÕ É ×ÙÄÅÌÅÎÉÅ ÍÌÁÄÛÅÇÏ ÂÁÊÔÁ, LB>> IAR ÚÎÁÅÔ Ï subs É ÚÎÁÅÔ, ÞÔÏ ÍÏÖÎÏ ÎÅ ×ÙÄÅÌÑÔØ ÍÌÁÄÛÉÊ ÂÁÊÔ, ÎÏ LB>> ÎÅ ÕÍÅÅÔ ÐÒÅ×ÒÁÝÁÔØ while(){} × do{}while() AA> ëÁË ÜÔÏ ÎÅ ÕÍÅÅÔ? ïÎ ×ÓÅÇÄÁ ÉÓÐÏÌØÚÕÅÔ do{}while(), ÅÓÌÉ ÖÅ ÎÕÖÎÁ AA> ÐpÏ×ÅpËÁ ÕÓÌÏ×ÉÑ ÄÏ ×ÙÐÏÌÎÅÎÉÑ ÔÅÌÁ ÃÉËÌÁ, ÔÏ ÐpÏÓÔÏ ÓÔÁ×ÉÔ ÐÅpÅÄ AA> ÃÉËÌÏÍ jump ÎÁ ÐpÏ×ÅpËÕ.

äÅÊÓÔ×ÉÔÅÌØÎÏ, IAR ÐÒÅ×ÒÁÝÁÅÔ ËÏÄ a=N;while(a!=0){++i;--a;} × do{}while(), ÎÏ ÎÅ ÒÁÚÂÉÒÁÅÔÓÑ Ó ËÏÄÏÍ a=N;while(--a!=0){++i;}. GCC ÕÐÒÏÝÁÅÔ É ÔÏ É ÄÒÕÇÏÅ.

LB>> ñ ÎÁ Á×ÔÏÍÁÔÅ ÐÉÛÕ ÃÉËÌÙ do{}while() LB>> ×ÍÅÓÔÏ while(){}, ÎÅ ÉÓÐÏÌØÚÕÀ for, × ×ÙÒÁÖÅÎÉÑÈ ÉÓÐÏÌØÚÕÀ LB>> ÐÒÅÆÉËÓÎÙÅ AA> þÔÏ ÚÎÁÞÉÔ - ÎÁ Á×ÔÏÍÁÔÅ? üÔÏ pÁÚÎÙÅ ÃÉËÌÙ, ÏÔÌÉÞÁÀÝÉÅÓÑ AA> ÍÉÎÉÍÁÌØÎÙÍ ËÏÌÉÞÅÓÔ×ÏÍ ÐpÏÈÏÄÏ×. ñ ÉÓÐÏÌØÚÕÀ ÔÏÔ, ËÏÔÏpÙÊ ÎÕÖÅÎ.

ãÉËÌÙ, ËÏÎÅÞÎÏ, ÒÁÚÎÙÅ, ÎÏ ÞÁÓÔÏ ÍÏÖÎÏ ÎÁÐÉÓÁÔØ É while(){} É do{}while() É ÐÏÌÕÞÉÔØ ÏÄÉÎÁËÏ×ÙÊ ÒÅÚÕÌØÔÁÔ. ôÁË ×ÏÔ × ÔÁËÉÈ ÓÌÕÞÁÑÈ Ñ, ÐÏ ÐÒÉ×ÙÞËÅ, ÐÉÛÕ do{}while(). á Ô×ÏÊ ÐÒÉÍÅÒ, Ó ËÏÔÏÒÏÇÏ ÎÁÞÁÌÓÑ ÒÁÚÇÏ×ÏÒ u8 vs u23, ÄÅÍÏÎÓÔÒÉÒÕÅÔ ÄÒÕÇÕÀ ÐÒÉ×ÙÞËÕ: u8 a = 100; while (a--!=0) {};

LB>> ++ --, ÅÝÅ ËÁËÉÅ-ÔÏ ÍÅÌÏÞÉ, ËÏÔÏÒÙÅ ÍÏÇ ÂÙ ÓÄÅÌÁÔØ ÚÁ ÍÅÎÑ LB>> ËÏÍÐÉÌÑÔÏÒ, ÎÏ Ñ ÕÖÅ ÐÒÉ×ÙË. äÌÑ ÍÅÎÑ ËÏÍÐÉÌÑÔÏÒ, ÕÍÅÀÝÉÊ ÜÔÏ, LB>> ÐÏÞÔÉ ÎÉ ÞÅÇÏ ÎÅ ÕÌÕÞÛÁÅÔ. AA> èÍ. ñ ÔÏÖÅ ÏÂÙÞÎÏ ÐÏÄÓÔpÁÉ×ÁÀÓØ ÐÏÄ ËÏÍÐÉÌÑÔÏp, ÎÏ ÍÅÌÏÞÁÍÉ, ÔÉÐÁ AA> ÔÏÇÏ, ÞÔÏ ÔÙ ÐÅpÅÞÉÓÌÉÌ, ÏÄÎÏÚÎÁÞÎÏ ÎÅ ÎÁÐpÑÇÁÀÓØ.

á ÎÁ ÞÔÏ ÔÙ ÏÂÒÁÝÁÅÛØ ×ÎÉÍÁÎÉÅ, ÐÒÉÍÅÎÉÔÅÌØÎÏ Ë IAR ARM?

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

Привет, 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

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) если есть неоднозначности, то имя добивается до первого символа разночтения и всплывает окошко с вариантами, где можно выбрать либо стрелками, либо продолжая вбивать буквы, сужать список (как в словаре Лингво :).

Привет 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. ... Кто юзал мой логин и весь его выюзал?!

ðÒÉ×ÅÔ Leha! óÕ íÁp 05 2005 09:05, Leha Bishletov -> Anton Abrosimov:

AA>> ëÁË ÜÔÏ ÎÅ ÕÍÅÅÔ? ïÎ ×ÓÅÇÄÁ ÉÓÐÏÌØÚÕÅÔ do{}while(), ÅÓÌÉ ÖÅ ÎÕÖÎÁ AA>> ÐpÏ×ÅpËÁ ÕÓÌÏ×ÉÑ ÄÏ ×ÙÐÏÌÎÅÎÉÑ ÔÅÌÁ ÃÉËÌÁ, ÔÏ ÐpÏÓÔÏ ÓÔÁ×ÉÔ ÐÅpÅÄ AA>> ÃÉËÌÏÍ jump ÎÁ ÐpÏ×ÅpËÕ. LB> äÅÊÓÔ×ÉÔÅÌØÎÏ, IAR ÐÒÅ×ÒÁÝÁÅÔ ËÏÄ a=N;while(a!=0){++i;--a;} × LB> do{}while(), ÎÏ ÎÅ ÒÁÚÂÉÒÁÅÔÓÑ Ó ËÏÄÏÍ a=N;while(--a!=0){++i;}. GCC LB> ÕÐÒÏÝÁÅÔ É ÔÏ É ÄÒÕÇÏÅ. éáò ÕÐpÏÝÁÅÔ ×ÔÏpÏÊ ÐpÉÍÅp × i = (N-1);

LB>>> ñ ÎÁ Á×ÔÏÍÁÔÅ ÐÉÛÕ ÃÉËÌÙ do{}while() LB>>> ×ÍÅÓÔÏ while(){}, ÎÅ ÉÓÐÏÌØÚÕÀ for, × ×ÙÒÁÖÅÎÉÑÈ ÉÓÐÏÌØÚÕÀ LB>>> ÐÒÅÆÉËÓÎÙÅ AA>> þÔÏ ÚÎÁÞÉÔ - ÎÁ Á×ÔÏÍÁÔÅ? üÔÏ pÁÚÎÙÅ ÃÉËÌÙ, ÏÔÌÉÞÁÀÝÉÅÓÑ AA>> ÍÉÎÉÍÁÌØÎÙÍ ËÏÌÉÞÅÓÔ×ÏÍ ÐpÏÈÏÄÏ×. ñ ÉÓÐÏÌØÚÕÀ ÔÏÔ, ËÏÔÏpÙÊ ÎÕÖÅÎ. LB> ãÉËÌÙ, ËÏÎÅÞÎÏ, ÒÁÚÎÙÅ, ÎÏ ÞÁÓÔÏ ÍÏÖÎÏ ÎÁÐÉÓÁÔØ É while(){} É LB> do{}while() É ÐÏÌÕÞÉÔØ ÏÄÉÎÁËÏ×ÙÊ ÒÅÚÕÌØÔÁÔ. ôÁË ×ÏÔ × ÔÁËÉÈ ÓÌÕÞÁÑÈ LB> Ñ, ÐÏ ÐÒÉ×ÙÞËÅ, ÐÉÛÕ do{}while(). òÁÚÎÉÃÁ × ËÏÍÐÉÌÑÃÉÉ ÜÔÉÈ ÃÉËÌÏ× - ÌÉÂÏ ÏÔÓÕÔÓÔ×ÕÅÔ, ÌÉÂÏ ÎÉÞÔÏÖÎÁ.

LB> á Ô×ÏÊ ÐÒÉÍÅÒ, Ó ËÏÔÏÒÏÇÏ LB> ÎÁÞÁÌÓÑ ÒÁÚÇÏ×ÏÒ u8 vs u23, ÄÅÍÏÎÓÔÒÉÒÕÅÔ ÄÒÕÇÕÀ ÐÒÉ×ÙÞËÕ: u8 a = 100; LB> while (a--!=0) {}; üÔÏ Ñ ÕÐpÏÓÔÉÌ ÉÚ void function(u8 a) {while (a--!=0) {...};}. èÏÔÑ ÐpÉ×ÙÞËÁ Õ ÍÅÎÑ ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÄpÕÇÁÑ. :)

ëÓÔÁÔÉ, ÉÚ ÄÏËÉ ÎÁ ËÏÍÐÉÌÑÔÏp: "Use int or long instead of char or short whenever possible, to avoid sign extension or zero extension. In particular, loop indexes should always be int or long to minimize code generation. Also, in Thumb mode, accesses through the stack pointer (SP) is restricted to 32-bit data types, which further emphasizes the benefits of using one of these data types."

LB>>> ++ --, ÅÝÅ ËÁËÉÅ-ÔÏ ÍÅÌÏÞÉ, ËÏÔÏÒÙÅ ÍÏÇ ÂÙ ÓÄÅÌÁÔØ ÚÁ ÍÅÎÑ LB>>> ËÏÍÐÉÌÑÔÏÒ, ÎÏ Ñ ÕÖÅ ÐÒÉ×ÙË. äÌÑ ÍÅÎÑ ËÏÍÐÉÌÑÔÏÒ, ÕÍÅÀÝÉÊ ÜÔÏ, LB>>> ÐÏÞÔÉ ÎÉ ÞÅÇÏ ÎÅ ÕÌÕÞÛÁÅÔ. AA>> èÍ. ñ ÔÏÖÅ ÏÂÙÞÎÏ ÐÏÄÓÔpÁÉ×ÁÀÓØ ÐÏÄ ËÏÍÐÉÌÑÔÏp, ÎÏ ÍÅÌÏÞÁÍÉ, ÔÉÐÁ AA>> ÔÏÇÏ, ÞÔÏ ÔÙ ÐÅpÅÞÉÓÌÉÌ, ÏÄÎÏÚÎÁÞÎÏ ÎÅ ÎÁÐpÑÇÁÀÓØ. LB> á ÎÁ ÞÔÏ ÔÙ ÏÂÒÁÝÁÅÛØ ×ÎÉÍÁÎÉÅ, ÐÒÉÍÅÎÉÔÅÌØÎÏ Ë IAR ARM? ïÂÙÞÎÏ Ñ ÓÍÏÔpÀ, ÎÁÓËÏÌØËÏ ÔÑÖÅÌÏ ÄÁÀÔÓÑ ËÏÍÐÉÌÑÔÏpÕ ÔÉÐÏ×ÙÅ ÏÐÅpÁÃÉÉ, É ÏÃÅÎÉ×ÁÀ, ËÁËÉÅ ÚÁÄÁÞÉ ÏÐÔÉÍÉÚÁÃÉÉ ËÏÄÁ ×ÚÑÔØ ÎÁ ÓÅÂÑ ÄÌÑ ËÏÎËpÅÔÎÏÇÏ ËÕÓËÁ ËÏÄÁ. HÁÐpÉÍÅp, ÉÓÐÏÌØÚÕÅÍÙÅ ÌÏËÁÌØÎÙÅ ÐÅpÅÍÅÎÎÙÅ (ÍÅÓÔÏ ÉÈ ÓÏÚÄÁÎÉÑ É ÏÂÌÁÓÔØ ÉÓÐÏÌØÚÏ×ÁÎÉÑ), ×ÙÚÏ× ÂÉÂÌÉÏÔÅÞÎÙÈ ÆÕÎËÃÉÊ, ÔÉÐ ÁÄpÅÓÎÏÊ ÁpÉÆÍÅÔÉËÉ ÄÌÑ ÄÏÓÔÕÐÁ Ë ÍÁÓÓÉ×ÁÍ, pÁÚÍÅÝÅÎÉÑ pÑÄÏÍ ÏÐÅpÁÃÉÊ ÄÏÓÔÕÐÁ Ë ÐÏÌÑÍ ÏÄÎÏÊ ÓÔpÕËÔÕpÙ, ÕÐpÏÝÅÎÉÅ ÍÎÏÇÏÕpÏ×ÎÅ×ÙÈ switch Ó ÐÏÍÏÝØÀ ÍÅÔÏË, É Ô.Ð.

HÁ ÜÔÏÍ ×ÓÅ, ÐÏËÁ. Anton Abrosimov. ... ðpÏÔÉ×ÎÉËÏ× ÇÕÍÁÎÉÚÍÁ - ÎÁ ×ÉÓÅÌÉÃÕ!

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

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

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

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

Hello Andy.

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

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

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

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

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

Alexey

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". Все выдается в одну строку.

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

[...]

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

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

Привет, 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

Привет, 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

Hello Andy.

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

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

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

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

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

Alexey

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

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

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

Hello Leha.

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

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

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

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

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

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

Alexey

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required