Ответ 1
Это легко. Смотрите скриншот.
Я использую 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.
Любые мысли?
Это легко. Смотрите скриншот.
Немного поздно внести свой вклад в этот старый поток, однако я нашел лучший способ профилирования утилиты командной строки использовать iprofiler
(manpage). Это позволяет собирать данные из командной строки, просто добавив это в начало командной строки:
iprofiler -leaks -d $HOME/tmp
(У меня есть временный каталог в $HOME/tmp
, поэтому вам может понадобиться использовать /tmp
или оставить параметр командной строки -d
вообще).
Мои тестовые скрипты автоматически добавляют это в командную строку, если определено $FINDLEAKS
(и будет добавлено valgrind
, если выполняется под Linux).
Затем генерируется файл .dtps
(фактически каталог), который может быть загружен и заменен с помощью инструментов.
Если вы компилируете с помощью clang
, просто добавьте как -O3
, так и -g
(clang не поддерживает параметр командной строки -pg
).
См. этот вопрос для вашего ответа.
От Брэда Ларсона:
Запустите приложение из Xcode, чтобы он выводил туда консольный вывод. Пока приложение запущено, запустите Инструменты и выберите соответствующий инструмент. В разделе "По умолчанию" в строке меню выберите "iPhone" или "Компьютер" (в зависимости от того, что вы тестируете), а в разделе "Присоединить к процессу" найдите имя исполняемого файла.
Когда вы нажимаете кнопку записи, ваше приложение должно начинаться с профилей в разделе "Инструменты", а его консольный вывод - на Xcode. К сожалению, этот процесс прикрепления должен появиться после запуска приложения, поэтому вам, возможно, придется профилировать запуск вашего приложения отдельно.
Изменить: Если это не сработало, вам может потребоваться перезагрузить компьютер. Вы еще это сделали?
Вы можете изменить вывод в раскрывающемся списке "Параметры" при выборе цели. Выход будет отображаться в системной консоли (Приложения/Утилиты/Консоль).