Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 无法获取要解析的lldb位置_Cmake_Lldb - Fatal编程技术网

Cmake 无法获取要解析的lldb位置

Cmake 无法获取要解析的lldb位置,cmake,lldb,Cmake,Lldb,我试图使用cmake和lldb从命令行编译和调试。我不确定这为什么不起作用: cmake_minimum_required (VERSION 2.6) project (etest) include_directories(src) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -g") add_executable(etest src/m.cpp) set_property(TARGET etest PROPERTY CXX_STANDA

我试图使用cmake和lldb从命令行编译和调试。我不确定这为什么不起作用:

cmake_minimum_required (VERSION 2.6)
project (etest)
include_directories(src)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -g")
add_executable(etest src/m.cpp)
set_property(TARGET etest PROPERTY CXX_STANDARD 14)
set_property(TARGET etest PROPERTY CXX_STANDARD_REQUIRED ON)
然后:


我认为
-g
选项对于将调试位置添加到可执行文件以用于lldb是必要的,但我已经尝试了几个小时的各种调整,无法解决任何问题。我遗漏了什么?

lldb中有一个错误,这意味着您必须仅使用文件名设置断点,或者必须使用调试信息中记录的完整路径。部分路径应该可以工作,但目前不能

如果您有一个可以移动文件或通过符号链接引用文件的生成系统,那么使用完整路径是很棘手的。然后,您必须按照编译器的拼写获取路径。您可以通过执行以下操作来找到这一点:

(lldb) break set -f JustTheName.cpp -l 10
然后获取断点设置的地址,并执行以下操作:

(lldb) image lookup -v -a <BREAK_ADDRESS>
(lldb)图像查找-v-a

此输出的CompileUnit部分中的文件将是调试信息中拼写的路径。

编译可执行文件时,哪些编译选项显示
make VERBOSE=1
CMAKE\u CXX\u标志
添加新标志,但不删除特定于配置的选项。@Tsyvarev我发现我需要引用CMAKE文件中的路径,但只有从lldb断点删除
src/
,它才能找到它。这对我来说似乎很奇怪。我猜如果我有两个同名的源,那么要么它需要目录,要么它会在两个文件中设置相同的断点。我得做个实验。但除此之外,路径不是文件名的一部分,在任何情况下都应该省略,知道编译行会有很大帮助。CMake可能会将源文件复制到构建树下的某个目录中,然后在那里构建它。这样会丢失路径前缀。另一种可能性是,它使用源文件的绝对路径来编译它。经过几个小时的调试,我终于找到了这个!非常感谢。
(lldb) image lookup -v -a <BREAK_ADDRESS>