2016-09-15 59 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包後,一切都按預期工作。