简短的答案是:选择所需的任何“编辑器”,然后使用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,例如矢量,列表,双端队列和地图等。
- 没有观察点。当您需要在更改变量时立即停止应用程序时,需要具有此功能。基于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中默认隐藏控制台的原因