一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

解決vscode下調(diào)試c/c++程序一閃而過(guò)(Windows)

 Zenliber 2022-04-17
https://blog.csdn.net/u011316675/article/details/106963122
解決vscode下調(diào)試c/c++程序一閃而過(guò)(Windows)

張???????????麥麥

于 2020-06-25 22:36:50 發(fā)布

14704
 收藏 80
分類專欄: 筆記 文章標(biāo)簽: visual studio c語(yǔ)言 c++ debug
版權(quán)

筆記
專欄收錄該內(nèi)容
5 篇文章0 訂閱
訂閱專欄
起因
開(kāi)始學(xué)習(xí)c語(yǔ)言了,一開(kāi)始想的就是直接裝個(gè)VS就完了,但是一搜都是說(shuō)vs臃腫啥啥不好,不如用vscode來(lái)整,多輕量~于是就網(wǎng)上搜了許多教程開(kāi)整了,期間也遇到了一些常見(jiàn)的坑,這些集中寫(xiě)個(gè)文,希望可以幫助到大家。配置文件也是來(lái)自其他文章的,我也進(jìn)行了部分修改,后面會(huì)標(biāo)出。

解決方法
我們知道使用vscode對(duì)c/c++進(jìn)行調(diào)試的本質(zhì)是這樣的——1.GCC編譯代碼,2.vscode運(yùn)行編譯出的程序。因此調(diào)試運(yùn)行程序一閃而過(guò)的本質(zhì)就是命令行程序運(yùn)行完結(jié)果直接自動(dòng)關(guān)閉了,這和c/c++程序本身也有關(guān)系。
所以對(duì)于這種問(wèn)題,我們可以很自然而然的想到兩種解決方法:

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

/C yourprogram.exe
echo.
pause
1
2
3
解決方法:
如果放到launch.json文件中則是這樣的。

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

        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
需要說(shuō)明的是,這并不是一個(gè)完美的解決方案,在這種情況下斷點(diǎn)調(diào)試是沒(méi)用的。

B.添加一些代碼實(shí)現(xiàn)
解決方法
a.程序結(jié)尾處加getchar();一個(gè)不行(比如前面有scanf之類的函數(shù)使用,就會(huì)在緩沖區(qū)讀取字符,結(jié)果還是會(huì)自動(dòng)關(guān)閉)就加倆,倆不行就……
b.先清除緩沖區(qū),再getchar();

while(getchar()!='\n')  //這兩句代碼是清空輸入緩沖區(qū)內(nèi)容,等同于fflush(stdin);
  continue;
getchar();
1
2
3
c.方法A中的原理一樣,只不過(guò)改成了在程序本身執(zhí)行。

#include <stdlib.h>
system("pause");
1
2
C.在代碼結(jié)尾處添加斷點(diǎn)
前面我們說(shuō)了,方法A中并不能使用調(diào)試功能。而在你能正常使用調(diào)試功能的前提下,可以直接在代碼結(jié)尾處斷點(diǎn)解決。

寫(xiě)在最后
需要說(shuō)明的是,除了你代碼中解決閃退問(wèn)題,否則如果你直接打開(kāi)編譯完的exe,大概率也會(huì)直接閃退。以上內(nèi)容是在windows環(huán)境下的,其他系統(tǒng)可能略有差異。
我個(gè)人而言,我更喜歡方法A,但是需要調(diào)試的場(chǎng)景下,我則切換到普通的啟動(dòng)方式通過(guò)斷點(diǎn)來(lái)解決這個(gè)問(wèn)題。
最后提供我的兩份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相對(duì)應(yīng)
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]

        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
tasks.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
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
如果你需要更詳細(xì)的安裝教程,csdn上已經(jīng)有很多完整的文章了,這里我就不多贅述了。
以下是參考到的資料,實(shí)際上還有更多,但是已經(jīng)無(wú)法一一標(biāo)注了,如果有任何問(wèn)題歡迎直接聯(lián)系我。

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

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


張???????????麥麥
關(guān)注

27


8

80


專欄目錄
解決vscode下調(diào)試c/c++程序一閃而過(guò)的問(wèn)題(Windows)
08-18
Enable pretty-printing for gdb
VSCODE 針對(duì)調(diào)試C語(yǔ)言時(shí)一閃而過(guò)解決辦法
weixin_30488085的博客
 4509
針對(duì)調(diào)試C語(yǔ)言時(shí)一閃而過(guò)解決辦法 前提: 已經(jīng)按照 C/C++ 已經(jīng)安裝 MINGW(并配置完成) 原因: 主要是因?yàn)閠asks的配置沒(méi)有寫(xiě)對(duì) 解決辦法: tasks.js
————————————————
版權(quán)聲明:本文為CSDN博主「張???????????麥麥」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u011316675/article/details/106963122

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲精品福利入口在线| 国产欧美日韩精品自拍| 在线中文字幕亚洲欧美一区| 中国黄色色片色哟哟哟哟哟哟| 日本午夜免费福利视频| 亚洲清纯一区二区三区| 精品国产一区二区欧美| 清纯少妇被捅到高潮免费观看| 国产精品99一区二区三区| 欧美午夜伦理在线观看| 亚洲国产色婷婷久久精品| 午夜精品黄片在线播放| 好吊日成人免费视频公开| 欧美大粗爽一区二区三区 | 久久热这里只有精品视频| 久久亚洲午夜精品毛片| 色婷婷视频国产一区视频| 熟妇久久人妻中文字幕| 色综合视频一区二区观看| 99少妇偷拍视频在线| 伊人欧美一区二区三区| 亚洲欧洲在线一区二区三区| 亚洲中文字幕在线综合视频| 日本免费一区二区三女| 很黄很污在线免费观看| 色欧美一区二区三区在线| 欧美精品激情视频一区| 欧美精品在线播放一区二区| 亚洲欧美日本成人在线| 久久亚洲成熟女人毛片| 亚洲欧洲一区二区综合精品| 久久机热频这里只精品| 亚洲国产黄色精品在线观看| 国产免费成人激情视频| 欧美日韩无卡一区二区| 亚洲国产综合久久天堂| 精品人妻久久一品二品三品| 久久99精品日韩人妻| 99热九九热这里只有精品| 欧美日韩综合在线精品| 日本理论片午夜在线观看|