我正在使用VSCode 0.10.6进行C ++编程。我想在调试之前启动一个程序。程序OpenOCD是GDB连接的。如果我通过终端手动打开和关闭它,它工作正常,但似乎应该有一个简单的方法让VSCode为我启动它。
我玩过tasks.json,看来你需要使用一些丑陋的bat / sh文件来与launch.json中的preLaunchTasks结合使用。
答案 0 :(得分:0)
目前答案是你必须确实使用preLaunchTasks
才有机会完成这项工作。我会很乐意使用一个丑陋的剧本,如果确实可行 - 但它并没有。就我而言,我需要在后台运行一个或多个可执行文件,允许VSCode继续进行调试。
不幸的是,我尝试启动的每个可执行文件(通过start
)实际上并没有作为"分离的"进程,因此VSCode将等待每个可执行文件完成运行,然后才能完成preLaunchTasks
并开始调试。不是我想要的。
我发现了an article by someone having a similar "detached process" problem with subversion,我用他的C ++代码用Visual Studio Code解决了同样的问题。我在该代码中发现了一两个错误,我修复了这个错误。以下是我目前正在使用的内容:
// dstart.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
//http://stackoverflow.com/questions/1536205/running-another-program-in-windows-bat-file-and-not-create-child-process
//http://svn.haxx.se/users/archive-2008-11/0301.shtml
int _tmain()
{
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms683156(v=vs.85).aspx
LPWSTR pCmd = ::GetCommandLine();
// skip the executable
if (*pCmd++ == L'"')
while (*pCmd++ != L'"');
else
while (*pCmd != NULL && *pCmd != L' ') ++pCmd;
while (*pCmd == L' ') pCmd++;
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
// Start the child process.
BOOL result = CreateProcess
(
NULL, // No module name (use command line)
pCmd, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set bInheritHandles to FALSE
CREATE_NEW_CONSOLE, // Detach process
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure (returned)
);
if (result) return 0;
wchar_t msg[2048];
FormatMessage
(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
msg, sizeof(msg),
NULL
);
fputws(msg, stderr);
_flushall();
return -1;
}
编译后,您可以类似于start
命令在DOS提示符下的工作方式使用它。将其放在您附加到preLaunchTasks
的脚本中
在Visual Studio Code中。