gdb对于linux应用程序调试实现机制浅析

本文介绍了GDB在Linux环境下利用ptrace系统调用调试应用程序的实现机制。内容包括进程调度、信号处理、以及如何通过ptrace实现寄存器和内存的读写、单步执行和断点设置。调试器GDB作为高优先级进程,通过ptrace命令控制被调试进程进入调试模式,允许用户进行各种调试操作。
摘要由CSDN通过智能技术生成

1.1    Gdb对于linux应用程序调试实现机制

jtag调试方式直接通过jtag扫描链控制had模块来实现非侵入式调试。Jtag调试方式可以通过had向cpu的流水线中灌指令的方式控制cpu执行某条指令,以此实现cpu的寄存器、memory的读写;并且通过had控制cpu的debug mode于trace mode实现断点和单步。上述的功能即实现了jtag方式的基本的调试功能。相比于jtag调试方式,linux应用程序的调试则是通过linux内核提供的一套ptrace调试系统调用来实现上述的寄存器、memory的读写以及断点、单步等操作。那么下面介绍一下实现机制。

Ptrace系统调用相关知识就不在此介绍。

整个gdb对于linux应用程序都是基于ptrace系统调用实现的。所以,我们先了解一下linux内核对于系统调用的流程。如下图所示。

 

系统调用完,内核态返回到用户态之前会进行两次判断,分别是是否需要重新调度和是否有信号要处理,这是接下来讨论的关键所在。

进程调度:

              Linux-2.6之后支持可抢占式任务调度。当一个进程正在执行时,如果出现另外一个优先级高的进程,当前进程就会被抢占。那么,下面问题来了,抢占的时机在哪呢?是不是任何时候都可以进行抢占呢?

              被抢占有两种方式,一种是通过调用check_p

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值