2016-09-15 147 views
0

我有一些MagickWand代码,其中MagickReadImage()失败(返回MagickFalse)在一个系统上工作。如何在没有异常时调试MagickReadImage失败

现在没有发生异常,MagickGetException()返回一个空字符串,如果我正确理解文档,这意味着没有例外。

我想打开的文件在那里,我可以用同一用户下的其他工具打开它,并且我使用的magick_wand不是NULL。

呼叫周围的代码基本上是这样的:

// read image 
    MagickBooleanType status = MagickReadImage(magick_wand, fn_selector); 

    // make sure it worked 
    if (status == MagickFalse) 
    { 
      char *description; 
      ExceptionType severity; 
      description=MagickGetException(magick_wand,&severity); 
      fprintf(stderr,"%s %s %lu :%s: %u\n",GetMagickModule(),description,severity); 
      description=(char *) MagickRelinquishMemory(description); 
      fprintf(stderr, "magickwand couldn't read file %s\n", fn_selector); 
      exit(1); 
    } 

有没有办法找出为什么函数调用失败? MagickReadImage()似乎调用一个不容易调试的内部函数,并且我不想自己构建MagickWand库,如果不是绝对必要的话,可以添加调试内容。

使用MagickWand版本6.8.9.9(Debian的杰西)

回答

0

原来(通过strace去之后)的​​PDF阅读ImageMagick的一部分需要的ghostscript可执行文件(/usr/bin/gs)被安装在系统上。现在通过Debian apt软件包管理器安装ImageMagick时,ghostscript不是依赖项,只是Magick库的推荐。不幸的是,Magick并不认为有必要以任何方式通知您,当读取调用失败时库组件缺失。

安装ghostscript包后,一切都按预期工作。