背景
Mapnik作为一个地图符号化开源库,在GIS行业得到广泛使用。在引用到自己的工程时,可能需要对其进行修改、编译、调试,最终生成拥有自己特色的地图符号化工具,但是按照官方的安装步骤,最后得到的是release版本,不能对其修改。本人最近再做地图符号化,对mapnik进行了研究,终于可以对其进行debug,以下是解决方法。
解决方法
从github上下载好mapnik后,在mapnik目录下有一个SConstruct文件,打开并定位到302行,显示如下图
将BoolVariable(‘DEBUG’, ‘Compile a debug version of Mapnik’, ‘False’),中的False修改为True,之后执行Make即可编译生成debug版本。
此时使用gdb运行mapnik-render即可进入调试模式。
使用VSCode进行调试mapnik-render
使用gdb调试,需要掌握许多gdb命令,没有IDE调试方便,因此决定使用vscode进行调试。以下是进行vscode配置mapnik相关步骤
1,下载cmake相关插件:make、cmaketool
2,编写CMakelists.txt文件(和mapnik-render.cpp同一目录)
cmake_minimum_required(VERSION 2.8.12)
project(MapRender)
#设置编译模式
#=================================================================
SET(CMAKE_BUILD_TYPE DEBUG)
#SET(CMAKE_BUILD_TYPE RELEASE)
#=================================================================
#设置编译配置
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror") #警告变错误
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -fpermissive") #忽视警告
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -pthread -fPIC -std=c++11")
find_package(Boost 1.58.0 REQUIRED system)
#指定包含头文件
include_directories(
"./"
/home/weibaox/xwb/mapnik-v3.0.23/include
/home/weibaox/xwb/mapnik-v3.0.23/include/mapnik/util
/home/weibaox/xwb/mapnik-v3.0.23/deps/mapbox/variant/include
)
FILE(GLOB_RECURSE PROJECT_SOURCES
"./mapnik-render.cpp")
link_directories(../../src)
ADD_EXECUTABLE(${PROJECT_NAME} ${PROJECT_SOURCES})
target_link_libraries(${PROJECT_NAME}
mapnik
libmapnik.so.3
icuuc
${Boost_LIBRARIES}
boost_program_options
)
注意:运行时如果提示找不到libmapnik.so.3.0,可以把src下生成的libmapnik.so.3.0复制到系统库目录下。
3,配置lanch.json
因为mapnik-render需要启动参数(xml文件、输出图片名),因此需在lanch.json中配置。 其中的“args”节点后面跟的就是启动参数:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/MapRender",
"args": ["${workspaceFolder}/xml/test.xml","test.png"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
总结
以上方法是本人通过实践总结的经验,现提供出来供大家参考。