Подтвердить что ты не робот

Как использовать Инструменты и отображать консоль в приложениях командной строки

Я использую Xcode для OSX для разработки приложений командной строки C. Я также хотел бы использовать инструменты для профилирования и обнаружения утечек памяти.

Однако я не мог найти способ отображать консоль при запуске приложения из инструментов. Я также не могу подключиться к запущенному процессу командной строки (он выходит с ошибкой):

Вот пример кода:

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

static sigjmp_buf jmpbuf;

void handler(int sig) {
    char c[BUFSIZ];

    printf ("Got signal %d\n", sig);
    printf ("Deseja sair? (s/n) ");

    fgets(c, sizeof(c), stdin);

    if(c[0] == 's') {
        exit(0);
    } else {
        siglongjmp(jmpbuf, 1);
    }
}

int main(void) {
    char buf[BUFSIZ];

    signal(SIGINT, handler);

    sigsetjmp(jmpbuf, 1);

    while(1) {
        printf(">>>");
        fgets(buf, sizeof(buf), stdin);
        printf ("Introduziu: %s\n", buf);
    }

    return(0);
}

Вот ошибка, которую я получил после запуска инструментов, и пытаюсь подключиться к выполняемому процессу в xcode:

[Switching to process 1475]
[Switching to process 1475]
Error while running hook_stop:
sharedlibrary apply-load-rules all
Error while running hook_stop:
Invalid type combination in ordering comparison.
Error while running hook_stop:
Invalid type combination in ordering comparison.
Error while running hook_stop:
Error while running hook_stop:
Error while running hook_stop:
Error while running hook_stop:
Error while running hook_stop:
Error while running hook_stop:
Error while running hook_stop:

Unable to disassemble __CFInitialize.

Любые мысли?

4b9b3361

Ответ 1

Это легко. Смотрите скриншот.

screenshot

Ответ 2

Немного поздно внести свой вклад в этот старый поток, однако я нашел лучший способ профилирования утилиты командной строки использовать iprofiler (manpage). Это позволяет собирать данные из командной строки, просто добавив это в начало командной строки:

iprofiler -leaks -d $HOME/tmp

(У меня есть временный каталог в $HOME/tmp, поэтому вам может понадобиться использовать /tmp или оставить параметр командной строки -d вообще).

Мои тестовые скрипты автоматически добавляют это в командную строку, если определено $FINDLEAKS (и будет добавлено valgrind, если выполняется под Linux).

Затем генерируется файл .dtps (фактически каталог), который может быть загружен и заменен с помощью инструментов.

Если вы компилируете с помощью clang, просто добавьте как -O3, так и -g (clang не поддерживает параметр командной строки -pg).

Ответ 3

См. этот вопрос для вашего ответа.

От Брэда Ларсона:

Запустите приложение из Xcode, чтобы он выводил туда консольный вывод. Пока приложение запущено, запустите Инструменты и выберите соответствующий инструмент. В разделе "По умолчанию" в строке меню выберите "iPhone" или "Компьютер" (в зависимости от того, что вы тестируете), а в разделе "Присоединить к процессу" найдите имя исполняемого файла.

Когда вы нажимаете кнопку записи, ваше приложение должно начинаться с профилей в разделе "Инструменты", а его консольный вывод - на Xcode. К сожалению, этот процесс прикрепления должен появиться после запуска приложения, поэтому вам, возможно, придется профилировать запуск вашего приложения отдельно.

Изменить: Если это не сработало, вам может потребоваться перезагрузить компьютер. Вы еще это сделали?

Ответ 4

Вы можете изменить вывод в раскрывающемся списке "Параметры" при выборе цели. Выход будет отображаться в системной консоли (Приложения/Утилиты/Консоль).

IO options