LINUX.ORG.RU

Есть строчки типа TRACE( «Dumping entry %p\n», entry );

если TRACE() в строке один раз, тогда

$ echo "Есть строчки типа TRACE( «Dumping entry %p\n», entry );"|\
sed -r 's~(.*)(TRACE\([^)]*\))(.*)~\1/* \2 */\3~g'

drBatty ★★
()

У анонимуса форматстринг не может содержать точку с запятой, у доктора скобку, у меня жрет все почти до конца строки. Выбирай.

arturpub ★★
()
Ответ на: комментарий от arturpub

Блин тчк надо было оказывается. А я сижу голову ломаю :(

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от arturpub

Нифига

    TRACE( "Dumping entry %p\n", entry );
    TRACE( "lpData\t\t: %p\n", entry->lpData );
    TRACE( "cbData\t\t: %08x\n", entry->cbData);
    TRACE( "cbOverhead\t: %08x\n", entry->cbOverhead);
    TRACE( "iRegionIndex\t: %08x\n", entry->iRegionIndex);
    TRACE( "WFlags\t\t: ");
steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от arturpub

Мне надо парочку живых трейсов оставить.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Чо эта?

~$ sed -e 's/\(TRACE(.*);\)/\/\*\1\*\//'
    TRACE( "Dumping entry %p\n", entry );
    TRACE( "lpData\t\t: %p\n", entry->lpData );
    TRACE( "cbData\t\t: %08x\n", entry->cbData);
    TRACE( "cbOverhead\t: %08x\n", entry->cbOverhead);
    TRACE( "iRegionIndex\t: %08x\n", entry->iRegionIndex);
    TRACE( "WFlags\t\t: ");    /*TRACE( "Dumping entry %p\n", entry );*/
    /*TRACE( "lpData\t\t: %p\n", entry->lpData );*/
    /*TRACE( "cbData\t\t: %08x\n", entry->cbData);*/
    /*TRACE( "cbOverhead\t: %08x\n", entry->cbOverhead);*/
    /*TRACE( "iRegionIndex\t: %08x\n", entry->iRegionIndex);*/
arturpub ★★
()

просто исправь макрос

AptGet ★★★
()
Ответ на: комментарий от steemandlinux

А еще можно трейс так написать и в макрос завернуть, чтобы он смотрел на __func__ и фильтровать какой-нить глобальной переменной/массивом, если уж прям так надо.

arturpub ★★
()
Ответ на: комментарий от arturpub

в продолжение темы параметров компилятору, тестовый ненормальный код main.c:

#include <stdio.h>
#ifndef TRACE
#define TRACE printf
#endif
int func(int x) { return x*2; }
int main(int argc, char* argv) {TRACE("qwe, %i, %s\n",
func(83), "asd"); return 0; }
компиляция:
$ gcc main.c -o out.1; gcc -D"TRACE(...)" main.c -o out.2;
$ ./out.1
qwe, 166, asd
$ ./out.2

anonymous
()

А зачем так через жопу анальную?

#define TRACE(x)

anonymous
()
Ответ на: комментарий от steemandlinux

/* TRACE("(%p,%08x,%08lx) */: returning %p\n", heap, flags, size, ret );

значит тебе нужно заменить закавыченные скобки на какой-нить специальный символ. А потом заменить обратно.

drBatty ★★
()
Ответ на: комментарий от drBatty

Тогда и ставить просто в начало строки '//' чтобы она вся становилась комментарием. Вроде сейчас все С-компиляторы поддерживают комментарии в плюсовом стиле.

mky ★★★★★
()
Ответ на: комментарий от mky

Тогда и ставить просто в начало строки '//' чтобы она вся становилась комментарием. Вроде сейчас все С-компиляторы поддерживают комментарии в плюсовом стиле.

у нас речь зашла «а вдруг там вот такое?». Мой способ правит 99% строк верно, а уж 1% можно и ручками исправить. Т.ч. я так делаю. Ну или можно другой способ подобрать для данной ситуации. В профиле учебник, мне лень ликбез проводить, особенно если я уже его провёл.

drBatty ★★
()
Ответ на: комментарий от beastie

Так не прощели переименовать «те немногие» в TRACE2, чем мучаться с «теми многими»?

ну я не знаю. Может и проще. Я же не ТС... Вообще изначально делается какой-нибудь DEBUG_LEVEL, который указывает на «глубину» отладки. Чтоб потом не мучиться...

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.