Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
#1

Отладка в стиле быстрых выводов данных и скорость компиляции в таком подходе - C++

02.12.2012, 21:44. Просмотров 451. Ответов 13
Метки нет (Все метки)

Работаю на php, там интуитивно вырабатывается такой подход отладки в стиле - вывести данные из этого участка и прекратить код (по желанию).

Ну то есть банально мы вставляем куда нужно, нечто:
PHP
1
2
3
4
//...много кода...
print $variable;
exit();
//...много кода...
конечно у меня там свои специальные функции, но наглядно это примерно так

Такой метод быстр, мы сохраняем и обновляем страницу, и за несколько минут можем вывести множество данных, понимая тем самым состояние программы в данный момент времени.
Я пока осваиваю С/C++ и мне стало интересно возможно реализовать такой подход?
В данном случае я конечно напишу свою маленькую "библиотеку", которая будет записывать данные в файл. Но возник вопрос со временем, так ли это будет шустро? Я слышал компиляции больших проектов занимает значительное время, но в тоже время видел как компилятор (gcc) повторно не создает объектные файлы (хотя это предположение интуитивно, могу ошибиться).

Суть вопрос в следующем, правда ли компиляторы создает объектные файлы которые повторно не компилируются если нет изменений&
И можно ли с помощью них достичь быстрой компиляции большого проекта (буду копаться в готовых опенсорс проектах, которые большие)? Или все же минутами мне приодеться ждать и мучатся чтобы получить данные нескольких переменных?


Или все это чушь, и нужно использовать пошаговый отладчик с ассемблером (чтобы я на данном этапе не хотел из-за нехватки времени и слабого знания английского)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отладка в стиле быстрых выводов данных и скорость компиляции в таком подходе (C++):

С++ Скорость компиляции - C++
Всем привет. Подскажите пожалуйста как отображать скорость компиляции программы в консольном окошечке как на этом изображении. ...

возможна ли ошибка при таком подходе? - Delphi
есть приложение оформленое как служба, серверный сокет как stThreadBlocking. возможна ли ситуация при которой на строке...

Реально ли сделать ссылки на картинки в таком стиле? - HTML, CSS
Ломаю голову над этим последние два дня. %-) Ситуация такая. Есть картинки, при наведении на которые, открывается лайт-бокс с увеличенной...

Определить скорость двух самых быстрых автомобилей - Turbo Pascal
В массиве A(n) храниться информация о максимальной скорости N легковых автомобилей. Определить скорость двух самых быстрых автомобилей. ...

Определить скорость двух самых быстрых автомобилей - C#
В массиве хронятся информация максимальной скорости каждой из 40 марок легкой автомобилей. Определить скорость двух самых быстрых...

Вычислить ускорение поезда, если при подходе к станции поезд уменьшил скорость от 90 до 45 км/ч в течении 25 с - Turbo Pascal
3. Составьте программу вычисления ускорения поезда, если при подходе к станции поезд уменьшил скорость от 90 до 45 км/ч в течении 25 с.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 21:48 #2
Цитата Сообщение от Evgeniyms Посмотреть сообщение
правда ли компиляторы создает объектные файлы которые повторно не компилируются если нет изменений.
Компилятор не отслеживает изменения в файлах. Если это нужно, то этим занимаются сторонние приложения. Например, make. Или среда разработки.
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 21:55  [ТС] #3
Цитата Сообщение от Vourhey Посмотреть сообщение
Компилятор не отслеживает изменения в файлах. Если это нужно, то этим занимаются сторонние приложения. Например, make. Или среда разработки.
то есть каждый раз с нуля в таком случае?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 22:07 #4
Цитата Сообщение от Evgeniyms Посмотреть сообщение
то есть каждый раз с нуля в таком случае?
почему?

Добавлено через 1 минуту
Цитата Сообщение от Evgeniyms Посмотреть сообщение
буду копаться в готовых опенсорс проектах
Ты что, думаешь, в готовых опенсорс проектах собирается не актоматизированной системой, а для каждого файла руками компилятор вызывать? Нет.
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 22:13  [ТС] #5
Цитата Сообщение от Vourhey Посмотреть сообщение
почему?

Добавлено через 1 минуту

