更简短的回答是:选择您喜欢的任何“编辑器”,然后使用 GDB 控制台或简单的 GDB 前端来调试您的应用程序。调试器带有花哨的 IDE,例如 Netbeans 很不适合 C/C++。我使用 Netbeans 作为我的编辑器,并使用 Insight 和 GDB 控制台作为我的调试器。
有了洞察力,您就拥有了一个不错的 GUI 和 GDB 的原始功能。
一旦你习惯了 GDB 命令,你就会开始喜欢它,因为你可以做一些使用 GUI 永远无法做到的事情。如果您使用 GDB 7 或更新版本,您甚至可以使用Python作为脚本语言。
这里的大多数人都比较关注 IDE 的“编辑器”。但是,如果您正在使用 C/C++ 开发大型项目,您很容易将 70% 以上的时间花在“调试器”上。花哨的 IDE 的调试器至少落后于 Visual Studio 10 年。例如,Netbenas 与 Visual Studio 的界面非常相似。但与 Visual Studio 相比,它的调试器有许多缺点。
- 即使只有几百个元素的数组也很慢显示
- 更改值不突出显示(默认情况下,Visual Studio 在监视窗口中以红色显示更改的值)
- 显示记忆的能力非常有限。
- 您不能修改源代码然后继续运行。如果错误需要很长时间才能解决,您希望更改源并实时应用更改并继续运行您的应用程序。
- 您不能更改“下一条语句”以运行。在 Visual Studio 中,您可以使用“设置下一条语句”来更改应用程序的运行方式。虽然如果使用不当,此功能可能会使您的应用程序崩溃,但它会为您节省大量时间。例如,如果您发现应用程序的状态不正确,但您不知道导致问题的原因,您可能希望在不重新启动应用程序的情况下重新运行源代码的某个区域。
- 没有对 STL 的内置支持,例如 vector、list、deque 和 map 等。
- 没有观察点。当您需要在变量更改时立即停止应用程序时,您需要具有此功能。基于 Intel 的计算机具有硬件观察点,因此观察点不会降低您的系统速度。如果不使用观察点,可能需要花费数小时才能找到一些难以发现的错误。“Visual Studio”将“观察指针”称为“数据断点”。
该列表可能会更长。
我对 Netbeans 或其他类似 IDE 的缺点感到非常沮丧,因此我开始学习 GDB 本身。我发现 GDB 本身非常强大。GDB 没有上面提到的所有“缺点”。实际上,GDB 非常强大,在很多方面甚至比 Visual Studio 还要好。这里我只是给你看一个非常简单的例子。
例如,您有一个数组,例如:
struct IdAndValue
{
int ID;
int value;
};
IdAndValue IdAndValues[1000];
当您的应用程序停止并且您想要检查 IdAndValues 中的数据时。例如,如果您想在数组中查找特定“ID”的序数和值,您可以创建如下脚本:
define PrintVal
set $i=0
printf "ID = %d\n", $arg0
while $i<1000
if IdAndValues[$i].ID == $arg0
printf "ordinal = %d, value = %d\n", $i, IdAndValues[$i].vaue
set $i++
end
end
end
您可以在当前上下文中使用应用程序中的所有变量、您自己的变量(在我们的示例中为 $i)、传递的参数(在我们的示例中为 $arg0)和所有 GDB 命令(内置或用户定义)。
使用GDB 提示符中的PrintVal 1打印出 ID“1”的值
顺便说一句,NetBeans 确实带有 GDB 控制台,但使用控制台可能会使 Netbeans 崩溃。我相信这就是为什么控制台在 NetBeans 中默认隐藏的原因