Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何逐行运行Linux程序_C_Linux_Debugging_Gdb - Fatal编程技术网

C 如何逐行运行Linux程序

C 如何逐行运行Linux程序,c,linux,debugging,gdb,C,Linux,Debugging,Gdb,我想用一些调试器逐行运行GTK+/C程序。我从来没有调试过Linux程序,所以我在哪里可以找到关于如何调试代码的指导?我的想法是,我必须从网上下载源代码,用调试符号编译项目,并通过DDD或GDB运行源代码。那么,有没有人能给我们建议如何开始学习这些课程,以及什么是一个好的调试器呢?我至少有时间学习一些东西。研究使用GDB和使用gcc-g编译,或者使用其他调试器 除了DDD,还可以看看nemiver,他们擅长不同的东西,但nemiver进展得很好 另外,如果你在Ubuntu上,并且你想逐步浏览一个

我想用一些调试器逐行运行GTK+/C程序。我从来没有调试过Linux程序,所以我在哪里可以找到关于如何调试代码的指导?我的想法是,我必须从网上下载源代码,用调试符号编译项目,并通过DDD或GDB运行源代码。那么,有没有人能给我们建议如何开始学习这些课程,以及什么是一个好的调试器呢?我至少有时间学习一些东西。

研究使用GDB和使用gcc-g编译,或者使用其他调试器


除了DDD,还可以看看nemiver,他们擅长不同的东西,但nemiver进展得很好

另外,如果你在Ubuntu上,并且你想逐步浏览一个从软件包存储库安装的应用程序,让我们称之为某个_软件包,然后执行以下操作:

  • 安装“build essential”和“devscripts”软件包
  • 运行“sudo apt get build dep some_package”来安装编译该包所需的所有东西
  • 运行“mkdir-p~/src/some_package;cd~/src/some_package”为源代码创建一个目录
  • 进入System::Administration::Software Sources并激活“源代码”存储库
  • 运行“apt get source some_package”下载some_包的源代码并将其放在当前目录中
  • 使用“cd”进入特定的应用程序目录,通常类似于“some-app-1.2.3”
  • 7A。运行“debuild-us-uc-b”将源代码编译成一个新的可安装的.DEB文件,该文件在发布模式下编译,没有调试信息

    或者(这是中心部分):

    7B。运行“MAKEFLAGS=-j6 DEB_BUILD_OPTIONS=“nostrip noopt parallel=5”CFLAGS=“-g3-O0”debild-us-uc”以在调试模式下使用调试信息构建DEB

  • 使用“cd..”向上移动一步,然后执行“ls”,您应该会看到生成的DEB文件(可以从单个源包生成多个二进制包,即DEB)
  • sudo“sudo dpkg-i some_package_123.deb”来安装您刚刚构建的版本
  • 当然,您可以选择在步骤6和步骤7之间修改代码。这种方法的优点在于它适用于几乎所有的应用程序。您可以将其用于Firefox、Linux内核、mesa堆栈或其他任何东西。


    完整的在线gdb用户手册。

    为什么你说我没有接受任何答案?我在这里得到了很好的建议,我真的很感激这里的人有时间帮助我解决问题。我还能做什么?添加一条评论“非常感谢”?不,投票按钮下方的勾号表示您已接受正确答案。Jaska,您需要单击每个问题最佳答案旁边的大复选标记。Joe,我如何判断答案是否正确?如果我请求帮助,帮助我的程序员比我更了解这个主题。通常他或她能更好地说出答案是否正确。谢谢大卫。我还没有在其他地方看到“投票选出最佳答案”的属性,所以我很抱歉。我尽量记得尽可能经常地接受答案。@Jaska:文章链接到作为建议教程。维基百科不应被视为可靠的信息。我用它作为寻找可靠信息来源的一种简单方法。@Mike:我想你是这么认为的,因为任何人都可以编辑它。但是,考虑任何人都可以在堆栈溢出上添加一个答案,如果它们有足够的信誉,它们可以编辑现有的溢出。如果是这样的话,在可靠性方面,它们应该是相等的。我个人认为两者在实践中都相当可靠。谢谢!我试着用Nemiver调试gedit,效果很好。但它调用了一些GTK+的库,所以我如何使用Nemiver来查看GTK库中会发生什么?我可以将valgrind和Nemiver结合起来,这样我就可以看到行之间是否存在内存泄漏,比如1到350行。顺便说一下,Ubuntu存储库不包含开发人员使用的最新代码。是否有一些方法来编译他们正在处理的最新代码?不同的上游项目使用不同的VCS和构建系统,因此没有通用的方法来构建它们。您只需要学习特定项目使用的任何工具,这对于像Mozilla或Xorg这样的大型项目来说可能是一个很大的障碍。