如何在 VS Code 中实现类似于 Dev C++ 的程序结束自动暂停效果

灌水区

Maxmilite @ 2020-10-11 08:01:39

背景介绍

纯蒟蒻,十天前刚从 Dev C++ 转成 VS Code

我:啊啊啊啊啊啊啊 VS Code 好舒服啊啊啊啊啊

我:啊啊啊这芳香的气味(嗅)这美妙的补全(嗅)斯哈斯哈

一天后

我:啊啊啊为什么这么好的编辑器不能加上一个自动暂停啊啊啊啊啊啊啊

我:啊啊啊啊每次写程序都要打 system("pause") 好麻烦啊啊啊啊

正文

刚从 Dev C++ 转到 VS Code 的选手,往往会遇到背景介绍那种困境。

本篇讨论将使用 VS Code 做到 Dev 那种暂停效果。

1 . 前置准备

Dev C++ 所使用的暂停工具在其程序根目录下,名为 "ConsolePauser.exe" ,这是一个在程序运行结束后做到显示程序运行时间、返回值及暂停程序的效果。

借助这个程序,就可以做到暂停效果。

使用例:ConsolePauser.exe .\Test.exe

或者,我们可以手写一个ConsolePauser.exe (雾

#include <windows.h>
#include <cstdio>
#pragma execution_character_set("utf-8")
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
int main(int argc, char *argv[])
{
    register char strCmd[1024] = {0}, *p;
    DWORD dwExitCode = -1;
    register float time(0);
    LARGE_INTEGER start, end, freq;
    PROCESS_INFORMATION pi;
    STARTUPINFO si = {sizeof(si)};
    BOOL ret(0);
    register int i(0), count(0);
    for (i = 1; i < argc; ++i)
    {
        p = argv[i];
        while (*p != 0 && count < 1022)
        {
            strCmd[count++] = *p;
            p++;
        }
        strCmd[count++] = ' ';
    }
    if (argc >= 2)
    {
        QueryPerformanceFrequency(&freq);
        QueryPerformanceCounter(&start);
        ret = CreateProcess(NULL, strCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
        if (ret)
        {
            SetConsoleTitle(argv[1]);
            WaitForSingleObject(pi.hProcess, INFINITE);
            GetExitCodeProcess(pi.hProcess, &dwExitCode);
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
            QueryPerformanceCounter(&end);
            time = (float)(((end.QuadPart - start.QuadPart) * 1000000) / freq.QuadPart) / 1000000;
            printf("\n--------------------------------\n");
            printf("程序在运行 %.5f 秒后退出,返回值是 %lu\n", time, dwExitCode);
        }
    }
    else
    {
        printf("--------------------------------\n");
        printf("使用方法: ConsolePauser.exe <文件名> <附加值>\n\n");
    }
    system("pause");
    printf("\n");
    return 0;
}

(源代码来自 CSDN ,因找不到原网址故无法标注QAQ)

(向原作者致歉QAQ)

处理后,我们就得到了一个 ConsolePauser.exe。

2 . 在VS Code 中进行修改

首先我们需要把 ConsolePauser.exe 的位置记好,然后回到 VS Code。

在 工作目录/.vscode 中找到launch.json,找到 "program" 和 "args" 项,一般情况下它们是长这个样子的:

program项对应的就是程序在编译完成后运行的程序 (怎么这么绕嘴)

args项对应的是运行程序的附加值。

简单来说,VS Code 在程序编译完成后会执行 program args 这个命令(大概。

所以,在使用例中的 ConsolePauser.exe 适用于program 项,而 Test.exe 适用于 args 项。

所以我们只需要把

"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [
],

改成

"program": "${fileDirname}\\ConsolePauser.exe",
//"program":"${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [
 "${fileDirname}\\${fileBasenameNoExtension}.exe"
 ],

即可 (这里为了方便我把 ConsolePauser.exe 放到了工作目录里) 保存,运行程序。

3 . 成功

在我们写下一个非常简单的程序后,我们只需要轻轻地按下 F5 键

然后,Dev C++ 中那个独有的暂停就出现了!

(太感动了)

后记

通过这种方法可以做到在 VS Code 中实现类似于 Dev C++ 的程序结束自动暂停效果。

但是

调试没法用了QAQ VS Code 根本找不到程序的变量 也没法断点了

所以我为什么不一开始直接在 return0 处设置一个断点呢QAQAQAQ


by thomas_zjl @ 2020-10-11 08:03:00

%%%


by __MEMZ__ @ 2020-10-11 08:03:52

%%%


by AFewMoon @ 2020-10-11 08:13:30

%%%


by Ritel @ 2020-10-11 12:06:35

orz这就是大佬吗


|