LINUX.ORG.RU

GDB libmysqlclient

 , ,


0

1

доброго дня! Использую g++ + сmake + удаленный gdb. Проблема следующая - когда запускаю удаленную пошаговую отладку - в месте вызова функции из библиотеки типа libmysqlclient.so - дебаг просто уходит в небытие. Вопрос такой - как можно дебагеру подсказать что делать с этими вызовами? Мне в принципе опускаться внутрь работы этих функций смысла нет, просто корректно обходить и все.



Последнее исправление: noweapon (всего исправлений: 1)
Ответ на: комментарий от pon4ik

а он просто как бы останавливается и все, никаких адресов , сообщений ничего, но при этом сам дебаг активный судя по кнопке остановить. Как проверить и куда что посмотреть можно? UPD: New LWP пишет и все

noweapon
() автор топика
Последнее исправление: noweapon (всего исправлений: 1)

Библиотека собрана с отладочными символами?

удаленную пошаговую отладку

Мапинг путей правильно прописал?

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Все заканчивается на mysql_init(NULL). Оказывается она и без отладки не работает (только почему мне дебагер молчит об этом не понятно), при этом в рядом лежащем проекте она вызывается успешно и дебаг с ней дружит. ничего не понимаю… Что такое маппинг и где его прописывать?

noweapon
() автор топика
Последнее исправление: noweapon (всего исправлений: 1)
Ответ на: комментарий от noweapon

Оказывается она и без отладки не работает

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

Что такое маппинг и где его прописывать?

Чтобы отладчик мог найти и сопоставить файлы с исходниками библиотеки. Это нужно, если ты собирал библиотеку по другому пути и сейчас по этому пути исходников нет. set substitute-path /foo/bar /mnt/cross. Читай здесь.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

а как потоки посмотреть ? Вот что заметил - нажал паузу, висит. Нажал продолжить и дальше побежал. что это может быть? Причем каждый раз по разному, иногда без паузы достаточно 10 секунд подождать , иногда только пауза выручает. Это именно на первой функции инициализации mysql_init(NULL), дальше уже все быстрее и прыгает по вызовам нормально (но все равно не подключается почему то)

noweapon
() автор топика
Ответ на: комментарий от noweapon

а как потоки посмотреть?

Это зависит от того где смотришь. GUI и консольный отладчик. Загугли свой вариант.

ox55ff ★★★★★
()
Ответ на: комментарий от noweapon

Скорее всего - у тебя многопоточное приложение, основной поток спит, остальные работают в фоне, либо твой процесс просто засыпает на ожидании ввода-вывода. Чтобы заморозить нулевой поток можно нажать <ctrl-C> и затем написать info threads.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от noweapon

Судя по ответам в теме, тебе явно надо разобраться с двумя концепциями системного программирования прежде чем продолжить:

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

Есть древние но годные, имхо, лекции по первой теме. По второй, да и по первой теме можно почитать у Таненбаума в современных операционных системах, но там конечно не сказать что прям образец изложения и понятности, особенно в русском переводе.

pon4ik ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.