【问题标题】:How to run a Linux program line by line如何逐行运行Linux程序
【发布时间】:2010-12-03 01:28:49
【问题描述】:

我想用一些调试器逐行运行一个 GTK+/C 程序。我从未调试过 Linux 程序,那么我在哪里可以找到关于如何调试代码的初学者的说明?我只是有一个想法,我必须从网络下载源代码,使用调试符号编译项目并通过 DDD 或 GDB 运行源代码。那么任何人都可以提出如何开始研究这些主题的建议,以及什么是一个好的调试器?我至少有时间学习。

【问题讨论】:

  • 你为什么说我没有接受任何答案?我在这里得到了很好的建议,我非常感谢这里的人们有时间帮助我解决我的问题。我还可以做些什么?添加评论“非常感谢”?
  • 否,投票按钮下方的勾号表示您已接受该答案是正确的。
  • Jaska,您需要在您提出的每个问题上单击最佳答案旁边的大勾号。
  • 乔,我怎么能说答案是否正确?如果我寻求帮助,帮助我的程序员比我更了解这个主题。通常他或她可以更好地判断答案是否正确。
  • 谢谢大卫。我没有在其他任何地方看到“投票最佳答案”属性,所以我很抱歉。我尽量记住尽可能多地接受答案。

标签: c linux debugging gdb


【解决方案1】:

除了 DDD 之外,还研究了 nemiver,他们擅长不同的事情,但 nemiver 相处得很好。

PS。如果您使用的是 Ubuntu,并且想要逐步检查从包存储库安装的应用程序,我们将其命名为 some_package,然后执行以下操作:

  1. 安装包“build-essential”和“devscripts”
  2. 运行“sudo apt-get build-dep some_package”来安装编译该包所需的所有东西
  3. 运行“mkdir -p ~/src/some_package ; cd ~/src/some_package”为源代码创建目录
  4. 进入 System::Administration::Software Sources 并激活“源代码”存储库
  5. 运行“apt-get source some_package”下载some_package的源代码并放到当前目录下
  6. 使用“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" debuild -us -uc" 以在调试模式下构建 deb带有调试信息

  1. 使用“cd ..”上移一步,然后执行“ls”,您应该会看到生成的DEB文件(可以从单个源包生成多个二进制包,即DEB)
  2. sudo "sudo dpkg -i some_package_123.deb" 安装你刚刚构建的版本

当然,您可以选择在第 6 步和第 7 步之间修改代码。这种方法的好处是它几乎适用于任何应用程序。您可以将它用于 Firefox、Linux 内核、台面堆栈或其他任何东西。

【讨论】:

  • 谢谢!我尝试过 Nemiver 来调试 gedit,这很有效。但它调用了一些 GTK+ 的库,那么我如何使用 Nemiver 来查看 GTK 库中会发生什么?我可以结合 valgrind 和 Nemiver 来查看行之间是否存在内存泄漏,比如 1 到 350。
  • 顺便说一下,Ubuntu 存储库不包含开发人员使用的最新代码。有什么方法可以编译他们正在处理的最新代码吗?
  • 不同的上游项目使用不同的 VCS 和构建系统,因此没有通用的方法来构建它们。你只需要学习特定项目使用的任何工具,这对于像 Mozilla 或 Xorg 这样的大型项目来说可能是一个很大的障碍。
【解决方案2】:

http://www.sourceware.org/current/onlinedocs/gdb_toc.html

完整的 gdb 用户手册在线。

【讨论】:

    【解决方案3】:

    考虑使用 GDB 并使用 gcc -g 进行编译,或者使用其他调试器。

    http://en.wikipedia.org/wiki/Gdb

    【讨论】:

    • @Jaska:文章链接到dirac.org/linux/gdb 作为推荐教程。
    • 不应将维基百科视为可靠信息。我将其用作查找可靠信息来源的简便方法。
    • @Mike:我猜你是这么认为的,因为任何人都可以编辑它。但是,考虑到任何人都可以在 Stack Overflow 上添加答案,如果他们有足够的声誉,他们可以编辑现有的。如果是这种情况,它们在可靠性方面应该差不多。我个人认为两者在实践中都相当可靠。
    猜你喜欢
    • 2018-09-17
    • 2011-04-12
    • 2013-07-17
    • 1970-01-01
    • 2012-04-26
    • 2013-07-13
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多