我正在学习一个c++项目。它非常大,build是用cmake创建的。在安装了所有依赖项和库之后,构建就完成了。但是当我运行它时,我得到Segmentation fault
。
事情是这样的:没有IDE,在VS Code中使用cmake运行这个项目。我想知道是否有可能在代码中找到导致Segmentation fault
的这个地方。我知道有GDB调试器来处理这样的事情。我运行了几个命令,得到的结果如下:
gdb build/studpark
...
Reading symbols from build/studpark...
(gdb) run
Starting program: /Users/admin/Downloads/StudPark-develop/build/studpark
[New Thread 0x2503 of process 7316]
[New Thread 0x1903 of process 7316]
[New Thread 0x1a03 of process 7316]
warning: unhandled dyld version (17)
Thread 3 received signal SIGSEGV, Segmentation fault.
0x00007ff809bec6b2 in ?? ()
(gdb) backtrace
#0 0x00007ff809bec6b2 in ?? ()
#1 0x00007ff7bfeff510 in ?? ()
#2 0x0000000100002abe in main ()
Backtrace stopped: frame did not save the PC
问题是:是否有可能跟踪并找到导致分段错误的代码中的确切位置?
编辑:我用这些标志编译我的项目:
set(CMAKE_CXX_FLAGS "-stdlib=libc++ -g")
我的平台是Mac OS。
我已经为我的情况找到了一个解决方案,下面是我所做的:
- 安装这些VS Code扩展- CodeLLDB
- 添加配置文件:运行/'Add Configuration…'
- 配置文件位于
/.vscode/launch。
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug",
"program": "${workspaceFolder}/build/main",
"args": [],
"cwd": "${workspaceFolder}"
}
]
}
- 在我的情况下,我只改变了
"program": "${workspaceFolder}/build/main"
来显示我的可执行文件的路径。
在完成这些操作后,我能够在带有断点的调试模式下运行我的程序,这有助于我检查项目并发现代码中的错误。