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获取真实ip

    在Web开发中,获取用户的真实IP地址是一个常见需求,尤其是在安全验证、数据分析、访问统计等场景中,由于代理服务器、负载均衡器、CDN等中间设备的存在,直接通过Request.ServerVariables(“REMOTE_ADDR”)获取的IP可能是代理服务器的地址而非用户真实IP,本文将详细介绍在ASP(A……

    2025年11月27日
    1500
  • 如何用wsimport快速生成Java Web服务客户端?

    wsimport 是 Java JDK 自带的命令行工具,用于根据 WSDL(Web Services Description Language)文件生成调用 Web Service 所需的客户端代码(如 Java 类、接口等),它简化了 Java 应用与 SOAP Web Service 的集成过程,以下是详……

    2025年7月8日
    5900
  • assert.js的核心功能是什么?如何有效用于代码测试与验证?

    assert.js是Node.js内置的轻量级断言库,主要用于在代码中验证条件是否符合预期,若条件不满足则抛出错误,常用于开发阶段的调试、单元测试及参数校验,作为Node.js核心模块之一,它无需通过npm安装,直接通过require(‘assert’)即可引入,其设计目标是提供简单直接的断言机制,帮助开发者快……

    2025年11月4日
    2200
  • 解锁Mac终端高效秘诀?

    打开终端的4种方法聚焦搜索(推荐)按下 Command + 空格键 → 输入“终端” → 回车启动(3秒完成),Launchpad点击Dock栏火箭图标 → 进入“其他”文件夹 → 点击“终端”,应用程序文件夹访达 → 左侧“应用程序” → 打开“实用工具”文件夹 → 双击“终端”,Spotlight替代方案安……

    2025年6月20日
    7100
  • 如何安全退出FTP连接?

    安全退出FTP连接需在传输完成后执行退出命令,推荐步骤: ,1. 确保所有文件传输操作已完成。 ,2. 在FTP命令行提示符下输入:QUIT 或 bye ,3. 按回车键,系统将自动断开连接并退出FTP程序。 ,**切勿直接关闭终端窗口**,否则可能导致连接未正常终止。

    2025年7月6日
    14800

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信