2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 
Сообщение20.05.2008, 22:48 
Модератор
Аватара пользователя


11/01/06
5702
Консоль отлаживать удобно с помощью какого-нибудь KDbg.
У Qt свои тонкости - см., например, http://doc.trolltech.com/qtopia4.2/debug.html
А вообще лучше спросить у имеющих опыт разработки под Qt.

 Профиль  
                  
 
 
Сообщение21.05.2008, 02:53 


08/01/08
21
незваный гость писал(а):
1) Если не ошибаюсь, gdb — не экранный отладчик. Я не прав? Я ведь сравниваю не со своим любимым (и до сих пор используемым) debug'ом.

Консольный отладчик. Ничего страшного не вижу (да, я им пользуюсь в реальной работе).

незваный гость писал(а):
Есть ли готовые конфигурации, позволяющие обойтись функциональными кнопками хотя бы для простейших случаев: run, breakpoint, step, step-over, step-out, stop?

Команды из коробки (соответственно): run, break LOCATION, step, next, finish, kill.

незваный гость писал(а):
3) Поправьте, меня, пожалуйста: я не уверен, что я могу выделить в исходном коде выражение и посмотреть его текущее значение. Или могу?

Можете. `print EXPR' EXPR is an expression (in the source language).

незваный гость писал(а):
А как в gdb — при повторном запуске слегка изменившейся программы breakpoints сползут?

Не сползут.
If the modification time of your symbol file has changed since the last time GDB read its symbols, GDB discards its symbol table, and reads it again. When it does this, GDB tries to retain your current breakpoints.

незваный гость писал(а):
5) Насколько сбивается gdb, когда имеет дело с сильно препроцессированным (слово-то какое! жуть берёт) текстом? У DIAB это было большой проблемой.

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

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

Моя среда разработки называется UNIX: vim, make, gcc, gdb. Как для меня -- намного удобнее графических сред.

maxal писал(а):
А вообще лучше спросить у имеющих опыт разработки под Qt.

Отлаживал при помощи gdb и консольные программы, и просто QT-шные, и многопоточные QT-шные (один поток пользовательского интерфейса и несколько "рабочих" потоков) -- всё нормально, мне комфортно.

 Профиль  
                  
 
 
Сообщение23.05.2008, 22:25 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
ipanema писал(а):
Консольный отладчик. Ничего страшного не вижу (да, я им пользуюсь в реальной работе).

а для редактирования — конечно же, ed и TECO. Боже, как я Вас понимаю :).

ipanema писал(а):
Команды из коробки (соответственно): run, break LOCATION, step, next, finish, kill.

У меня по-прежнему нажатие на одну функциональную клавишу занимает меньше времени.

ipanema писал(а):
Моя среда разработки называется UNIX: vim, make, gcc, gdb. Как для меня -- намного удобнее графических сред.


Дело вкуса и задач. Однако позволю себе усомниться в продуктивности.

Кстати, я так и не понял: каким образом vim сообщает gdb, что вы вставили три строки в середине функции?

 Профиль  
                  
 
 
Сообщение24.05.2008, 02:48 


08/01/08
21
незваный гость писал(а):
У меня по-прежнему нажатие на одну функциональную клавишу занимает меньше времени.

Любая команда может быть сокращена даже до одной буквы, если это сокращение однозначно (все перечисленные команды могут быть сокращены до первой буквы). Ещё в gdb есть механизм повторения команд. Например, после того, как выполнил команду s (step) один раз, дальше можно её не набирать вообще, а просто жать Enter. Так что по сути остаётся та же одна клавиша.

незваный гость писал(а):
Кстати, я так и не понял: каким образом vim сообщает gdb, что вы вставили три строки в середине функции?

vim -- никаким. После того, как бинарник заново скомпилирован и перезапущен в той же сессии gdb, gdb находит старые точки останова в новых местах. А если в процессе отладки изменить файл исходника, то в gdb строки конечно поплывут. Но никто не заставляет сохранять исходники прямо во время отладки, всё равно это не "горит" до момента компиляции.

 Профиль  
                  
 
 
Сообщение24.05.2008, 04:06 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
ipanema писал(а):
gdb находит старые точки останова в новых местах.

Если можно, я возьму таймаут на два-три дня. Мне тут не всё ясно для себя.

ipanema писал(а):
Любая команда может быть сокращена даже до одной буквы, если это сокращение однозначно

Это всё равно две кнопки. А enter, имеющий разное значение — это прямая дорога в ад. Но кто я такой, чтобы спорить с суровым мастером ed'а :wink:

~~~

Знаете, я не чураюсь командной строки. Но
C. Лукьяненко Спектр писал(а):
Джентльмен к западу от Суэца не отвечает за то, что делает джентльмен к востоку от Суэца
Пока есть возможность, надо наслаждаться благами цивилизации, быть может даже сибаритствовать. А когда придёт черёд защищать цивилизацию — приходится и мордой в грязь.

 Профиль  
                  
 
 
Сообщение26.05.2008, 18:43 


21/05/08
4
незваный гость писал(а):
1) На K&R С уже давно никто не программирует.

Драйвера программируют на си.
Я однажды очень долго искал ошибку в тексте драйвера.
Пока не выяснил, что объявлять переменные в середине блока в стандарте си нельзя (до этого в принципе не знал об этом - благодаря с++).

 Профиль  
                  
 
 
Сообщение26.05.2008, 18:59 


21/03/06
1545
Москва
Tarasov писал(а):
незваный гость писал(а):
1) На K&R С уже давно никто не программирует.

Драйвера программируют на си.
Я однажды очень долго искал ошибку в тексте драйвера.
Пока не выяснил, что объявлять переменные в середине блока в стандарте си нельзя (до этого в принципе не знал об этом - благодаря с++).

Кстати, я тоже хотел сказать - для микроконтроллеров, во всяком случае для Texas Instruments Code Composer Си характерен именно strict K&R. Сам переучивался объявлять все переменные в начале и т.п. Теперь на автомате так делаю, синтаксис Си довольно хорошо виден по сравнению с Си++, даже когда последний не использует качественных преимуществ - классов и т.п.

 Профиль  
                  
 
 
Сообщение26.05.2008, 22:25 


27/11/05
183
Северодонецк
Кстати, бессистемное объявление переменных где ни попадя уж никак не годится
для серьезного программирования (скажем, в атомной энергетике), такой метод
еще в программистском фольклоре называют методом программирования "кошки и собаки": Хорошо быть кисой, хорошо собакой: где хочу - попис...ю,
где хочу - покак..ю (да простит меня мой любимый ризен!)

 Профиль  
                  
 
 
Сообщение26.05.2008, 23:54 
Заслуженный участник


31/12/05
1517
e2e4 писал(а):
Кстати, я тоже хотел сказать - для микроконтроллеров, во всяком случае для Texas Instruments Code Composer Си характерен именно strict K&R.
То есть вот так нельзя:
Код:
int main(int argc, char **argv)
{

а можно только так?
Код:
int main(argc, argv)
    int argc;
    char **argv;
{


Добавлено спустя 53 секунды:

bekas писал(а):
Кстати, бессистемное объявление переменных где ни попадя уж никак не годится для серьезного программирования
Спасибо за приступ ностальгии, вызванный этими словами. Словно на машине времени прокатился! :)

 Профиль  
                  
 
 
Сообщение29.05.2008, 03:19 


08/01/08
21
bekas писал(а):
Кстати, бессистемное объявление переменных где ни попадя уж никак не годится
для серьезного программирования (скажем, в атомной энергетике)

Строго не согласен. Главное -- чтобы голова была на плечах. Если кто-то не умеет пользоваться любой фичей языка, это, собственно, его проблема. Атомная энергетика тут вообще не при чём. Это высказывание аналогично выводу "множественное наследование сложно понять и использовать, поэтому в нашем новом супер-модном языке множественного наследования не будет!"

Между прочим, есть как минимум одна вещь, которую не сделаешь объявляя переменные только в начале. Это объявление ссылки. Например:
Код:
int &func();

int main()
{
  // объявления переменных...
  // int &a; // нельзя

  // немного кода...

  int &a = func(); // можно
}

Переменную a просто нельзя объявить в начале блока, так как её там ещё нечем инициализировать.

 Профиль  
                  
 
 
Сообщение29.05.2008, 04:25 
Заслуженный участник


15/05/05
3445
USA
tolstopuz писал(а):
То есть вот так нельзя:
Код:
int main(int argc, char **argv)
{

Так как раз можно. А вот так нельзя
Код:
int main(int argc, char **argv) {
    int i;
    i = 1;
    int j;
    j = 2;
}
Нужно
Код:
int main(int argc, char **argv) {
    int i;
    int j;
    i = 1;
    j = 2;
}


Tarasov писал(а):
незваный гость писал(а):
1) На K&R С уже давно никто не программирует.
Драйвера программируют на си.
На С - да, но не на K&R С. Используется если не С99, то хотя бы С89.


ipanema писал(а):
bekas писал(а):
Кстати, бессистемное объявление переменных где ни попадя уж никак не годится для серьезного программирования (скажем, в атомной энергетике)
Строго не согласен. Главное -- чтобы голова была на плечах. Если кто-то не умеет пользоваться любой фичей языка, это, собственно, его проблема. Атомная энергетика тут вообще не при чём.
При разработке критических приложений (атомная энергетика. авиация, и т.п.) есть стандарты, которые обязаны выполнять все, даже умеющие "пользоваться любой фичей". И Вы либо будете эти стандарты выполнять, либо не будете там работать. Но если у Вас есть "голова на плечах", то Вы найдете другую работу.

 Профиль  
                  
 
 
Сообщение29.05.2008, 06:02 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
bekas писал(а):
Кстати, бессистемное объявление переменных где ни попадя уж никак не годится

В С оно не важно (нет конструкторов/деструкторов), в С++ место определения переменной имеет принципиальное значение для семантики программы (и особенно в связи с исключительными ситуациями).

Поэтому хаотичность объявления в С++ — кажущаяся. Хотя, конечно, есть любители поизгаляться.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group