VScode,c++调试时显示“找不到任务g++.exe build active file”,不能debug怎么解决呀?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VScode,c++调试时显示“找不到任务g++.exe build active file”,不能debug怎么解决呀?相关的知识,希望对你有一定的参考价值。
如题,附图是显示错误以及tasks.json文件和launch.json文件
如果你在寻找VSCode中快速配置C/C++基本开发环境的方法,那么本文正好适合你。一年前的教程可能在教你如何编辑launch.json和tasks.json。尽管学会编辑这些配置文件是VSCode用户的必经过程,但是同样会给初学者带来心理压力。如果首先展示给用户的是最小可用配置,我相信用户会慢慢接受并喜欢上 VSCode。
很显然VSCode的用户体验一直在不断完善。最初大家会从网上寻找配置文件,但其实官方插件很早就支持智能识别环境并生成配置,可以快速地完成C/C++基本开发环境的配置。官方文档有非常详细的说明,但是会稍微落后于插件版本,而且我认为某些地方并不适合国内的条件。本文基于官方文档,但是精简了步骤。相信你们看完之后会发现上手VSCode其实很简单。
目前版本的插件已经解决了必须首先创建.vscode文件夹的bug,现在可以跳过下面的第1步直接按F5了
VSCode可以一键生成基础配置文件:
新建一个.vscode文件夹。如果不先创建此文件夹,将无法完美生成配置文件,这可能是插件的一个逻辑错误。我相信很多人都知道配置引导这件事,但是很多时候自动生成的配置文件无法正常工作,原因就在这里。
打开你创建的 C 文件,F5运行。不出意外的话会弹出配置引导面板,在弹出面板中依次选择以下选项:
C++ (GDB/LLDB)
gcc.exe - 生成和调试活动文件
稍等片刻,会自动在.vscode文件夹下生成launch.json和tasks.json。这样生成的两个配置文件是相互匹配好的,可以直接用于基本的运行和调试。
如果是 C++文件,选择g++.exe编译器即可。
一键生成配置文件
至此, C/C++ 基础开发环境的配置已经完成。
进阶知识
为什么修改tasks.json 似乎没有效果?
(2020年11月24日更新)有些人试图修改tasks.json中的配置(例如修改-o参数后面的生成路径), 但实际上会发现没有任何效果, 这里解释一下原因. 我曾经看过一部分C/CPP插件的源代码, 我的理解就是这个插件在运行的时候会首先加载一些预定义的针对不同编译器和源文件类型的默认task("C/C++: gcc.exe build active file"就是其中之一, 所以tasks.json中的任务本身就是插件中预定义然后帮你导出的). 最终结果就是, 对于插件而言,要运行的任务名正好自己已经从内部加载, 就会优先执行自己内部定义并加载的默认task而忽略掉tasks.json中的task(即存在一个外部的同名task),即使用户修改了其中的某些配置). 实际上用户可以删除tasks.json并保留launch.json, 这不会有任何问题. 那么如果想要修改并使用tasks.json中task怎么办?我想你们已经猜到了, 只要将"preLaunchTask"后面的任务名称修改掉,并且和tasks.json中的label项的值保持一致,插件就会乖乖使用用户自定义的task了 参考技术A 为何不能调式,你这个没编译成功呀
如何使 QtCreator 在调试而不是汇编时显示“正常”代码?
【中文标题】如何使 QtCreator 在调试而不是汇编时显示“正常”代码?【英文标题】:How to make QtCreator show "normal" code while debugging instead of assembly? 【发布时间】:2016-04-07 04:50:14 【问题描述】:我在 Ubuntu 14.04 上使用 QtCreator 3.6.1,gcc 作为我的主要编译器。
我的 Qt 项目正在调试模式下构建。但是,每当我按 F5 尝试通过设置断点来单步执行代码时,我的代码就会崩溃(因为代码有问题),但它并没有在断点处停止,而是向我显示了汇编输出!
这是一个屏幕截图。代码似乎在你看到黄色箭头的地方崩溃了,但我只是不知道它在源代码中的哪个位置!!!
事实上,我已经在 cout 语句处设置了断点,正如您在此处看到的那样。
甚至没有执行cout
语句。在执行 main 之前,代码似乎崩溃了。我不知道这是 QtCReator 问题还是其他问题。我添加了-O0
和-g
选项
到 QMAKE_CXXFLAGS 选项只是为了确保正在添加调试符号,但我遇到了这个问题。
编辑: 我的堆栈跟踪看起来像这样
我也不确定这是否有帮助,但是当我通过终端运行程序时,程序名称前有LD_DEBUG
,我得到了大量的输出。
最后三行是
.
.
.
7934: symbol=_ZN11QMetaObject8addGuardEPP7QObject; lookup in file=/usr/lib/x86_64-linux-gnu/libQtGui.so.4 [0]
7934: symbol=_ZN11QMetaObject8addGuardEPP7QObject; lookup in file=/usr/lib/x86_64-linux-gnu/libQtCore.so.4 [0]
7934: binding file /usr/lib/x86_64-linux-gnu/libQtGui.so.4 [0] to /usr/lib/x86_64-linux-gnu/libQtCore.so.4 [0]: normal symbol `_ZN11QMetaObject8addGuardEPP7QObject'
[1] 7934 segmentation fault (core dumped) LD_DEBUG=all ./CGALQT_Fix_MainWindow
【问题讨论】:
您确定它在您的代码中崩溃了吗?如果它在没有可用调试信息的另一个库(例如 libc)中崩溃,则无论您的代码是否具有完整的调试信息,它仍会显示这些帧的程序集。完整的回溯是什么样的? @FrankOsterfeld 我明白了。你能告诉我如何在 QtCreator 中获得完整的回溯吗?我不太确定那是什么。 @FrankOsterfeld 我不知道它是否在 in 我的代码中崩溃。甚至我在第一行代码中放置的cout
语句都没有被执行
它在底部区域中列出,其中有很多 call_init() 。我认为有一个上下文菜单选项可以复制内容。您是否有任何全局变量在初始化时可能会崩溃?
@FrankOsterfeld 好的,请参阅已编辑的问题,我已将堆栈跟踪放在最后。我的代码中没有任何全局变量。但正如你所说,它不会在我的代码中崩溃 in ......而是一些dl-init.c
文件。不确定那个文件是什么。什么是崩溃初始化?
【参考方案1】:
为此,您的应用程序必须链接到调试库。要调查您的应用崩溃的位置,您通常不需要这个,因为您可以在函数堆栈中看到您自己的所有方法。
【讨论】:
以上是关于VScode,c++调试时显示“找不到任务g++.exe build active file”,不能debug怎么解决呀?的主要内容,如果未能解决你的问题,请参考以下文章
为何刚装的vs2010 ,调试c++时显示 "此项目4 - Debug Win32已过期"?求大神帮忙!!
VSCode 在编译时显示 .vue 导入的“找不到模块”TS 错误
如何仅使用终端输出vscode打开JS文件时显示的问题列表:?