如何使用GDB调试一个大项目?

2024-03-26

现在我有一个c语言项目,其中包括三个目录/bin, /inc and /src。 所有头文件(.h) 包含在/inc和所有源(.c) 文件存储在/src,即a.c、b.c、c.c...,最终生成的可执行文件位于/bin。

makefile编译后,会生成所有的obj文件/src/obj像 a.o、b.o、c.o、d...!此外,还会生成一个final.exe可执行文件/bin目录。

现在如果我想用GDB调试它,我该怎么做???

调试 /src/obj 中的那些 obj 文件?或者其他什么?

非常感谢您的帮助!


您可以通过使用 GDB 启动应用程序来调试应用程序

%> gdb <your_executable>

或者通常更简单的方法是启动应用程序,然后使用 PID 将调试器附加到进程。

%> gdb -p <pid>

对于命令行选项,只需键入gdb -h在 gdb 内部运行时 通过在 gdb 命令行中键入“help”始终可以获得帮助。

这是一个快速备忘单 http://www.yolinux.com/TUTORIALS/GDB-Commands.html and a 教程网站 http://dirac.org/linux/gdb/关于一些常用命令。

正如 Arkaitz 提到的,一定要编译你的代码,以便它在可执行文件中包含必要的调试信息。

如果从命令行进行调试有点令人畏惧,可以使用一些使用 GDB 的 UI。我做了很多调试Eclipse http://eclipse.org使用gdb。

一旦您开始走上 gdb 道路,我相信您会有更多问题,并且我鼓励您就 SO 提出这些更具体的问题。

祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用GDB调试一个大项目? 的相关文章

  • 在 Python 中,如何使用交互式命令行(和可视断点?)进行调试

    我最近从 Matlab 转向了 Python Python 是一种更好的语言 从计算机科学家的角度来看 但 Python IDE 似乎都缺少一件重要的事情 一个合适的交互式调试器 我在找 通过单击编辑器中代码行旁边的图标以图形方式设置断点的
  • 项目“ ”的目标位置已存在,无法移动项目

    当我尝试与 git 存储库共享我的项目时 出现这样的异常 项目的目标位置 已存在 无法移动项目 写一个答案是因为我尝试了许多类似问题中建议的许多选项 但没有一个起作用 然后我按照以下有效步骤手动完成了此操作 并且这些步骤适用于任何 Ecli
  • 如何让 gdb 保存命令历史记录?

    我该如何设置gdb这样它就可以保存命令历史记录 当开始新的gdb会话 我想使用向上箭头键来访问之前会话的命令 简短回答 mkdir p config gdb echo set history save on gt gt config gdb
  • 终止设备上的调试

    我对设备上的调试有点困惑 当我使用模拟器时 在调试会话之后 我只需关闭模拟器窗口 但是在我的设备上调试时 如何关闭会话 只需断开 USB 电缆即可 并且安装的 apk 由Eclipse安装 应该手动删除 您可以通过转到 调试 视角 右键单击
  • gdb 输入文件中的十六进制值

    我正在尝试通过使用 gdb 内的 run 我可以成功地溢出程序 但在将十六进制值附加到字符串时遇到问题 我尝试过引用 将 mem addr 的值转换为 ascii 以及各种转义尝试 但没有成功 输入文件示例 AAAA x42 在上面的示例中
  • VS 2008 Addon 暂时禁用/删除所有 catch 块

    是否有任何插件可以暂时禁用所有 catch 块 我正在维护一个应用程序 我需要找出它到底在哪里抛出异常 有人已经完成了错误处理 所有层都完成了 这使我的工作变得艰难 我不知道如何禁用 catch 块 但您想要实现的目标可以通过异常对话框中的
  • 如何重定向 Visual Studio 调试器的输出?

    在 Visual Studio 2008 中 我可以指定命中断点时要打印的消息 通过右键单击断点并选择 命中时 当程序运行时 这些消息出现在输出窗口中 我想知道有什么办法可以将它们重定向到文件吗 指定 gt file txt作为程序的命令参
  • 如果电子邮件/密码输入错误,无法显示错误消息

    如果电子邮件 密码输入错误 我希望出现一个消息框 我正在使用 else 语句 但如果登录不正确 它不会显示消息 MyConn New OleDbConnection MyConn ConnectionString connString My
  • 使用 VS2010 Professional 从 TFS 在线删除项目(TFSDeleteProject 不在我的计算机上!)

    我有 Visual Studio 2010 Professional 并且一直在 Visualstudio com 上使用 TFS 服务 我读了这个问题及其答案 https stackoverflow com questions 13635
  • Visual Studio 调试器在混合调试模式下停止命中断点

    我在 MSVC2013 中混合调试时遇到严重问题 从本机 C DLL 调用 COM 方法后 调试器不再在断点处停止 代码结构 上图展示了代码的整体结构 我有一个解决方案 其中包含大约 10 个 C 项目 大约 50 个 C 本机项目和一个
  • iPhone - 如何使用 XCode 4 符号化/翻译/读取设备崩溃日志

    我如何 翻译 符号化来自我的设备的崩溃日志以了解应用程序崩溃的位置 假设我运行了调试版本 我有 crash 文件以及与发送的文件相对应的 app 和 app dSYM 文件到设备 界面 没有命令行 解决方案将不胜感激 因为据说组织者知道如何
  • 断点改变程序流程

    我正在尝试分析和逆向我拥有的 Objective C 程序 我通过手动更改一些操作码对可执行文件进行了一些修改 然而 当我测试修改后的软件时 我得到 死亡人数 9 没关系 我想我触碰了不该触碰的东西 我当时就推出了gdb myprogram
  • 禁用 libxml2 和 xmlsec 中的调试输出

    在我的软件中 我使用libxml2 http xmlsoft org and xmlsec http www aleksey com xmlsec 操作 显然 XML 数据结构 我主要使用 XSD 模式验证 到目前为止 它运行良好 当客户端
  • GDB 函数参数上的条件中断

    我想在函数参数大于某个值时设置断点 下面的虚拟代码 int main void uint64 t num 123456 uint64 t x 847534 uint64 t other num x x num other stuff her
  • 文件加载 加载文件时,某些字节已被替换为 Unicode 替换字符

    我在 Net框架源代码中调试时突然进入他们的文件 Visual Studio 2010引发了这个错误 文件加载 加载文件 XXX 时 某些字节已被替换为 Unicode 替换字符 保存文件将不会保留原始文件内容 当我单击 确定 时 该文件被
  • 无法使用 RVM、Ruby 1.9.2 和 Rails 3 运行 RubyMine 调试器

    我已经设置了全新的 Ubuntu 安装并遵循本指南 http ryanbigg com 2010 12 ubuntu ruby rvm rails and you安装 RVM Ruby 1 9 2 和 Rails 3 然后我安装了RubyM
  • 有没有办法在 gdb 中设置一个以调用堆栈为条件的断点?

    我正在 Linux 上的 gdb 7 1 中调试 C 我有一个函数a 代码中很多地方都会调用它 我想在其中设置一个断点 但前提是它是从b 有什么办法可以做到吗 有没有办法做到这一点 只有当b 被叫自c 等等无穷无尽 Update 现在有一个
  • dprintf 与 break + 命令 + continue 之间有什么区别?

    例如 dprintf main hello n run 生成与以下内容相同的输出 break main commands silent printf hello n continue end run 使用是否有显着的优势dprintf ov
  • 当意图过滤器启动时调试应用程序

    我通常通过按 Eclipse 中的小 bug 图标来调试我的应用程序 但现在我在清单中插入了这样的意图过滤器
  • 专门逐行调试

    我有一个用 Pascal 编写的脚本 我会以这种方式调试它 在每一行停止 转储内存中所有变量的值 然后转到下一行 是否可以使用 gdb 或其他 Linux 开源工具来完成此操作 使用选项编译文件 g fpc gpc g file pas R

随机推荐