GDB中run命令的正确用法?

基础用法

  1. 启动程序
    在GDB中加载程序后(gdb ./my_program),输入 r 直接运行:

    (gdb) r

    程序会从头执行,直到遇到断点、崩溃或正常结束。

  2. 带参数运行
    若程序需命令行参数,在 r 后直接添加:

    (gdb) r arg1 arg2 "arg with space"

    示例:调试 ./server -p 8080 时,输入 r -p 8080

  3. 重定向输入/输出
    使用 <> 重定向标准流:

    (gdb) r < input.txt > output.log 2>&1
    • < input.txt:从文件读取输入
    • > output.log:输出重定向到文件
    • 2>&1:合并错误流到输出流

高级控制

  1. 设置环境变量
    set environment 定义运行时环境变量:

    (gdb) set env LD_PRELOAD=/path/to/lib.so
    (gdb) r
  2. 运行到指定位置
    结合断点控制执行流程:

    • main 函数设断点:b main
    • 运行到断点处暂停:r
    • 继续执行到第20行:until 20
  3. 传递信号管理
    控制程序接收的信号:

    (gdb) handle SIGINT nostop  # 忽略SIGINT中断
    (gdb) r

常见问题解决

  • 错误提示 No executable specified, use 'file'
    未加载可执行文件,需先输入 file ./my_program

  • 重新运行程序
    输入 r 会重启程序,保留当前断点和变量设置。

  • 程序崩溃时
    GDB自动暂停,用 bt 查看崩溃堆栈,info registers 检查寄存器状态。

  • 调试多进程程序
    使用 set follow-fork-mode child 跟踪子进程。


实用技巧

  1. 条件运行
    仅当条件满足时启动:

    (gdb) break main if argc > 1
    (gdb) r
  2. 记录执行轨迹
    配合日志功能复现问题:

    (gdb) set trace-commands on
    (gdb) r
  3. start 命令区别

    • start:暂停在 main 函数首行(自动设临时断点)
    • run:直接执行,依赖手动断点控制

r 是GDB中控制程序执行的入口命令,核心要点包括:

  1. 基础运行:r [参数]
  2. 重定向:r < in > out
  3. 环境控制:set env 预配置变量
  4. 协同断点:先设断点再运行
  5. 错误诊断:崩溃时用 bt 分析堆栈

引用说明基于GDB 13.2官方手册(GDB Documentation)及Linux调试实践,GDB命令遵循POSIX标准,适用于Linux/macOS/WSL环境。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6959.html

(0)
酷番叔酷番叔
上一篇 2025年7月10日 10:58
下一篇 2025年7月10日 11:35

相关推荐

  • 如何高效扫描ASP漏洞?

    asp漏洞扫描在当今数字化时代,网站安全已成为企业和个人开发者不可忽视的重要议题,ASP(Active Server Pages)作为一种经典的Web开发技术,尽管在现代化开发中逐渐被替代,但仍有许多遗留系统依赖其运行,这些系统若存在安全漏洞,可能被攻击者利用,导致数据泄露、服务器被控等严重后果,定期进行ASP……

    2025年12月15日
    6900
  • 百度智能云登录时遇到问题怎么办?

    百度智能云-登录是用户进入百度智能云服务生态的核心入口,其设计兼顾了安全性、便捷性与功能集成性,为个人开发者、企业用户及合作伙伴提供了统一的服务管理平台,通过登录入口,用户可高效访问云计算、人工智能、大数据、物联网等全栈技术服务,同时管理账号资源、安全配置及项目权限,是企业数字化转型的重要支撑工具,登录入口的多……

    2025年11月29日
    11000
  • 如何设置ASP页面禁止缓存?

    在Web开发中,ASP页面禁止缓存是一个常见需求,尤其当页面包含动态数据或敏感信息时,若被浏览器或代理服务器缓存,可能导致数据不一致、信息泄露或用户体验下降,缓存机制虽能提升页面加载速度,但在特定场景下却会成为隐患,因此掌握ASP页面禁止缓存的方法至关重要,本文将详细解析禁止缓存的原理、具体实现方式及注意事项……

    2025年10月20日
    11800
  • async/await和Promise的核心区别究竟是什么?

    Promise:异步编程的基石与局限Promise是ES6引入的异步编程解决方案,它通过“承诺”机制将异步操作封装为对象,解决了传统回调函数的“回调地狱”问题,Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),状态一旦改变便不可逆,开发者可以通过.th……

    2025年11月18日
    12100
  • ASP如何快速转换适配手机网站?

    随着移动互联网的普及,手机网站已成为企业展示形象、提供服务的重要渠道,许多基于ASP(Active Server Pages)技术开发的传统网站面临着适配移动端的迫切需求,将ASP网站转换为手机网站,不仅能提升用户体验,还能扩大受众范围,本文将详细介绍ASP转换手机网站的关键步骤、技术实现及注意事项,帮助开发者……

    2025年11月25日
    7400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信