使用Visual Studio进行Clang 4.0调试
Clang 4.0 debugging using Visual Studio
我有一个项目,我仍在尝试在Windows上使用Clang和Visual Studio进行设置。需要注意的是,我已经参与了几个c++项目,但它们都是成熟的项目,我不必参与设置make文件或解决依赖关系,因此我想要一些这样做的经验。
作为澄清,我并没有使用LLVM内置在visual studio中的东西。我的目标是让visualstudio在拥有一个可以使用make文件但不使用CMake构建的项目的基础上提供便利。
到目前为止,我只有一个nmake项目的解决方案。这个nmake项目调用build.bat文件,该文件调用make文件。这个make文件看起来像这样:
# Based on PUXAN tutorial
# http://www.puxan.com/web/howto-write-generic-makefiles/
# Compiler choice
CC = clang++ -g -O0
CC_OBJ_FLAGS = -w -v -c
# Name of our executable and also the main run target
EXEC = ../bin/output.exe
# Here we get every cpp file in the source directory to make a list of source files
SOURCES = $(wildcard ../src/*.cpp)
# Here we have mapped all the cpp files to o files and now have a list of o files
TMP_OBJECTS = $(SOURCES:.cpp=.o)
OBJECTS = $(foreach obj,$(TMP_OBJECTS),$(subst src,obj,$(obj)))
INC = -I../lib/glfw-3.2.1/include
LINK = -L../lib/glfw-3.2.1/lib-vc2015 -lglfw3dll -lglfw3 -lopengl32
# compile list of o files into executable
# NOTE: when make is run without a target, the first target is chosen. This target
# should remain the first at all times
$(EXEC): $(OBJECTS)
$(CC) $(LINK) $(OBJECTS) -o $(EXEC)
# As each o file becomes a target, compile the associated cpp file into the o file
../obj/%.o: ../src/%.cpp
$(CC) $(CC_OBJ_FLAGS) $(INC) $< -o $@
# Remove the entire list of objects and the executable
clean:
rm -f $(EXEC) $(OBJECTS)
rebuild:
make -B
您会注意到,我已经包含了-g
和-O0
标志,它们应该输出符号,当然,我会为output.exe
生成一个pdb
文件(以及所有的o文件,但我稍后可以清理)。然而,当我在Visual Studio中调试项目时,它说模块的符号已经加载,但断点没有命中,我认为这是指pdb
没有引用源代码。以下是Visual Studio中的调试输出:
'output.exe' (Win32): Loaded 'W:ScratchEnginebinoutput.exe'. Symbols loaded.
关于Clang的2016年及之前的帖子提到,它还没有生成PDB文件,这是一项正在进行的工作,毫无疑问,Clang公司网站(https://clang.llvm.org/docs/MSVCCompatibility.html)提到调试信息是如何进行中的,但我应该能够使用/Z
和7
或i
生成CodeView信息。我已经尝试将/Zi
和/Z7
都直接传递给clang和链接器,但clang抱怨它们,链接器会忽略它们并发出警告。这个文档声称来自Clang 6,据我所知,它还没有发布,而且是实验性的。然而,使用带有-g
标志的Clang 4.0,我确实能够生成pdb
文件。
有人对此有任何进一步的信息吗?我还能提供什么来确定我是否正确设置了所有这些吗?我只是缺少了一个可以正确提供源的标志,还是缺少了visual studio中用于选择源的设置?我尝试在visualstudio的项目和解决方案级别手动设置源,但没有效果。我应该用某种pdb查看器查看pdb文件,看看源路径是否存在吗?
提前感谢您的帮助。
等效于-Z7
/-Zi
的clang
选项称为-gcodeview
(必须与-g
一起使用)。对于MSVC样式的命令行选项,您需要使用clang-cl
编译器驱动程序。
对于MSVC版本(https://llvm.org/builds/)它的工作原理如下图所示,但要在VS2017上设置clang,您需要首先安装Microsoft的平台工具集V1.40:
VS2017 Clang调试
项目->属性->C/C++->命令行->选项:"/Z7">
- 当回溯以零开始时,如何调试崩溃
- 奇怪的结构&GCC&clang(void*返回类型)
- 数据成员SFINAE的C++17测试:gcc vs clang
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 在linux上调试巨大的C++项目
- 为什么使用__LINE_的代码在发布模式下在MSVC下编译,而不是在调试模式下
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- Clang bug?使用指针作为模板参数
- 是否有 g++ 或 clang++ 调试选项来指导可变参数模板化
- 使用Visual Studio进行Clang 4.0调试
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- 在Windows 10上使用MINGW构建的Clang的调试构建无法运行
- 符号在Clang 3.3/3.4与GCC 4.8下调试时未出现的符号
- C++调试打印宏OS X Clang兼容
- 在gcc或clang中调试SFINAE
- 带有调试符号的Clang二进制文件太大
- Clang LLVM调试信息的中间表示
- Clang链接器问题和获取调试信息