Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование Ruby как встроенного языка 
:(
    Опции темы
skmdeveloper
Дата 3.10.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Разрабатываю небольшую программку На Qt/C++.

В качестве расширений использую Ruby. 

Загружаю скрипт так:

Код

  ruby_script(filename);
    ruby_init_loadpath();
    rb_load_file(filename);
    ruby_exec();


Потом в нужном месте программы вызываю метод функцией класса Object  send.

Код

rb_funcall(self,rb_intern("send"),1,qtToRubyString(name)); // qtToRubyString()  - функция преобразования из данных из С++ в VALUE Ruby


Вообще то все работает. Только вот при синтаксических ошибках в скрипте выходит - [BUG] Segmentation fault и рушится все приложение.
В Debian и ArchLinux одно и то же.

Как это побороть, чтобы программа не вылетала?

Или Ruby не годится для этих целей?


Это сообщение отредактировал(а) skmdeveloper - 3.10.2009, 14:33
PM MAIL   Вверх
GrayCardinal
Дата 3.10.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



Так синтаксические ошибки можно проверять... 
ruby -c 
если не ошибаюсь.........


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


Новичок



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

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



Я не совсем точно выразился. Программа вылетает при любых ошибках, например вызове несуществующего метода.
У меня при открытии окна загружается скрипт и выполняется. Но если в скрипте что-то не так, то почему то рушится все приложение.

P.S. Сейчас сделал вызов функции не из кода на C++, а через eval. Хотя бы вменяемое сообщение об ошибке пишет. 






Это сообщение отредактировал(а) skmdeveloper - 3.10.2009, 18:02
PM MAIL   Вверх
skmdeveloper
Дата 3.10.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел решение в инете.

Вместо  rb_eval_string(char*) нужно использовать 

То есть вместо 
Код

   rb_eval_string(qtToCString(s)); 


Нужно делать так

Код

    int status;
    rb_eval_string_protect(qtToCString(s), &status); // запуск защищенной функции
     if (status) {
          qDebug() << QString("Ruby eval failed : %1").arg(status);  // печать сообщения об ошибке
          qDebug() << QString("ruby $! : %1").arg(STR2CSTR(rb_inspect(rb_gv_get("$!"))));
     }



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




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


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

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