使用GNU调试器对代码进行故障排除。GNU调试器(通常由其命令gdb调用)是一个交互式控制台,可帮助您浏览源代码、分析正在执行的内容,以及从根本上对错误应用程序中出现的问题进行逆向工程。故障排除的麻烦在于它很复杂。GNUDebugger不是一个特别复杂的应用程序,但如果您不知道从哪里开始,甚至不知道何时以及为什么需要求助于GDB进行故障排除,它可能会让人不知所措。如果您一直在使用print、echo或printf语句来调试您的代码,并且您开始怀疑是否有更强大的东西,那么本教程适合您。带有错误的代码要开始使用GDB,您需要一些代码。这是一个用C++编写的示例应用程序(如果您通常不使用C++编程也没关系,原理在所有语言中都是相同的),基于猜谜游戏系列中的示例。#include#include//srand#include//printfusingnamespacestd;intmain(){srand(time(NULL));intalpha=rand()%8;cout<<"你好,世界。"<0Hardwarewatchpoint5:beta>0(gdb)continueContinuing。断点3,main()位于debug.cpp:1111cout<<"Helloworld."<0Oldvalue=falseNewvalue=truemain()atdebug.cpp:1414printf("alphaissettois%s\n",alpha);(gdb)您可以使用next手动逐步执行代码,也可以使用断点、观察点和捕获点来控制代码执行。使用GDB分析数据您可以查看不同格式的数据。例如,以八进制查看beta的值:(gdb)print/obeta$4=02查看其在内存中的地址:(gdb)print/obeta$5=0x2您还可以查看变量的数据类型:(gdb)whatisbetatype=int使用GDB解决错误这种自省不仅可以让您更好地了解正在执行的代码,还可以更好地了解代码是如何执行的。在这个例子中,对变量运行whatis命令给了你一个线索,你的alpha和beta变量是整数,这可能会唤醒你对printf语法的记忆,并让你意识到在你的printf语句中,你必须使用%d来代替%s。进行此更改允许应用程序按预期运行,而不会出现更明显的错误。当代码编译并出现错误时,这尤其令人沮丧,但这就是错误所在,如果它们很容易被发现,那么它们就不是错误。使用GDB是一种追踪并消除它们的方法。下载我们的备忘单这是生活中的事实,即使是最基本的编程代码也会有错误。并非所有错误都会导致应用程序无法运行(甚至无法编译),也并非所有错误都是由错误代码引起的。有时,基于特别有创意的用户做出的意想不到的选择组合,错误会间歇性地出现。有时,程序员会从他们在自己的代码中使用的库中继承错误。不管是什么原因,bug基本上无处不在,发现并消除它们是程序员的工作。GNU调试器是查找错误的有用工具。与我在本文中演示的相比,您可以用它做更多的事情。您可以使用GNUInfo阅读器来了解它的许多功能:$infogdb无论您是刚刚学习GDB还是专业人士,提醒您有哪些命令可用以及这些命令的语法是什么,这对您很有帮助。有帮助。下载GDB备忘单