一、可能的原因
1、生成源码的方式不同:
在 Visual Studio 中调试的话,程序会生成 .pdb 文件,这个文件包含了程序的符号表信息,包含了变量名、函数名以及地址等,这样 Visual Studio 在调试时就可以根据这些信息来对程序进行分析了。
但是在 VSCode 中,它并不会使用 pdb 文件,它使用的是诸如 LLVM 等编译器的 DWARF 格式来生成 GDB 所需的信息。而 DWARF 格式只有在调用此函数时才会生成,而且只有第一次调用函数时才会生成,所以,如果没有调用一个函数,那么 GDB 就不知道这个函数的符号信息。
2、调试信息没有编译进程序中:
有时候在编译程序的时候,如果没有手动开启调试信息等选项,就会导致编译时没有将调试信息编译进程序中,这样调试器就找不到符号信息。
3、安装的插件不支持:
在使用 VSCode 的时候,我们可能会安装一些插件,比如 C/C++ 插件,这些插件有时候可能会影响程序的调试,导致断点无法正常工作。
二、解决方案
1、生成调试信息
在 VSCode 中调试的时候,需要程序生成调试信息才能正常使用断点,我们可以采用以下两种方式来生成调试信息:
- 在编译时开启调试信息选项
- 手动添加调试符号
g++ -g main.cpp -o main //Linux
cl /Zi main.cpp //Windows
objdump -g --dwarf=info a.out > a.dwarf
通过这种方式,我们可以手动添加调试符号。
2、禁用不必要的插件
在使用 VSCode 调试的时候,有些插件可能会影响程序的调试,我们可以先禁用插件并尝试重启 VSCode,看是否能够正常使用断点。如果断点正常工作,则说明插件是问题所在,我们可以重新安装或更换插件。
3、使用调试命令行工具
除了 VSCode 自带的调试工具外,我们还可以使用 GDB 或其他命令行调试工具来进行调试,这些工具的功能非常强大,而且不会出现断点无法正常工作的问题。
三、总结
在使用 VSCode 进行调试时,有时候遇到断点无法正常工作的问题。这可能是由于生成调试信息的方式不同、调试信息没有编译进程序中或安装的插件不支持等原因造成的。为了解决这个问题,我们可以尝试生成调试信息、禁用不必要的插件或使用命令行调试工具等方法。希望本文能够帮助大家解决问题,提高工作效率。