FastXML代码编译和调试支持

FastXML代码编译和调试支持

平台:windows + vscode
编译器:cl.exe (MSVC 14.30.30705,推荐通过visual studio安装)

编译+链接

FastXML源代码提供了用于代码编译的Makefile.win。但问题是编译后无法调试,也就是编译的时候没有存储调试信息。

注意到在Windows平台下编译是利用的cl.exe,而似乎不能是gcc/g++(FastXML用到了一些库是msvc特有的),所以需要在Makefile.win里面指定cl编译选项/Zi

指定/Zi之后仍然有问题,发现调试的时候程序不会在断点处暂停,经排查得知gdb根本无法读取cl编译后的调试信息(有可能是gdb版本问题)。按照引用
得到解决,主要是launch.json的配置不能采用gdb,而应该是cl(cl既能编译也能调试)。
launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "cl.exe - 生成和调试活动文件",
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${fileDirname}\\binaries\\Windows\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "preLaunchTask": "cl.exe build active file"
        }
    ]
}

我也对Makefile.win做了一定的修改:

INC=/I..\Tools\c++
CXXFLAGS=/O2
all: fastXML_train fastXML_predict

fastXML_train:
	cl /Zi /EHsc \
	/Fe:binaries\Windows\fastXML_train.exe \
	/Fo:binaries\Windows\ \
	$(CXXFLAGS) \
	$(INC) \
	fastXML_train.cpp \
	fastXML.cpp \
	..\Tools\c++\mat.cpp

fastXML_predict:
	cl /Zi /EHsc \
	/Fe:binaries\Windows\fastXML_predict.exe \
	/Fo:binaries\Windows\ \
	$(CXXFLAGS) \
	$(INC) \
	fastXML_predict.cpp \
	fastXML.cpp \
	..\Tools\c++\mat.cpp

clean:
	del /f \
	binaries\Windows\fastXML_train.exe \
	binaries\Windows\fastXML_train.ilk \
	binaries\Windows\fastXML_train.pdb \
	binaries\Windows\fastXML_train.obj \
	binaries\Windows\fastXML_predict.exe \
	binaries\Windows\fastXML_predict.ilk \
	binaries\Windows\fastXML_predict.pdb \
	binaries\Windows\fastXML_predict.obj \
	binaries\Windows\fastXML.obj \
	binaries\Windows\mat.obj \

用法:

cd FastXML
# 会在binaries/Windows文件夹下生成.obj文件, pdb文件, ilk文件, .exe文件
nmake -f Makefile.win
# 清除已生成的文件
nmake -f Makefile.win clean

单独编译+链接

也可以采用单独编译的方法(不使用makefile),需要配置tasks.json如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "Compile with CL",
            "command": "cl.exe",
            "args": [
                "/O2",
                "/Zi",
                "/c",
                "/EHsc",
                "/Fo:${fileDirname}\\binaries\\Windows\\${fileBasenameNoExtension}.obj",
                "${file}",
                "/I${workspaceFolder}\\Tools\\c++"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "编译器: cl.exe"
        }
    ]
}

注意需要指定编译选项/c表示只编译,不链接。
如上会在binaries\Windows文件夹下生成.obj文件
链接命令:

link /DEBUG:FULL binaries/Windows/fastXML_train.obj binaries/Windows/fastXML.obj binaries/Windows/mat.obj /OUT:binaries/Windows/fastXML_train.exe
link /DEBUG:FULL binaries/Windows/fastXML_predict.obj binaries/Windows/fastXML.obj binaries/Windows/mat.obj /OUT:binaries/Windows/fastXML_predict.exe

这样就在binaries/Windows文件夹生成了.exe文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值