Отладка GNU делает

Мы храним все связанное с приложением в нашем SCM. Сценарии DB обычно хранят в их собственном проекте, но рассматривают точно так же, как любой другой код... разрабатывают, реализуют, тестируют, фиксация.

71
задан Mateusz Piotrowski 2 August 2017 в 16:20
поделиться

4 ответа

#include <stdio.h>
#include <stdlib.h>

/* My approach is to count the length of the string required. And do a single alloc.
     Sure you can allocate more, but I don't know for how long this data will be retained.
*/ 

#define LEN(a) (sizeof a / sizeof *a)

int main(void) {

    unsigned a[] = {1, 23, 45, 523, 544};
    int i, str_len=0, t_written=0;
    char tmp[11]; /* enough to fit the biggest unsigned int */

    for(i = 0; i < LEN(a); i++) 
        str_len += sprintf(tmp, "%d", a[i]);

    /* total: we need LEN(a) - 1 more for the ',' and + 1 for '\0' */
    str_len += LEN(a);
    char *str = malloc(str_len); 
    if (!str) 
        return 0;

    if (LEN(a) > 1) {
        t_written += sprintf(str+t_written, "%d", a[0]);
        for(i = 1; i < LEN(a); i++)
            t_written += sprintf(str+t_written, ",%d", a[i]);
    } else if (LEN(a) == 1) 
        t_written += sprintf(str+t_written, "%d", a[0]);

    printf("%s\n", str);

    free(str);
    return 0;
}

  • a для всей отладки (так же, как make -d и make --debug ).
  • b для базовой отладки.
  • v для немного более подробной базовой отладки.
  • i для неявных правил.
  • j для информации о вызове.
  • m для информации во время переделки make-файла.

Похоже, например make --debug = b - лучший вариант для того, что вам нужно, как показано в следующей расшифровке:

pax@paxbox> cat makefile
c:a b
    touch c

pax@paxbox> touch a b ; make
touch c

pax@paxbox> make
make: 'c' is up to date.

pax@paxbox> touch a ; make --debug=b
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc. Blah, blah, blah.
Reading makefiles...
Updating goal targets....
 Prerequisite 'a' is newer than target 'c'.
Must remake target 'c'.
touch c
Successfully remade target file 'c'.
98
ответ дан 24 November 2019 в 13:00
поделиться

Вы ищете пробную версию Make? Он распечатает, что делает make, не делая этого на самом деле, что позволит вам увидеть, что происходит.

Флаг -n , используйте его как make -n .

]
23
ответ дан 24 November 2019 в 13:00
поделиться

Ваш вопрос немного неясен. Если вы хотите узнать, какие файлы предварительных требований не изменялись в последнее время, используйте команду ls -l, чтобы узнать время их изменения. Если вы хотите увидеть, что делает make, попробуйте следующее:

# Make will announce when it is making this target, and why.
sometarget: preq1 preq2 preq3
    @echo making $@
    @echo The following preqs are newer than the target: $?
    do_things
7
ответ дан 24 November 2019 в 13:00
поделиться

Также есть GNU make с отладчиком и улучшенным выводом трассировки / ошибок: Remake

screencast: http://showmedo.com/videotutorials/video?name= linuxBernsteinMakeDebug1 и fromSeriesID = 40

8
ответ дан 24 November 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: