Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Среда разработки Cpp с он-лайн перекомпиляцией, Перекомпиляция cpp в режиме break 
:(
    Опции темы
rvny
Дата 8.6.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



Здравствуйте!
Есть ли среды разработки в линуксе или возможности подобные microsoft visual studio:
Т.е. в режиме отладки не только смотреть и изменять переменные, но и добавлять код/удалять код/модифицировать и в дальнешем пошагово продолжать отлаживать программу (с изменным кодом)  без повторной остановки программа и запуска с перекомпиляцией.
Или в линуксе к сожалению только для просмотра значений можно использовать kdevelp, qdevelop в режиме отладки?
PM MAIL   Вверх
bsa
Дата 9.6.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



На сколько мне известно, под Linux не существует средств (по крайней мере бесплатных), позволяющих модифицировать код во время отладки и автоматически его подцеплять.
KDevelop, Code::Blocks и др. позволяют просматривать значения переменных. Не удивлюсь, если и изменять, но я этим никогда не пользовался (или просто забыл).
PM   Вверх
GrayCardinal
Дата 10.6.2007, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



rvny
Странно. А какой смысл в модифицировании кода во время выполнения ? Может проще поставить пару assert'ов ?

Это сообщение отредактировал(а) GrayCardinal - 10.6.2007, 04:06


--------------------
PM MAIL WWW   Вверх
powerfox
Дата 10.6.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

Репутация: 5
Всего: 97



rvny, kdbg. Но сомневаюсь, что такая возможность там есть (в доках не видел).


--------------------
user posted image
PM WWW   Вверх
archimed7592
Дата 10.6.2007, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 3
Всего: 93



вообще то возможности студии "на лету" модифицировать код во время отладки к с++ отношения не имеет - это привилегия .net кода. при модификации unmanaged с++ кода, AFAIK, студия просит пересборку проекта.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Mayk
Дата 11.6.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



Цитата(archimed7592 @  10.6.2007,  17:55 Найти цитируемый пост)
вообще то возможности студии "на лету" модифицировать код во время отладки к с++ отношения не имеет - это привилегия .net кода. при модификации unmanaged с++ кода, AFAIK, студия просит пересборку проекта. 

Incremental link действительно имеет отношение к с++ не более чем к фортрану.  В конце концов .exeшники собирают linker'ы.
VS вполне сносно позволяет модифицировать немного umanaged кода в рантайме. 


Цитата(rvny @  9.6.2007,  03:43 Найти цитируемый пост)

Т.е. в режиме отладки не только смотреть и изменять переменные, но и добавлять код/удалять код/модифицировать и в дальнешем пошагово продолжать отлаживать программу (с изменным кодом)  без повторной остановки программа и запуска с перекомпиляцией.



Поиск в гугле говорит, что в природе есть
Цитата(http://docs.sun.com/source/806-3567/ild.html)

ild is an incremental version of the Link Editor ld, and replaces ld for linking programs. Use ild to complete the edit, compile, link, and debug loop efficiently and more quickly. You can avoid relinking entirely by using the fix and continue feature of dbx which allows you to work without relinking. However, if you need to relink, the process can be faster if you use ild. For more information on fix and continue, see Chapter 11 in Debugging a Program With dbx.


Из док-ии по названному dbx
Цитата(далее по ссылке)

The advantages of using fix and continue are:
--8<--
    * You can resume running the program from the fix location. 


Поиск по ключевым словам "    sun    studio    linux    fix    continue " даёт

Цитата(даю ссылку на гугл @  так как прямая ссылка просит регистрацию)


Sun Studio 9 for Solaris OS and Linux
Significant Improvements in SPARC, Xeon and AMD Performance


Immediate availability of the Linux version of SunTM Studio 9 development tools for C, C++ and Fortran was announced by Sun at the LinuxWorld Conference held in San Francisco.

Also available for the SolarisTM Operating System (Solaris OS), Sun Studio 9 provides a comprehensive, productive environment for developing scalable 32-bit and 64-bit applications on the latest Sun UltraSPARCR IV, Intel Xeon and AMD-based systems.

For the Linux environment, this software offers NetBeansTM-based IDE with editor of choice (Vim, XEmacs, built-in); distributed make (dmake); GUI debugger (dbx) for GCC binaries; performance tools and X-Designer GUI Builder. 
....
Simplified Debugging: Graphical user interface allows for easy access to advanced debugging features. Set breakpoints, examine variables and navigate the call stack through debugger menus and buttons. Reduce turnaround time for fixes and achieve greater debugging productivity with "Fix and Continue." Debug optimized and parallelized code as well as mixed languages (C, C++, Fortran, and Java).

Так что есть основания полагать что fix'n'continue в linux мире существует.

Про другие IDE  и более свежие версии sun studio искать лень.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
archimed7592
Дата 11.6.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 3
Всего: 93



Mayk, точно технологию не знаю, но, вроде как "онлайн" модификация исходника реализуется посредством рефлексии, которую поддерживает .net, но не поддерживает c++(не дай Б-г такое счастье smile)


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 11.6.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



вообще говоря модифицирование кода задача тривиальная
не может быть, чтобы в GDB этой операции не было


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 11.6.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 3
Всего: 93



MAKCim, че, правда что ль тривиальная? в С++?? а откуда такие выводы?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 11.6.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



archimed7592
Код

#include <sys/mman.h>
#include <stdio.h>

static int foo() {
    return 0;
}

int main() {
    mprotect((void*)(&foo - (int)&foo % 4096), 4096, PROT_READ | PROT_WRITE | PROT_EXEC;
    ++*((int*)&foo + 1);
    printf("%d\n", foo());
    return 0;
}

как?  smile (компилировать без оптимизации gcc <name>.c -o <name>)

Это сообщение отредактировал(а) MAKCim - 11.6.2007, 18:56


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
  Дата 11.6.2007, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: нет
Всего: 43



 smile 

Цитата

++*((int*)&foo
 спасибо, а вот монитор оттирать мне придется =\


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
MAKCim
Дата 11.6.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



nerezus
 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 11.6.2007, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 3
Всего: 93



MAKCim, чего как? или это пример как модифицировать? дык речь о том, что среда сама интерактивно перекомпилирует, пересобирает и каким-то макаром биндит срарое состояние программы на новый образ. проблема в том, что в с++ очень много ньюансов со стеком, с исключениями и тому подобных граблей. если задача и выполнима, то уж точно она не тривиальна.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 11.6.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(archimed7592 @  11.6.2007,  20:14 Найти цитируемый пост)
или это пример как модифицировать?

да
Цитата(archimed7592 @  11.6.2007,  20:14 Найти цитируемый пост)
дык речь о том, что среда сама интерактивно перекомпилирует, пересобирает и каким-то макаром биндит срарое состояние программы на новый образ. проблема в том, что в с++ очень много ньюансов со стеком, с исключениями и тому подобных граблей. если задача и выполнима, то уж точно она не тривиальна. 

модифицирование кода - действительно тривиальная задача, и я это показал
вопрос о том, как это использовать, не стоял, однако я проблемы не вижу


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 11.6.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 3
Всего: 93



Цитата(MAKCim @  11.6.2007,  20:26 Найти цитируемый пост)
модифицирование кода - действительно тривиальная задача, и я это показал

запись в область памяти, в которой располагается код - задача действительно тривиальная.

Цитата(MAKCim @  11.6.2007,  20:26 Найти цитируемый пост)
вопрос о том, как это использовать, не стоял

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

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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 11.6.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(archimed7592 @  11.6.2007,  20:34 Найти цитируемый пост)
вопрос о самомодификации тоже не стоял ;)

Цитата(MAKCim @  11.6.2007,  18:41 Найти цитируемый пост)
вообще говоря модифицирование кода задача тривиальная

Цитата(archimed7592 @  11.6.2007,  18:44 Найти цитируемый пост)
MAKCim, че, правда что ль тривиальная? в С++?? а откуда такие выводы? 

самомодификация - это всегда модификация, но не наоборот
Цитата(archimed7592 @  11.6.2007,  20:34 Найти цитируемый пост)
ну вот смотри, удалю я определение какой-нибудь переменной, которая сейчас(момент исполнения, в который решили модифицировать код) находится в области видимости. тогда в ещё не модифицированном образе нужно выполнить деструктор для удалённого объекта. а если деструктор бросит исключение? а как сбиндить старое состояние процесса на новой образ? я вижу одни проблемы... 

любое модифицирование - это в любом случае повторная генерация кода (как ты уже заметил в одном из постов)
в результате получим исполняемый образ, допустим ELF образ
далее сравниваем загруженный образ с только что полученным и сохраняем текущее состояние процесса (важен стек и глобальные данные) (в случае нехватки ОЗУ можно на худой конец диск использовать), причем при сохранении указываем информацию, которая будет необходима для того, чтобы заменить значения соответствующих данных на сохраненные при новом старте образа (при добавлении кода и данных адреса смещаются)
далее запускаем новый процесс, который будет исполнять новый образ (формируем его адресное пространство, восстанавливая сохраненную информацию)
важно отметить, что модифицирование возможно только еще невыполнявшегося кода, поскольку иначе нельзя


Это сообщение отредактировал(а) MAKCim - 11.6.2007, 21:04


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Mayk
Дата 11.6.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 5
Всего: 134



Цитата(archimed7592 @  11.6.2007,  22:02 Найти цитируемый пост)
Mayk, точно технологию не знаю, но, вроде как "онлайн" модификация исходника реализуется посредством рефлексии, которую поддерживает .net, но не поддерживает c++(не дай Б-г такое счастье

Два месяца назад я сдавал лабы на с++, которые были выполнены на winapi без всякого .net'а. При некрупных изменениях всё прекрасно работало. 

Цитата(MAKCim @  11.6.2007,  22:41 Найти цитируемый пост)
вообще говоря модифицирование кода задача тривиальная
не может быть, чтобы в GDB этой операции не было 

Вообще поиск даёт положительный ответ на запрос «gdb "fix and continue"»
Вот например
Цитата(http://www.ecos.sourceware.org/ml/gdb/2006-03/msg00162.html)

we have implemented a new GDB/GCC feature to fix a modified C source code into
a running program like it is done with DBX at Solaris. Is there any interest to include 
this changes into the GDB/GCC repository. This changes have only been done
for x86 systems.


Так что основания полагать что gdb это теоретически может уметь есть.
Дальнейшие следования по url'ам наводят на (правда это для darwin'а)
Цитата(darwingrok.physics.ox.ac.uk:8080/source/xref/gdb/src/gdb/fix-and-continue.c - )

  const char *usage = "Usage: fix bundle-filename source-filename [object-filename]";

но такой команды мой gdb не понимает. smile 




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 11.6.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Mayk @  11.6.2007,  21:59 Найти цитируемый пост)
но такой команды мой gdb не понимает

видно был собран без
Цитата

fix-and-continue.c



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
rvny
Дата 13.6.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 5.4.2007

Репутация: нет
Всего: нет



А ведь visual studio с 6ой версии кажется это умела делать? Т.е. с 1998 года у микрософт это было!
В 2003 с выходом net 1, 1.1 перестала работать (только переменные можно было смотреть).
А в 2005 visual studio снова появилось break , modify, and continue

Бывает ведь иногда нужно что-то подправить (В значениях переменных), либо дописать проверку, или изменить поведение внутри функции, но не естественно саму функцию (без изменения конечно передаваемых переменных).
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1185 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.