Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование inline Assembler и debug проекта, intel syntax and debugging with qt 
:(
    Опции темы
Daigotsu
Дата 2.2.2012, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



День добрый!

Проблема: как правильно делать inline asm  на qt-с++, и как настроить дебаг(что бы была возможность идти по шагам по коду и по asm одновременно, либо хотя бы по отдельности), и как сдлеать автоматическую генерацию *.s файла?
Сел за Qt, так как нужно по учёбе сделать пару лабораторных на с++ с inline asm, да ещё что бы и gui был.
Использую gnu/linux (arch), QtCreator 2.4, qt 4.8.
Разобрался с использованием intel-синтаксиса, но как заставить всё работать - не знаю: вот пример на коленке:
{ я работаю и пишу на javaEE, js и тд, и с++ честно практически не знаю и не кодил на нём, хотя и asm по учёбе знаю}
Код

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    int i=0;
    __asm__ (".intel_syntax noprefix\n"
             "mov eax, 4\n"
             "mov i, eax\n"
             "   \n\t  .att_syntax"
    
    );
    printf("%i\n",i);
    return a.exec();
}

Все выходит с ошибкой 
(.text.startup+0x5a):-1: error: undefined reference to `i' 
---
Потом, как включить нормальный дебаггер? А то я вижу только asm код(он мне тоже нужен) но вкупе с нормальным листингом и желательно параллельно. 
--
Как сделать создание файла *.s автоматически, т.е. что бы запускать с ключём g++ -s ?

Спасибо!

PM MAIL   Вверх
boostcoder
Дата 2.2.2012, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



нужно же как минимум знать gcc-inline-assembler. попробуй почитай ;)

Добавлено через 4 минуты и 29 секунд
Цитата(Daigotsu @  2.2.2012,  22:13 Найти цитируемый пост)
как включить нормальный дебаггер? А то я вижу только asm код(он мне тоже нужен) но вкупе с нормальным листингом и желательно параллельно.

проект обозначь как отладочный.
PM WWW   Вверх
Daigotsu
Дата 2.2.2012, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 2.2.2012,  22:19)
нужно же как минимум знать gcc-inline-assembler. попробуй почитай ;)

Это наверное первая ссылка которую я открыл для себя когда начал разбираться. с at&t синт. всё ок! вот этот пример работает на ура: 
Код

int main(void)
{
        int foo = 10, bar = 15;
        __asm__ __volatile__("addl  %%ebx,%%eax"
                             :"=a"(foo)
                             :"a"(foo), "b"(bar)
                             );
        printf("foo+bar=%d\n", foo);
        return 0;
}

Но мне то нужен intel syntax! и вот с ним такой пример не проходит. 

Цитата

проект обозначь как отладочный.
 
спасибо, но что то никак он не желает показать что мне нужно. в вкладке projects - выставил edit build configuration в "Qt 4.8 ....(Debug)" 
потом перехожу во вкладку дебаг - нажимаю f5 - в итоге даже на breakpoint не останавливается. А если жму паузу - переходит в асм вид. блин.

Это сообщение отредактировал(а) Daigotsu - 2.2.2012, 22:37
PM MAIL   Вверх
boostcoder
Дата 2.2.2012, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(Daigotsu @  2.2.2012,  22:25 Найти цитируемый пост)
мне то нужен intel syntax

никогда не слышал чтоб gcc-inline-assembler записывался интеловским синтаксисом %)
возможно, это просто невозможно... используй AT&T ситаксис.
PM WWW   Вверх
Daigotsu
Дата 2.2.2012, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 2.2.2012,  22:59)
Цитата(Daigotsu @  2.2.2012,  22:25 Найти цитируемый пост)
мне то нужен intel syntax

никогда не слышал чтоб gcc-inline-assembler записывался интеловским синтаксисом %)
возможно, это просто невозможно... используй AT&T ситаксис.

не, это можно, конечно 
g++ -masm=intel  и будет счастье. тем более без переменной i : 
Код

    int i=0;
    __asm__ (".intel_syntax noprefix\n"
             "mov eax, 4\n"
             "mov i, eax\n"  // - БЕЗ ЭТОЙ СТРОКИ -  ВСЁ СОБИРАЕТСЯ. 
             "   \n\t  .att_syntax"
    
    );

(из первого сообщения) всё успешно компилится. примеры я находил на просторах сети, но не нашёл как же с переменными обращаться. 

Это сообщение отредактировал(а) Daigotsu - 2.2.2012, 23:11
PM MAIL   Вверх
boostcoder
Дата 2.2.2012, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(Daigotsu @  2.2.2012,  23:10 Найти цитируемый пост)
не нашёл как же с переменными обращаться.

ссылку же дал. хоть раз уже прочти что-нибудь ;)
PM WWW   Вверх
Daigotsu
Дата 3.2.2012, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мммм... Да я прочитал про gcc'шный асм . уже и вроде с ним разобрался. НО я всё же хочу прикрутить intel-syntax. там только сравнение их. но не использование. 
и вопрос про дебаггер открыт, правильно я сделал?
PM MAIL   Вверх
Sahab
Дата 3.2.2012, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Daigotsu @  3.2.2012,  00:28 Найти цитируемый пост)
и вопрос про дебаггер открыт

полную пересборку проекта делал?
в pro-файле в конфиг не указано release?
Во вкладке Проекты->Настройки сборки->Этапы сборки (qmake) -> Конфигурация сборки - Отладка(Debug) стоит?

Добавлено через 1 минуту и 22 секунды
Да... И желательно убрать галочку "Запускать в терминале" в Настройках запуска.
PM MAIL   Вверх
Daigotsu
Дата 4.2.2012, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо,  Sahab. вроде всё получилось. 

А насчёт asm - выучил at&t синтаксис и горя не знаю =) единственное что раздражает чуток - это полное невзаимодействие qtcreator с __asm__ вставкой. Он ее не хочет нормально выравнивать по ctrl+I , да и переменные которые упоминаются во вставке - вся равно для него являются неиспользуемыми и подчёркиваются. Но это мелочи, да.
PM MAIL   Вверх
Sahab
Дата 5.2.2012, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Daigotsu @  4.2.2012,  07:26 Найти цитируемый пост)
 Он ее не хочет нормально выравнивать по ctrl+I , да и переменные которые упоминаются во вставке - вся равно для него являются неиспользуемыми и подчёркиваются. Но это мелочи, да. 

Он еще и из c++11 не все поддерживает - регулярно шлю фидбеки...
но пока наилучшая IDE на мой взгляд (имхо, не холивара ради).
PM MAIL   Вверх
Daigotsu
Дата 11.2.2012, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Sahab @ 5.2.2012,  00:32)
Он еще и из c++11 не все поддерживает - регулярно шлю фидбеки...
но пока наилучшая IDE на мой взгляд (имхо, не холивара ради).

Ну хорошо, но подскажите, как мне сделать такую простую вещь - пишу метод в хедере - в описании класса автоматом он не появляется и остаётся вписывать его туда руками. Может есть хоткей какой особый для этого? Потом, в хедере изменил тип метода - НОЛЬ реакции и никаких подчёркиваний. пф. так же если хочу изменить  аргументы в методе. КАК такие простые вещи реализовать в этой ide? В том же eclipse - это само собой разумеется.

PM MAIL   Вверх
math64
Дата 11.2.2012, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



В QtCreator существуют следующие помощники для создания методов:
1. В дизайнере - "перейти к слоту", в заголовке появляется объявление слота, и в исходнике  - его заготовка
При переименовании компонента нужно в ручную переименовывать слот (или воспользоваться 2)
2. Переименовние метода, поля, класса, локальной переменной и т.д. - Ctrl-Shift-R. Пользоваться внимательно: иногда переименовывает неправильно (места где будут переименования показываются в окне поиска)
3. Переопределение виртуального метода в производном классе.
Нужно знать возвращаемое значение и секцию (public/protected) - по этому поводу подсказок не будет.
Ввести в нужной секции возвращаемое значение и первые буквы метода, Ctrl-Enter - будет подсказка по методам, начинающимся также.
При длинном названии из нескольких слов - можно вводить только заглавные буквы.
Выбираете вариант - вставляется название и скобки без аргументов.
нажимаете Ctrl-Enter, стоя после открывающейся скобки - появляются подсказки по аргументам.
Аналогично вводите заготовку метода в исходинике - но там ещё нужно вводить имя класса.
Также есть подсказки при вызове методов, в том числе подсказки для сигналов и слотов в вызове connect()

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




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


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

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