调试使用libtiff的C代码

调试使用libtiff的C代码,c,codeblocks,libtiff,C,Codeblocks,Libtiff,这些年来,我写了很多代码,但在linux环境下,我对C做的不多。我也不像我认为的那个样熟悉那个些工具和实用工具。提前感谢您的宽容 我正在尝试编写一些使用libtiff的C代码。我需要能够逐行调试它,包括适当地单步调试libtiff源代码。我正在使用Code::Blocks IDE,并对其进行了配置,用于基本的“hello world”代码,以及用于概念验证目的的libtiff的基本调用。这一切都在起作用 这是我的密码: #include "tiffio.h" main() { T

这些年来,我写了很多代码,但在linux环境下,我对C做的不多。我也不像我认为的那个样熟悉那个些工具和实用工具。提前感谢您的宽容

我正在尝试编写一些使用libtiff的C代码。我需要能够逐行调试它,包括适当地单步调试libtiff源代码。我正在使用Code::Blocks IDE,并对其进行了配置,用于基本的“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);
        }
}
#包括“tiffio.h”
main()
{
TIFF*tif=TIFFOpen(“test0.TIFF”、“r”);
如果(tif){
uint32图像长度;
tdata_t buf;
uint32行;
TIFFGetField(tif、TIFFTAG_IMAGELENGTH和IMAGELENGTH);
buf=_TIFFmalloc(TIFFScanlineSize(tif));
用于(行=0;行<图像长度;行++)
TIFFReadScanline(tif、buf、row、0);
_tiffee(buf);
TIFFClose(tif);
}
}
单步执行上面的代码效果很好。然而,我不能插手任何事情 libtiff函数调用的。我目前在ubuntu上,使用通过apt get安装的默认libtiff。根据我所做的一些阅读,我假设库不是用调试符号构建的,这可能是我问题的根源


我假设如果这确实是问题所在,那么我可以使用所需的选项编译libtiff的自定义版本,并让Code::Blocks针对它而不是针对系统默认库进行编译/链接。我已经下载了libtiff的一个新副本,并且熟悉make/make安装过程,但是我不确定如何正确设置编译以满足我的需要。如果您能提供一些指导,我们将不胜感激。

通过卸载系统libtiff解决了这个问题(这不是绝对必要的,但对我来说最容易避免对我使用的libtiff版本产生歧义)。然后按如下方式配置代码::块(项目->构建选项):

  • 已选中生成去毛刺符号(-g)
  • 已选中启用通用编译器警告
  • 其他编译器选项设置为-fPIC
  • 链接器设置->其他链接器选项设置为-ltiff-L
  • 搜索目录->编译器设置为
  • 搜索目录->链接器设置为
  • $LD_LIBRARY_路径在设置->环境->环境变量(菜单)中设置为/home/depaan/amcdev/libtif0/lib
我以前按照通常的配置、制作、制作和安装在本地编译了libtiff。。。与

./configure --prefix=<desired_libtiff_location>

通常Debian有带有调试符号的
-dbg
包,使用
apt cache search libtiff
查看是否有libtiff gdb包。如果没有,那么您必须在CFLAGS中使用-g构建自己的libtiff。我不知道是否所有lib都有-dbg包。您是否尝试使用了
gdb
?好的,我让它工作了。卸载了系统libtiff,要针对本地副本编译/链接的设置代码块符合CFLAGS中的-g,如上所述。现在根据需要逐步浏览libtiff源。必须告诉代码块所有东西的位置(项目->构建选项菜单)谢谢!
export CFLAGS="-g"