Ты что, думаешь, в готовых опенсорс проектах собирается не актоматизированной системой, а для каждого файла руками компилятор вызывать? Нет.
Ну собственно я прошу объяснить как и что происходит, и достижим ли такой эффект как я описал выше (автоматически через IDE или вручную в макфайле править)?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 22:17 #6
Цитата Сообщение от Evgeniyms Посмотреть сообщение
как и что происходит
Как и что происходит ты прочитаешь в документации к соответствующей тулзе, которую собираешься использовать для автоматизации сборки проекта.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
и достижим ли такой эффект
Цитата Сообщение от Vourhey Посмотреть сообщение
Если это нужно, то этим занимаются сторонние приложения. Например, make. Или среда разработки.
Соответственно, уже ответил, что да, достижим.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
автоматически через IDE или вручную в макфайле править
В makefile это тоже автоматически, там не надо прописывать "проверь, что это файл не был изменен...".
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 22:22  [ТС] #7
Цитата Сообщение от Vourhey Посмотреть сообщение
Как и что происходит ты прочитаешь в документации к соответствующей тулзе, которую собираешься использовать для автоматизации сборки проекта.


Соответственно, уже ответил, что да, достижим.

В makefile это тоже автоматически, там не надо прописывать "проверь, что это файл не был изменен...".
Значит компилятор нечего не делает, но некоторые IDE автоматические создают макфайл, в котором указывает, что компилировать, а что взять готовым (то есть IDE и проверяет файлы на изменения)?

Если так, нельзя было сразу так подробно объяснить, а то как кота за яйца тянем?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 22:29 #8
Цитата Сообщение от Evgeniyms Посмотреть сообщение
Значит компилятор нечего не делает,
Он называется компилятор. Он компилирует, а не "ничего не делает.". Ничего больше он делать и не должен.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
но некоторые IDE автоматические создают макфайл
Да.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
в котором указывает, что компилировать, а что взять готовым
Нет. В мейкфале указываются таргеты, зависимости и сорцы. Если сорец таргета был изменен - перекомпилять надо. Если сорец не был изменен, можно брать готовый таргет. И так для всего дерева зависимостей.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
Если так, нельзя было сразу так подробно объяснить, а то как кота за яйца тянем?

Не по теме:

Если тебя что-то беспокоит, то обратись к своему врачу. Я отвечаю так, как мне нравится. Не хочешь - не читай.



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

Добавлено через 38 секунд
Само собой, если таргет еще не был собран, то компиляция нужна обязательно.
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 22:36  [ТС] #9
Цитата Сообщение от Vourhey Посмотреть сообщение
Он называется компилятор. Он компилирует, а не "ничего не делает.". Ничего больше он делать и не должен.

Да.

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

Не по теме:

Если тебя что-то беспокоит, то обратись к своему врачу. Я отвечаю так, как мне нравится. Не хочешь - не читай.



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

Добавлено через 38 секунд
Само собой, если таргет еще не был собран, то компиляция нужна обязательно.
А кто следит за изменениями, IDE? Как бы больше некому то и следить, или там какой-то универсальный алгоритм сравнения, где можно определить, что было внесено изменение в исходник?

Еще вопрос тогда. Насколько быстро будет сборка этих объектных файлов (линковка - насколько я помню), если все объектные файлы (таргеты) готовы? То есть быстро он соберет большой проект?
Под быстротой я имею ввиду секунд 10-20, или ждать все равно до нескольких минут? (субъективно по вашему опыту).
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 22:46 #10
Цитата Сообщение от Evgeniyms Посмотреть сообщение
А кто следит за изменениями
Это зависит от того, что ты используешь. В случае с make-файлом - make. если твоя IDE использует мейк-файлы, то, что удивительно, то за изменениями следит опять же мейк, потому что для сборки его иде и запускает.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
Как бы больше некому то и следить
Блин. Ну IDE - это же целые комплекс утилит, а не одна большая программа. Там может быть отдельно компилятор, отдельно утилита линковки, сборки, отдельным компонентов редактор. И ничто не мешает вызвать все эти утилиты без IDE, и все будет также работать. Так надо ли тут толочь говно в ступе, IDE-не IDE?
Цитата Сообщение от Evgeniyms Посмотреть сообщение
там какой-то универсальный алгоритм сравнения, где можно определить, что была внесено изменение?
За все алгоритмы отвечать не могу, а так, обычная чексумма файла.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
Насколько быстро будет сборка этих объектных файлов (линковка - насколько я помню), если все объектные файлы (таргеты) готовы?
Он не будет собирать в этом случае, а просто скажет, что сборка нафиг не нужна.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
То есть быстро он соберет большой проект.
Быстро - понятие относительное. "Большой" - тоже. Ты можешь скачать любой архив исходного кода и собрать. Потом поменять главный что-нибудь и пересобрать.
Цитата Сообщение от Evgeniyms Посмотреть сообщение
или ждать все равно до нескольких минут?
Не, быстрее.

