欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決vscode下調試c/c++程序一閃而過的問題(Windows)

 更新時間:2020年08月07日 08:59:18   作者:張麥麥啊  
這篇文章主要介紹了解決vscode下調試c/c++程序一閃而過(Windows),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

起因

開始學習c語言了,一開始想的就是直接裝個VS就完了,但是一搜都是說vs臃腫啥啥不好,不如用vscode來整,多輕量~于是就網(wǎng)上搜了許多教程開整了,期間也遇到了一些常見的坑,這些集中寫個文,希望可以幫助到大家。配置文件也是來自其他文章的,我也進行了部分修改,后面會標出。

解決方法

我們知道使用vscode對c/c++進行調試的本質是這樣的——1.GCC編譯代碼,2.vscode運行編譯出的程序。因此調試運行程序一閃而過的本質就是命令行程序運行完結果直接自動關閉了,這和c/c++程序本身也有關系。
所以對于這種問題,我們可以很自然而然的想到兩種解決方法:

A.在控制臺中直接運行該程序原理:

我們直接打開cmd/powershell等,輸入對應程序的地址,運行即可。我們不想讓他一閃而過的原因是我們需要看到輸出結果,而不是程序單純的運行一下就完事兒了,因此這樣就行了,但是每次都打開cmd似乎也太麻煩了,因此我們也可以在vscode上實現(xiàn)這個功能。
前面說過一般我們用vscode調試c/c++的過程,這里細化一下,大概是這樣的:vscode先從launch.json中根據(jù)啟動參數(shù)進行調試,其中我們配置了preLaunchTask這個參數(shù)調用task.json中的任務,一般在task.json中配置一個任務調用gcc進行編譯。
因此我們只需要在launch中配置一個cmd程序來打開我們task.json中任務編譯的結果就可以了,但是這種調用下還是會出現(xiàn)閃退的問題,因此我們補充一個pause指令;同時也發(fā)現(xiàn)了另一個問題,pause指令的”按任意鍵繼續(xù)……”并沒用自動換行,反而和輸出內容在一起,于是我們在補充一個“echo.”用作換行符。
因此我們完整的指令是這樣的

/C yourprogram.exe
echo.
pause

解決方法:

如果放到launch.json文件中則是這樣的。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(Windows) Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "cmd",
      "preLaunchTask": "echo",//這里需要換成你task.json中的任務名
      "args": [
        "/C",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "&",
        "echo.",
        "&",
        "pause"
      ],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole":true
    }
      ]

    }
  ]
}

需要說明的是,這并不是一個完美的解決方案,在這種情況下斷點調試是沒用的。

B.添加一些代碼實現(xiàn)解決方法

a.程序結尾處加getchar();一個不行(比如前面有scanf之類的函數(shù)使用,就會在緩沖區(qū)讀取字符,結果還是會自動關閉)就加倆,倆不行就……
b.先清除緩沖區(qū),再getchar();

while(getchar()!='\n') //這兩句代碼是清空輸入緩沖區(qū)內容,等同于fflush(stdin);
 continue;
getchar();

c.方法A中的原理一樣,只不過改成了在程序本身執(zhí)行。

#include <stdlib.h>
system("pause");

C.在代碼結尾處添加斷點

前面我們說了,方法A中并不能使用調試功能。而在你能正常使用調試功能的前提下,可以直接在代碼結尾處斷點解決。

寫在最后

需要說明的是,除了你代碼中解決閃退問題,否則如果你直接打開編譯完的exe,大概率也會直接閃退。以上內容是在windows環(huán)境下的,其他系統(tǒng)可能略有差異。
我個人而言,我更喜歡方法A,但是需要調試的場景下,我則切換到普通的啟動方式通過斷點來解決這個問題。
最后提供我的兩份json文件以供各位參考:
launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "(Windows) Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "cmd",
      "preLaunchTask": "echo",
      "args": [
        "/C",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "&",
        "echo.",
        "&",
        "pause"
      ],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole":true
    },
    {
      "name": "(gdb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": true,
      "MIMode": "gdb",
      "miDebuggerPath": "F:\\mingw\\bin\\gdb.exe",// 自己電腦的gdb
      "preLaunchTask": "echo",//這里和task.json的label相對應
      "setupCommands": [
        {
          "description": "Enable pretty-printing for gdb",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ]

    }
  ]
}

