标签:调试器

使用GDB命令行调试器调试C/C++程序

使用GDB命令行调试器调试C/C++程序

没有调试器的情况下编写程序时最糟糕的状况是什么?编译时跪着祈祷不要出错?用血祭召唤恶魔帮你运行程序?或者在每一行代码间添加printf(“test”)语句来定位错误点?如你所知,编写程序时不使用调试器的话是不方便的。幸好,linux下调试还是很方便的。大多数人使用的IDE都集成了调试器,但 linu

大树 大树 2024-07-20
0 0 0
使用Nemiver调试器来调试 C/C++ 程序

使用Nemiver调试器来调试 C/C++ 程序

如果你读过我写的使用GDB命令行调试器调试C/C++程序,你就会明白一个调试器对一段C/C++程序来说有多么的重要和有用。然而,如果一个像GDB这样的命令行对你而言听起来更像一个问题而不是一个解决方案的话,那么你也许会对Nemiver更感兴趣。Nemiver 是一款基于 GTK+ 的用于C/C++程

共饮一杯 共饮一杯 2024-07-20
0 0 0
点评五款用于 Linux 编程的内存调试器

点评五款用于 Linux 编程的内存调试器

Credit: Moini作为一个程序员,我知道我肯定会犯错误——怎么可能不犯错!程序员也是人啊。有的错误能在编码过程中及时发现,而有些却得等到软件测试了才能显露出来。然而,还有一类错误并不能在这两个阶段被解决,这就导致软件不能正常运行,甚至是提前终止。如果你还没猜出是那种错误,我说的就是和内存相关

张二河 张二河 2024-07-19
0 0 0
在 Linux 中如何使用 gdb 调试 C 程序

在 Linux 中如何使用 gdb 调试 C 程序

无论多么有经验的程序员,开发的任何软件都不可能完全没有 bug。因此,排查及修复 bug 成为软件开发周期中最重要的任务之一。有许多办法可以排查 bug(测试、代码自审等等),但是还有一些专用软件(称为调试器)可以帮助准确定位问题的所在,以便进行修复。如果你是 C/C++ 程序员,或者使用 Fort

三掌柜 三掌柜 2024-07-19
0 0 0
调试器工作原理(一):基础篇

调试器工作原理(一):基础篇

这是调试器工作原理系列文章的第一篇,我不确定这个系列会有多少篇文章,会涉及多少话题,但我仍会从这篇基础开始。这一篇会讲什么我将为大家展示 Linux 中调试器的主要构成模块 - ptrace 系统调用。这篇文章所有代码都是基于 32 位 Ubuntu 操作系统。值得注意的是,尽管这些代码是平台相关的

竹子爱熊猫 竹子爱熊猫 2024-07-19
0 0 0
一位老极客的眼中的开发和部署

一位老极客的眼中的开发和部署

多年前,我曾是一名 Smalltalk 程序员,这种经验让我以一种不同的视角来观察编程的世界,例如,需要花时间来适应源代码应该存储在文本文件中的这种做法。我们作为程序员通常会区分“开发”和“部署”,特别是我们在开发的地方所使用的工具不同于我们在之后部署软件时的地点和工具时。而在 Smalltalk

醒在深海的猫 醒在深海的猫 2024-07-19
0 0 0
调试器工作原理(三):调试信息

调试器工作原理(三):调试信息

这是调试器的工作原理系列文章的第三篇。阅读这篇文章之前应当先阅读第一篇与第二篇。这篇文章的主要内容本文将解释调试器是如何在机器码中查找它将 C 语言源代码转换成机器语言代码时所需要的 C 语言函数、变量、与数据。调试信息现代编译器能够将有着各种缩进或嵌套的程序流程、各种数据类型的变量的高级语言代码转

宇宙之一粟 宇宙之一粟 2024-07-19
0 0 0
调试器工作原理(二):断点

调试器工作原理(二):断点

这是调试器工作原理系列文章的第二部分,阅读本文前,请确保你已经读过第一部分。关于本文我将会演示如何在调试器中实现断点。断点是调试的两大利器之一,另一个是可以在被调试进程的内存中检查变量值。我们在系列的第一部分已经了解过值检查,但是断点对我们来说依然神秘。不过本文过后,它们就不再如此了。软件中断为了在

向阳逐梦 向阳逐梦 2024-07-19
0 0 0
开发一个 Linux 调试器(三):寄存器和内存

开发一个 Linux 调试器(三):寄存器和内存

上一篇博文中我们给调试器添加了一个简单的地址断点。这次,我们将添加读写寄存器和内存的功能,这将使我们能够使用我们的程序计数器、观察状态和改变程序的行为。系列文章索引随着后面文章的发布,这些链接会逐渐生效。准备环境断点寄存器和内存Elves 和 dwarves源码和信号源码级逐步执行源码级断点调用栈展

贤蛋大眼萌 贤蛋大眼萌 2024-07-19
0 0 0
开发一个 Linux 调试器(二):断点

开发一个 Linux 调试器(二):断点

在该系列的第一部分,我们写了一个小的进程启动器,作为我们调试器的基础。在这篇博客中,我们会学习在 x86 Linux 上断点是如何工作的,以及如何给我们工具添加设置断点的能力。系列文章索引随着后面文章的发布,这些链接会逐渐生效。准备环境断点寄存器和内存Elves 和 dwarves源码和信号源码层逐