Может, тебе взять и прочитать доукментацию по make? А то столько вопросов, на которые все ответы уже давно есть. Почему ты ничего не читаешь? У тебя наводок уже туева хуча.
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 22:53  [ТС] #11
Vourhey, в данном случае хотел услышать из вашего опыта про размер и время. Скажем вы в какой-то большой проект добавили только одну строку и снова скомпилировали.
Насколько это быстро и удобно будет, чисто субъективно точно мне не нужно (уж бы сам проверил, но разворачивать мне долго, легче спросить).
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 23:05 #12
Цитата Сообщение от Evgeniyms Посмотреть сообщение
в данном случае хотел услышать из вашего опыта про размер и время.
Чисто субъективно, достаточно быстро и удобно.
Evgeniyms
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
02.12.2012, 23:15  [ТС] #13
Цитата Сообщение от Vourhey Посмотреть сообщение
Чисто субъективно, достаточно быстро и удобно.
А что вообще удобнее (или правильне), так чисто вывести результат или же использовать отладчики, там же всякие точки остановки кода и информация о стеках?

Просто для скриптов такой подход (просто вывести переменную/массив) наверно самый достаточный, хоть и есть расширения и отладчики, но по сути не сталкивался с тем, что они явно нужны и облегчали жизнь, а здесь новая для меня среда и как поступить не понятно (просто выводить, или уже погружаться глубоко в отладку и ассемблер).
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.12.2012, 23:32 #14
Цитата Сообщение от Evgeniyms Посмотреть сообщение
А что вообще удобнее (или правильне), так чисто вывести результат или же использовать отладчики, там же всякие точки остановки кода и информация о стеках?
Так это от задачи зависит. В каких-то ситуациях удобнее решать задачу, используя отладчик. Где-то - ведя лог.

Добавлено через 1 минуту
Цитата Сообщение от Evgeniyms Посмотреть сообщение
Просто для скриптов такой подход (просто вывести переменную/массив) наверно самый достаточный, хоть и есть расширения и отладчики, но по сути не сталкивался с тем, что они явно нужны и облегчали жизнь, а здесь новая для меня среда и как поступить не понятно (просто выводить, или уже погружаться глубоко в отладку и ассемблер).
Поступать нужно так, как ты считаешь удобнее для текущей задачи. Я так же пользуюсь отладкой методом печати, как и используя отладчик. Просто смотрю, что удобнее.

Добавлено через 13 минут
Вот тебе практический пример. Время сборки проекта целиком:
Код
2m12.474s
И время сборки после того, как поменяли один сорец:
Код
0m2.426s
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 23:32
Привет! Вот еще темы с ответами:

Хитрая структура данных для быстрых операций - Алгоритмы
Добрый вечер! Знающие люди, подскажите, пожалуйста, идею для разрешения вопроса: какую структуру(-ы) данных для хранения целых чисел...

Панель быстрых настроек: пропал знак мобильных данных - Android
Странно из за чего исчезла кнопка мобильных данных с панели быстрых настроек. Может из за ограничение в передаче данных?

Отладка компиляции (трассировка) - Visual C++
Можно ли сделать так, чтобы во время компиляции выводились какие нибудь данные которые бы показывали что конкретно собирается. Потому что...

Структура решения и скорость компиляции - Visual Basic .NET
Здравствуйте, дорогие друзья! Есть большой проект на VB.NET. Организован как одно решение с одним проектом. Используется в ежедневной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.12.2012, 23:32
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru