Doxygen 在尝试使用“错误:编写图 1 图形时出现问题!”修补“修补输出文件”时崩溃

问题描述

所以我有一个非常奇怪的错误。每当我包含我的 javadoc 的这一部分

    /**
     * Maps a get request that gets the SSE stream with the given UUID
     *
     * @param id UUID of SSE stream to get
     * @return SSE stream for the given UUID
     */
    @GetMapping("/stream/{id}")
    public SseEmitter streamSseMvc(@PathVariable UUID id)

(我知道 Javadoc 很糟糕,但这不是现在的重点。) 我的 doxygen 使用以下命令崩溃:doxygen -d extcmd .\doxygen.txt 生成所有继承和协作图后,此错误消息:

Running dot for graph 22/22
Patching output file 1/15
Patching output file 2/15
Patching output file 3/15
Patching output file 4/15
error: problem writing fig 1 figure!
lookup cache used 342/65536 hits=1089 misses=535
finished...

修复此错误的唯一方法删除出现此 JavaDoc 的整个文件或仅删除该 Javadoc 部分。我还没有能够进一步缩小范围,因为错误发生在 javadoc 的三个部分中的任何一个,但没有出现在空的 javadoc 正文中。我也没有在其他文件中遇到此 Javadoc 错误

    /**
     * Maps a get request for getting a sensors Metadata by UUID.
     *
     * @param id UUID of sensor to get
     * @return sensor with given UUID,if present
     */
    @GetMapping("/{id}")
    public Sensor getSensor(@PathVariable UUID id)

更奇怪的是,当我尝试将其输出文件时,错误显示在我的 Powershell 中,结果是:

Doxygen version used: 1.9.1 (ef9b20ac7f8a8621fcfc299f8bd0b80422390f4b)
Searching for include files...
Searching for example files...
Searching for images...
Searching for dot files...
Searching for msc files...
Searching for dia files...
Searching for files to exclude
Searching INPUT for files to process...
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/controllers
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/exceptions
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/models
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/out
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/repository
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services
Searching for files in directory C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/util
Reading and parsing tag files
Parsing files
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/BackendApplication.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/BackendApplication.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/RESTConfiguration.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/RESTConfiguration.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebConfig.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebConfig.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebInitializer.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebInitializer.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebSecurityConfig.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/configs/WebSecurityConfig.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/controllers/ObservationController.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/controllers/ObservationController.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/controllers/SensorController.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/controllers/SensorController.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/exceptions/ExceptionController.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/exceptions/ExceptionController.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/exceptions/SensorNotFoundException.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/exceptions/SensorNotFoundException.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/models/Observation.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/models/Observation.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/models/Sensor.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/models/Sensor.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/repository/ObservationRepository.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/repository/ObservationRepository.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/repository/SensorRepository.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/repository/SensorRepository.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/ObservationService.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/ObservationService.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/ObservationServiceImp.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/ObservationServiceImp.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/SensorService.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/SensorService.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/SensorServiceImp.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/services/SensorServiceImp.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/util/HouseKeeper.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/util/HouseKeeper.java...
Reading C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/util/JsonSerializer.java...
Parsing file C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/main/java/edu/teco/sensordatenbankmanagementsystem/util/JsonSerializer.java...
Building macro deFinition list...
Building group list...
Building directory list...
Building namespace list...
Building file list...
Building class list...
Computing nesting relations for classes...
Associating documentation with classes...
Building example list...
Searching for enumerations...
Searching for documented typedefs...
Searching for members imported via using declarations...
Searching for included using directives...
Searching for documented variables...
Building interface member list...
Building member list...
Searching for friends...
Searching for documented defines...
Computing class inheritance relations...
Computing class usage relations...
Flushing cached template relations that have become invalid...
Computing class relations...
Add enum values to enums...
Searching for member function documentation...
Creating members for template instances...
Building page list...
Search for main page...
Computing page relations...
Determining the scope of groups...
Sorting lists...
Determining which enums are documented
Computing member relations...
Building full member lists recursively...
Adding members to member groups.
Computing member references...
Inheriting documentation...
Generating disk names...
Adding source references...
Adding xrefitems...
Sorting member lists...
Setting anonymous enum type...
Computing dependencies between directories...
Generating citations page...
Counting members...
Counting data structures...
Resolving user defined references...
Finding anchors and sections in the documentation...
Transferring function references...
Combining using relations...
Adding members to index pages...
Correcting members for VHDL...
Computing tooltip texts...
Generating style sheet...
Generating search indices...
Generating example documentation...
Generating file sources...
Parsing code for file BackendApplication.java...
Parsing code for file configs/RESTConfiguration.java...
Parsing code for file configs/WebConfig.java...
Parsing code for file configs/WebInitializer.java...
Parsing code for file configs/WebSecurityConfig.java...
Parsing code for file controllers/ObservationController.java...
Parsing code for file controllers/SensorController.java...
Parsing code for file exceptions/ExceptionController.java...
Parsing code for file exceptions/SensorNotFoundException.java...
Parsing code for file models/Observation.java...
Parsing code for file models/Sensor.java...
Parsing code for file repository/ObservationRepository.java...
Parsing code for file repository/SensorRepository.java...
Parsing code for file services/ObservationService.java...
Parsing code for file services/ObservationServiceImp.java...
Parsing code for file services/SensorService.java...
Parsing code for file services/SensorServiceImp.java...
Parsing code for file util/HouseKeeper.java...
Parsing code for file util/JsonSerializer.java...
Generating file documentation...
Generating page documentation...
Generating group documentation...
Generating class documentation...
Generating docs for compound RuntimeException...
Generating namespace index...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::BackendApplication...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::configs::RESTConfiguration...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::configs::WebConfig...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::configs::WebInitializer...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::controllers::ObservationController...
Generating call graph for function edu.teco.sensordatenbankmanagementsystem.controllers.ObservationController.streamSseMvc
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::controllers::SensorController...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::exceptions::ExceptionController...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::exceptions::SensorNotFoundException...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::models::Observation...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::models::Sensor...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::repository::ObservationRepository...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::repository::SensorRepository...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::services::ObservationService...
Generating caller graph for function edu.teco.sensordatenbankmanagementsystem.services.ObservationService.getDataStream
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::services::ObservationServiceImp...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::services::SensorService...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::services::SensorServiceImp...
Generating docs for compound edu::teco::sensordatenbankmanagementsystem::util::HouseKeeper...
Generating graph info page...
Generating directory documentation...
Generating index page...
Generating page index...
Generating module index...
Generating namespace member index...
Generating annotated compound index...
Generating alphabetical compound index...
Generating hierarchical class index...
Generating graphical class hierarchy...
Generating member index...
Generating file index...
Generating file member index...
Generating example index...
finalizing index lists...
writing tag file...
Running plantuml with JAVA...
Running dot...
         #REMOVED BECAUSE OF CHaraCTER LIMIT
Running dot for graph 22/22
Patching output file 1/15
Patching output file 2/15
Patching output file 3/15
Patching output file 4/15
lookup cache used 342/65536 hits=1089 misses=535
finished...

如您所见,由于某种奇怪的原因,错误没有出现,但它确实出现在我的 Powershell 中。我不知道这些信息是否有用,但我想我会把它包括在内。

编辑: 我的 Doxygen 配置文件内容如下(我删除评论):

warning: Tag 'TCL_SUBST' at line 237 of file '.\doxygen.txt' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag 'COLS_IN_ALPHA_INDEX' at line 997 of file '.\doxygen.txt' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag 'PERL_PATH' at line 2015 of file '.\doxygen.txt' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
warning: Tag 'MSCGEN_PATH' at line 2037 of file '.\doxygen.txt' has become obsolete.
         To avoid this warning please remove this line from your configuration file or upgrade it using "doxygen -u"
# Difference with default Doxyfile 1.9.1 (ef9b20ac7f8a8621fcfc299f8bd0b80422390f4b)
PROJECT_NAME           = "Sensor Ultra-lightweight Supervision:Active Meteorological ObservationGeneral Use System"
OUTPUT_DIRECTORY       = out
ABBREVIATE_BRIEF       =
STRIP_FROM_PATH        = C:\Users\Surface\IdeaProjects\KIT-PSE_Sensordatenbankmanagementsystem\Backend\src\main\java\edu\teco\sensordatenbankmanagementsystem
STRIP_FROM_INC_PATH    = C:\Users\Surface\IdeaProjects\KIT-PSE_Sensordatenbankmanagementsystem\Backend\src\main\java\edu\teco\sensordatenbankmanagementsystem
TAB_SIZE               = 2
OPTIMIZE_OUTPUT_FOR_C  = YES
BUILTIN_STL_SUPPORT    = YES
EXTRACT_PRIVATE        = YES
EXTRACT_STATIC         = YES
EXTRACT_ANON_NSPACES   = YES
HIDE_ScopE_NAMES       = YES
SHOW_USED_FILES        = NO
SHOW_NAMESPACES        = NO
FILE_PATTERNS          =
RECURSIVE              = YES
EXAMPLE_PATTERNS       =
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION    = YES
VERBATIM_HEADERS       = NO
IGnorE_PREFIX          = edu/teco/sensordatenbankmanagementsystem
HTML_TIMESTAMP         = YES
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
LATEX_CMD_NAME         = latex
COMPACT_LATEX          = YES
MACRO_EXPANSION        = YES
HIDE_UNDOC_RELATIONS   = NO
HAVE_DOT               = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
DOT_IMAGE_FORMAT       = jpg
INteraCTIVE_SVG        = YES

所以我尝试创建一个 MWE,发现我的问题出在另一个文件中:

public interface ObservationService {

    /**
     * This will return a prevIoUsly created Datastream from its specified UUID.
     * If there is no DataStream under the given UUID,none will be created
     * @param id The UUID of the Datastream
     */
    SseEmitter getDataStream(UUID id);

}

public class StackOverflowTest {
    ObservationService observationService;

    /**
     * Maps a get request that gets the SSE stream with the given UUID
     *
     * @param id UUID of SSE stream to get
     * @return SSE stream for the given UUID
     */
    @GetMapping("/stream/{id}")
    public SseEmitter streamSseMvc(@PathVariable UUID id) {
        return observationService.getDataStream(id);
    }
}

只要我(再次)删除接口中的 Javadoc 部分或类,我就不会出错。

解决方法

经过一些讨论,问题的根本原因是使用的路径,这导致要生成的点文件的文件名很长,并出现类似警告:

C:/Users/Surface/IdeaProjects/KIT-PSE_Sensordatenbankmanagementsystem/Backend/src/test/java/edu/teco/sensordatenbankmanagementsystem/out/html/interfaceedu_1_1teco_1_1sensoordatenbankmanagementsystem_1_1_observation_service_a93e02c2aaa18cd15de76e8b5f8313e4a_icgraph.dot 

这个名称有 267 个字符,对于某些文件系统来说可能有点太长了。

可以通过设置doxygen设置来缓解一些压力:

SHORT_NAMES=YES

文档(参见:https://www.doxygen.nl/manual/config.html#cfg_short_names)说:

SHORT_NAMES

如果 SHORT_NAMES 标签设置为 YES,doxygen 将生成更短(但可读性较差)的文件名。这在您的文件系统不支持像 DOS、Mac 或 CD-ROM 那样的长名称时很有用。

默认值为:NO。 这给出了一个更短的名称。