-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Write 'Hello, world!' program #1
Comments
Катя:
|
Верно: берём финч и выкидываем всё кроме инициализации. Затем находим вызов, который отвечает за отправку сообщения и пытаемся его вызвать. Эту ссылку тоже стоит посмотреть: http://libpurple.com/category/getting-started/ |
Немного непонятно: И еще вопрос по той ошибке:
Я еще попробовала так |
Здесь решение:
Нет, это не эквивалентные команды. |
Привет! С Рождеством! 2 хинта насчёт отладки:
Для события отправки сообщения удобнее всего ставить breakpoint на send() или родственные вызовы. Возможно write(), но он словит много ненужных событий -- поэтому его в последнюю очередь, если send(), sendto(), sendmsg() не сработают. Универсальный совет: не забывай, что программа как чёрный ящик для нас неизвестная система. Поэтому не предполагай, что первый сработавший breakpoint будет именно тем, чем надо. Посчитай все сработавшие брейки, сравни их стеки (а иногда ещё и аргументы) и только тогда делай выводы. |
С gdb опять вопрос.
в
Но здесь одни библиотеки, получается это не то, что нам надо. Или надо здесь что-то искать? Мне непонятно я что-то не то делаю и надо ставить точки останова на другие вызовы или же надо как-то разбираться вот с этими so библиотеками. |
Пожалуйста, посмотри на стек повнимательнее: gethostbyname() это DNS запрос. Он тебе не нужен. Ищи другой вызов send(). Ещё раз осмысли "универсальный совет". Также, у тебя подключилась системная libpurple, поэтому ты не видишь её символов. Подключи свою откомпилированную (LD_LIBRARY_PATH). |
Тогда
|
Возможно да, возможно нет. Ты мне скажи. "Универсальный совет" выполнила? Не спеши с вопросами. Сделай всё как положено: Также, у тебя подключилась системная libpurple, поэтому ты не видишь её символов. Подключи свою откомпилированную (LD_LIBRARY_PATH). |
Да, если я все правильно поняла. Вывод, который я скидывала, 11-ый (на 20-ом еще jabber_close () появляется), всего 22:
Про |
Между 11-м и 20-м jabber_auth_start() не исчезает? Или с 11 по 19 стек всегда одинаковый? Не надо это в .bashrc делать. Создай свой отдельный скрипт для запуска данного приложения в gdb (положи его прям в исходники или рядом). |
Исчезает |
Ну вот. Проанализируй подробнее. Выбери все варианты стеков с 11 по 19. |
Кстати, тебе нужны только те стеки, которые появляются непосредственно после того как ты нажала "Отправить сообщение". И всё, больше никаких других событий в программе не производишь. |
Привет! Извиняюсь, что так долго не писала. Мне кажется, то, что нужно в первом это 12-ый фрейм (common_send), во втором 20-ый (serv_send_im), в третьем 12-ый (purple_conversation_write) и возможно 14-ый (finch_write_im). Теперь мне соответственно надо смотреть conversation.c, server.c, gntconv.c ? |
Нет, теперь просто breakpoint-ом встаёшь на 4 этих вызова и выбираешь из них только те, которые срабатывают только на отправке сообщения. |
Все 4 вызова срабатывают только при отправке сообщения, таким образом:
Теперь надо исходники смотреть, в смысле больше никак нельзя уточнить, какой вызов отвечает за отправку? Скорее всего, судя по аргументам, server.с получается. |
Вообще-то это очевидно, что все они срабатывают только на отправку (сорри, я посмотрел стеки только сейчас). Почему: во всех стеках есть вызов |
Посмотри, пожалуйста, ошибки при компиляции.
Компилирую так:
Ошибки:
Непонятно почему undefined reference, ведь я добавила директории через -I в gcc. |
Опция |
Спасибо, добавила в конец команды
Теперь мне надо в gdb смотреть как вызываются |
Ты сравнивала содержимое своего conv с настоящим? Наверняка что-то проинициализировано не до конца. Думаю, можно и по коду посмотреть где и чего ты забыла вызвать.
Если эти вызовы исполняются, зачем ты их хочешь добавлять в программу? |
Добавила
Я не понимаю, что происходит с моей переменной
а это мой:
(оба из вызова |
Вообще-то не Ещё, используй мой |
В
настоящий:
Инициализацию я прошагивала, меня что-то конкретное должно интересовать? |
Да, похоже Также можно отследить весь путь жизни |
Что-то вышло :), по крайней мере сообщение отсылает. |
Program should connect to 'jabber.ru' server and send 'Hello, world!' to an account specified from command line.
The text was updated successfully, but these errors were encountered: