【发布时间】:2021-04-09 08:52:04
【问题描述】:
我是 C++ 初学者。当我尝试使用以下构造(如字符串、某些本机类型的向量、STL 等)调试 C++ 代码时,调试变得乏味。我使用 MS Visual Studio 2010/Visual C++ 2010 Express。
例如
-- 使用字符串时如下:
string str;
getline(cin, str);
for(i=0; i<str.size();i++)
观察窗口不显示 str[i] 的值。它说未找到重载运算符。我必须手动折叠整个字符串变量 str 并在该特定索引处查看 char elem,这很麻烦。
-- 如下使用矢量时,同样的问题。如果我在监视窗口中设置变量 v1[k] 相同的错误。
vector<int> v1(100);
for(int k=0;k<100;k++)
{
v1.push_back(k);
}
-- 尝试使用简单的 STL 迭代器,如 it.begin()、it.end() 和类似 sort()、reverse() 等算法,我无法通过单步调试这些函数,或者无法设置断点那些。(我知道它们在 STL 或一些这样的标准库中,可以确保它们没有错误,但仍然可以通过传递无效/不正确的东西来错误地使用它们)
从多年的 C 语言使用到 C++,我发现缺乏“调试能力”或其中的一些限制,这很痛苦,而我正在尝试理解其他人编写的大量 C++ 代码,在工作。
我的问题 -
在使用诸如步入、断点、观察点、观察窗口等惯用语时,有哪些有效方法可以调试工作代码以了解其功能。是否有任何特定的调试器比其他的更好/更差。(比如说 gdb 更好)或者是否有任何特定的技巧/提示来帮助调试。
一般而言,如何分析 C++ 代码以了解其工作原理?
【问题讨论】:
-
我想知道什么是如此离题以至于有人投票支持它!
-
我投票决定关闭,因为询问“什么是有效的”、“哪个特定的调试器比另一个更好/更差”,基本上你的其余问题完全是主观的。
-
@Marlon - 主要问题不是这个,如果你看到的话。
-
@Marlon:询问调试 STL 使用的有效方法有什么问题?这是一个非常重要(和客观)的问题!