task.json

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "2.0.0",
  "tasks": [
    {
      "label": "echo",
      "type": "shell",
      "command": "gcc",
      "args": [
        "-g", 
        "${file}", 
        "-o", 
        "${fileBasenameNoExtension}.exe",
        "-fexec-charset=GBK"http://解決中文亂碼
      ]
    }
  ],
  "presentation": {
    "echo": true,
    "reveal": "always",
    "focus": false,
    "panel": "shared", 
    "showReuseMessage": true,
    "clear": false
  }
}

如果你需要更詳細的安裝教程,csdn上已經(jīng)有很多完整的文章了,這里我就不多贅述了。
以下是參考到的資料,實際上還有更多,但是已經(jīng)無法一一標注了,如果有任何問題歡迎直接聯(lián)系我。

參考資料:
https://bs.csdn.net/topics/370159790
https://blog.csdn.net/weixin_43434136/article/details/106884469

(悄咪咪問下我的"externalConsole": true關掉后在內置的powershell中打開并沒有輸出也不能輸入,google后好像發(fā)現(xiàn)是本身的一個bug? ps英文輸入法下也是如此,有的人說是中文輸入法。不知道有沒有大神有方法解決。。。)

到此這篇關于解決vscode下調試c/c++程序一閃而過(Windows)的文章就介紹到這了,更多相關vscode調試c/c++程序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C++ COM編程之什么是組件?

    C++ COM編程之什么是組件?

    這篇文章主要介紹了COM編程之什么是組件?COM組件是以Win32動態(tài)鏈接庫(DLLs)或可執(zhí)行文件(EXEs)的形式發(fā)布的可執(zhí)行代碼,需要的朋友可以參考下
    2014-10-10
  • C/C++格式化日志庫實現(xiàn)代碼

    C/C++格式化日志庫實現(xiàn)代碼

    這篇文章主要介紹了C/C++格式化日志庫實現(xiàn)代碼,需要的朋友可以參考下
    2019-04-04
  • C++實現(xiàn)二維圖形的傅里葉變換

    C++實現(xiàn)二維圖形的傅里葉變換

    這篇文章主要介紹了C++實現(xiàn)二維圖形的傅里葉變換的方法,是C++程序設計里一個重要的應用,需要的朋友可以參考下
    2014-08-08
  • c調用python調試方法

    c調用python調試方法

    在本文里我們給大家分享了C中調用python調試的方法和相關知識點,需要的朋友們參考下。
    2019-02-02
  • C++11標準庫bind函數(shù)應用教程

    C++11標準庫bind函數(shù)應用教程

    bind函數(shù)定義在頭文件functional中,可以將bind函數(shù)看做成一個通用的函數(shù)適配器,他接收一個可調用對象,生成一個新的可調用對象來"適應"原對象的參數(shù)列表。本文將帶大家詳細了解一下bind函數(shù)的應用詳解
    2021-12-12
  • Qt使用windeployqt工具實現(xiàn)程序打包發(fā)布方法

    Qt使用windeployqt工具實現(xiàn)程序打包發(fā)布方法

    本文主要介紹了Qt使用windeployqt工具實現(xiàn)程序打包發(fā)布方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C++快速冪與大數(shù)取模算法示例

    C++快速冪與大數(shù)取模算法示例

    這篇文章主要介紹了C++快速冪算法和大數(shù)取模算法的示例,對C++程序員來說有一定的幫助,有需要的朋友可以參考借鑒,下面來一起看看。
    2016-08-08
  • C++中#pragma once與#ifndef對比分析

    C++中#pragma once與#ifndef對比分析

    當我們編寫C++代碼時,經(jīng)常需要使用頭文件來引入一些常用的函數(shù)、類或者變量,如果一個頭文件被重復包含,就會導致編譯錯誤或者運行時錯,為了避免發(fā)生,我們需要使用預處理指令來防止頭文件被重復包含,常用的預處理指令有#pragma once和#ifndef,需要的朋友可以參考下
    2023-05-05
  • c++調用動態(tài)庫LNK2019和LNK1120無法解析的外部命令

    c++調用動態(tài)庫LNK2019和LNK1120無法解析的外部命令

    本文主要介紹了c++調用動態(tài)庫LNK2019和LNK1120無法解析的外部命令, 出現(xiàn)這個錯誤一般都是函數(shù)只找到聲明但沒有實現(xiàn),或者是少了什么鏈接庫,下面就來解決一下
    2024-06-06
  • 基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具

    基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具

    這篇文章主要為大家詳細介紹了如何使用Qt軟件開發(fā)K線股P相關軟件,先開發(fā)一個通過CTP量化交易的sdk獲取相關推送數(shù)據(jù)的工具,需要的可以參考下
    2024-04-04

最新評論