Отладка кода C, использующего libtiff

Я написал много кода за эти годы, но я мало что сделал с C в контексте Linux. Я также не настолько хорошо знаком с инструментами и утилитами, как мне кажется, должен быть. Заранее спасибо за снисходительность.

Я пытаюсь написать код C, который использует libtiff. Мне нужно иметь возможность отлаживать его построчно, включая пошаговый просмотр исходного кода libtiff по мере необходимости. Я использую IDE Code::Blocks, и она настроена и работает для базового кода «hello world», а также для элементарного вызова libtiff для проверки концепции. Это все работает.

Вот мой код:

#include "tiffio.h"
main()
    {
    TIFF* tif = TIFFOpen("test0.tiff", "r");
    if (tif) {
        uint32 imagelength;
        tdata_t buf;
        uint32 row;

        TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength);
        buf = _TIFFmalloc(TIFFScanlineSize(tif));
        for (row = 0; row < imagelength; row++)
            TIFFReadScanline(tif, buf, row, 0);
        _TIFFfree(buf);
        TIFFClose(tif);
        }
}

Прохождение моего кода выше работает нормально. Однако я не могу войти ни в один из вызовов функций libtiff. В настоящее время я использую Ubuntu, используя libtiff по умолчанию, установленный через apt-get. Я предполагаю, основываясь на некоторых чтениях, которые я сделал, что библиотека не построена с отладочными символами, которые могут быть источником моей проблемы.

Я предполагаю, что если это действительно проблема, я могу скомпилировать пользовательскую версию libtiff с нужными мне параметрами и компилировать/связывать Code::Blocks с ней, а не с системными библиотеками по умолчанию. Я скачал свежую копию libtiff и знаком с процессом установки make/make, но я не уверен в особенностях правильной настройки компиляции для того, что мне нужно. Некоторое направление было бы высоко оценено.


person user8116088    schedule 15.01.2018    source источник
comment
Обычно в Debian есть пакеты -dbg с символами отладки, используйте apt-cache search libtiff, чтобы увидеть, есть ли пакет libtiff-gdb. Если нет, то вам придется собрать libtiff с параметром -g в CFLAGS. Я не знаю, есть ли пакеты -dbg для всех библиотек.   -  person Pablo    schedule 15.01.2018
comment
Вы пытались использовать gdb?   -  person Eliad Cohen    schedule 15.01.2018
comment
Хорошо, я заработал. Удалил системный libtiff и настроил блоки кода для компиляции/связывания с моей локальной копией в соответствии с параметром -g в CFLAGS, как было предложено выше. Теперь проходим через исходники libtiff по желанию. пришлось указать блоки кода, где все было (меню Project->Build Options) Спасибо!   -  person user8116088    schedule 16.01.2018


Ответы (1)


Проблема решена путем удаления системного libtiff (не обязательно, но мне было проще всего избежать двусмысленности в отношении того, какую версию libtiff я использовал). Затем настроил Code::Blocks следующим образом (Project->Build Options):

  • Производить отладочные символы (-g) отмечен флажком
  • Включить общие предупреждения компилятора установлен флажок
  • Другие параметры компилятора установлены на -fPIC
  • Настройки компоновщика -> Другие параметры компоновщика, для которых задано значение -ltiff -L.
  • Каталоги поиска -> Компилятор установлен на
  • Каталоги поиска -> Linker установлен на
  • Для $LD_LIBRARY_PATH задано значение /home/depaan/amcdev/libtiff0/lib в Настройках -> Среда -> Переменные среды (меню)

Раньше я выполнял libtiff локально, как обычно, с помощью configure, make, make install...

./configure --prefix=<desired_libtiff_location>

И CFLAGS установлен на "-g"

export CFLAGS="-g"
person user8116088    schedule 16.01.2018