如何在调试器中将命令行输入输入到程序中,以便能够观察每个步骤的输入情况



我已经使用visualstudio一年了,但仍然有一些事情我不理解。如何有效地使用其中的调试器功能?特别适用于C++

这里是我想要调试的代码:

#include <iostream>
#include <vector>

using namespace std;
//sort methode
void swap(long long int* a, long long int* b) { 
long long int t = *a; 
*a = *b; 
*b = t; 
} 
int partition (vector<long long int> vector, long long int left, long long int right) { 
long long int pivot = vector[right];  
int i = (left - 1);   

for (int j = left; j <= right- 1; j++) { 
if (vector[j] <= pivot) 
{ 
i++;  
swap(&vector[i], &vector[j]); 
} 
} 
swap(&vector[i + 1], &vector[right]); 
return (i + 1); 
}  
void quickSort(vector<long long int> vector, long long int left, long long int right) { 
if (left < right) { 
long long int pivot = partition(vector, left, right); 

quickSort(vector, left, pivot - 1); 
quickSort(vector, pivot + 1, right); 
} 
} 
//end sort
//mainMethod
void maxoddValue(vector<long long> nVector, vector<long long> kVector, int n){
//declare the 4 necessary vectors
vector <long long> largestEven;
vector <long long> largestOdd;
vector <long long> smallestEven;
vector <long long> smallestOdd;
long long cur_val = - 1;
//largestEven
for (int i = n - 1; i >= 1; i--){
if (nVector[i] % 2 == 0){ //if value is even
if(nVector[i] < cur_val){ // and the value is smaller than the 
smallestEven.push_back(cur_val);
} else { //if the value is larger than cur_val,update it
cur_val = nVector[i];
smallestEven.push_back(cur_val);
}
} else { //if value is odd
smallestEven.push_back(cur_val);            
}
}
//largestOdd
for (int i = n - 1; i >= 1; i--){
if (nVector[i] % 2 != 0){ //if value is odd
if(nVector[i] < cur_val){ // and the value is smaller than the cur_val
smallestEven.push_back(cur_val);
} else { //if the value is larger than cur_val,update it
cur_val = nVector[i];
smallestEven.push_back(cur_val);
}
} else { //if value is even
smallestEven.push_back(cur_val);            
}
}
//smallestEven
for (int i = 0; i < n; i++){
if (nVector[i] % 2 == 0){ //if value is even
if(nVector[i] > cur_val){ // and the value is smaller than the cur_val
smallestEven.push_back(cur_val);
} else { //if the value is larger than cur_val,update it
cur_val = nVector[i];
smallestEven.push_back(cur_val);
}
} else { //if value is odd
smallestEven.push_back(cur_val);            
}
}
//smallestOdd
for (int i = 0; i < n; i++){
if (nVector[i] % 2 != 0){ //if value is odd
if(nVector[i] > cur_val){ // and the value is smaller than the cur_val
smallestEven.push_back(cur_val);
} else { //if the value is larger than cur_val,update it
cur_val = nVector[i];
smallestEven.push_back(cur_val);
}
} else { //if value is even
smallestEven.push_back(cur_val);            
}
}
//testing purpose
for (int i = 0; i < n; i++){
cout<< largestEven[i] << " " << largestOdd[i] << " " << smallestEven[i] << " " << smallestOdd[i] << "n";
}
}

int main(long long int argv){
//driver:
long long int a;
long long int b;
long long int n; 
long long int k;
//1st input
cin >> n;
vector<long long int> n_values;
//2nd input
while (n_values.size() < n){
cin >> a; 
n_values.push_back(a);
}
vector<long long int> k_values;
//3rd input
cin >> k;
vector<long long int> reverse_nValues;
//4th input
while (k_values.size() < k){
cin >> b;
k_values.push_back(b);
}
quickSort(n_values,0,n - 1);
reverse(n_values.begin(),n_values.end());
maxoddValue(n_values,k_values,n);
}

我遇到了分段错误:11(我认为这与索引有关(,但我不知道我在哪里做得不对。如代码所示,我已经在终端中输入了代码,但我希望也能在调试器中输入。我在网上搜索过,但真的找不到方法。

我的launch.json文件如下所示;

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "lldb",
"preLaunchTask": "C/C++: g++ build active file"

}
]
}

例如,我的输入样本是:

4 4 2 1 3 3 2 3 4
  • 如果您使用的是Visual Studio(VS(,我假设它在Windows中
  • 如果你想有效地使用VS,首先在VS启动屏幕中创建一个项目(创建新项目(或使用文件->新建->项目(如果已在VS中(
  • 在您的情况下,创建一个"空c++"项目,并在"配置"屏幕中指定项目名称和位置
  • 在"解决方案资源管理器"窗口中,右键单击并添加现有的c++文件,或者创建一个新的c++文件并复制粘贴代码
  • 使用下拉解决方案配置,选择"调试">
  • 从主菜单"构建"您的解决方案
  • 从主菜单"调试->"开始调试"或使用F5
  • 您需要在一行上放置断点,只需单击该行左侧的空格(尝试单击该行右侧的各个位置,就会出现一个红点作为断点(
  • 调试时会打开各种信息窗口,如变量的当前状态、行上变量的值、调用堆栈等
  • 如果出现异常,请检查"调用堆栈"窗口,它将向您显示导致异常的程序流(行(。选择前几行,它将显示导致异常的状态
  • VS调试的快捷键:F5启动、F11进入、F10结束等
  • 谷歌VS调试了解更多信息

希望这有帮助:(或可以进一步澄清。

相关内容

最新更新