竹子爱熊猫 竹子爱熊猫 2024-07-19
0 0 0
开发一个 Linux 调试器(一):准备环境

开发一个 Linux 调试器(一):准备环境

任何写过比 hello world 复杂一些的程序的人都应该使用过调试器(如果你还没有,那就停下手头的工作先学习一下吧)。但是,尽管这些工具已经得到了广泛的使用,却并没有太多的资源告诉你它们的工作原理以及如何开发,尤其是和其它那些比如编译器等工具链技术相比而言。此处有一些其它的资源可以参考:http

大猫 大猫 2024-07-19
0 0 0
开发一个 Linux 调试器(五):源码和信号

开发一个 Linux 调试器(五):源码和信号

在上一部分我们学习了关于 DWARF 的信息,以及它如何被用于读取变量和将被执行的机器码与我们的高级语言的源码联系起来。在这一部分,我们将进入实践,实现一些我们调试器后面会使用的 DWARF 原语。我们也会利用这个机会,使我们的调试器可以在命中一个断点时打印出当前的源码上下文。系列文章索引随着后面文

穿过生命散发芬芳 穿过生命散发芬芳 2024-07-19
0 0 0
开发一个 Linux 调试器(七):源码级断点

开发一个 Linux 调试器(七):源码级断点

在内存地址上设置断点虽然不错,但它并没有提供最方便用户的工具。我们希望能够在源代码行和函数入口地址上设置断点,以便我们可以在与代码相同的抽象级别中进行调试。这篇文章将会添加源码级断点到我们的调试器中。通过所有我们已经支持的功能,这要比起最初听起来容易得多。我们还将添加一个命令来获取符号的类型和地址,

贤蛋大眼萌 贤蛋大眼萌 2024-07-19
0 0 0
开发一个 Linux 调试器(十):高级主题

开发一个 Linux 调试器(十):高级主题

我们终于来到这个系列的最后一篇文章!这一次,我将对调试中的一些更高级的概念进行高层的概述:远程调试、共享库支持、表达式计算和多线程支持。这些想法实现起来比较复杂,所以我不会详细说明如何做,但是如果你有问题的话,我很乐意回答有关这些概念的问题。系列索引准备环境断点寄存器和内存Elves 和 dwarv

泡泡 泡泡 2024-07-19
0 0 0
开发一个 Linux 调试器(九):处理变量

开发一个 Linux 调试器(九):处理变量

变量是偷偷摸摸的。有时,它们会很高兴地呆在寄存器中,但是一转头就会跑到堆栈中。为了优化,编译器可能会完全将它们从窗口中抛出。无论变量在内存中的如何移动,我们都需要一些方法在调试器中跟踪和操作它们。这篇文章将会教你如何处理调试器中的变量,并使用 libelfin 演示一个简单的实现。系列文章索引准备环

醒在深海的猫 醒在深海的猫 2024-07-19
0 0 0
开发一个 Linux 调试器(八):堆栈展开

开发一个 Linux 调试器(八):堆栈展开

有时你需要知道的最重要的信息是什么,你当前的程序状态是如何到达那里的。有一个 backtrace 命令,它给你提供了程序当前的函数调用链。这篇文章将向你展示如何在 x86_64 上实现堆栈展开以生成这样的回溯。系列索引这些链接将会随着其他帖子的发布而上线。准备环境断点寄存器和内存ELF 和 DWAR

贤蛋大眼萌 贤蛋大眼萌 2024-07-19
0 0 0
三步上手 GDB

三步上手 GDB

调试 C 程序,曾让我很困扰。然而当我之前在写我的操作系统时,我有很多的 Bug 需要调试。我很幸运的使用上了 qemu 模拟器,它允许我将调试器附加到我的操作系统。这个调试器就是 gdb。我得解释一下,你可以使用 gdb 先做一些小事情,因为我发现初学它的时候真的很混乱。我们接下来会在一个小程序中

醒在深海的猫 醒在深海的猫 2024-07-19
0 0 0
学习用 Thonny 写代码: 一个面向初学者的Python IDE

学习用 Thonny 写代码: 一个面向初学者的Python IDE

学习编程很难。即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作。 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方。程序员通常使用被叫做 调试器 debugger 的工具来处理这种情况,它允许一步一步地运行他们的程序

大树 大树 2024-07-18
0 0 0
调试器到底怎样工作

调试器到底怎样工作

你也许用过调速器检查过你的代码,但你知道它们是如何做到的吗?调试器是大多数(即使不是每个)开发人员在软件工程职业生涯中至少使用过一次的那些软件之一,但是你们中有多少人知道它们到底是如何工作的?我在悉尼 linux.conf.au 2018 的演讲中,将讨论从头开始编写调试器……使用 Rust!在本文

穿过生命散发芬芳 穿过生命散发芬芳 2024-07-18
0 0 0
Python 调试器入门

Python 调试器入门

Python 生态系统包含丰富的工具和库,可以让开发人员更加舒适。 例如,我们之前已经介绍了如何使用交互式 shell 增强 Python。本文重点介绍另一种可以节省时间并提高 Python 技能的工具:Python 调试器。Python 调试器Python 标准库提供了一个名为 pdb 的调试器。

剑圣无痕 剑圣无痕 2024-07-18
0 0 0
1 2