如何将 CLI 参数传递给 GDB 中“定义”内的“命令”?

2024-06-20

E.g.:

define mycmd
    break $arg0
    commands
        print $arg0
    end
end
mycmd myfunc
continue

Prints:

$1 = void

而不是预期的myfunc, 因为$arg0当命令被点击时被评估,并且由于它尚未被定义显示void.

有没有办法将其传递给commands?

我想我可以用Python轻松地做到这一点,但如果有一种更快的方法那就太酷了。但如果你已经准备好了Python,那么无论如何都可以粘贴它。

动机:自动化https://stackoverflow.com/a/5372742/895245 https://stackoverflow.com/a/5372742/895245,我想写的地方:

define break-stack
    break $arg0
    commands
        tbreak $arg1
        continue
    end
end
break-stack ParentFunc ChildFunc

对我知道那个https://stackoverflow.com/a/20209911/895245 https://stackoverflow.com/a/20209911/895245提供Python解决方案。

GDB 7.11、Ubuntu 16.10。


我无法哄骗 gdbeval评估多行命令,例如commands,所以这是一个使用的解决方案shell.

define break-stack
  dont-repeat
  break $arg0
  shell { echo commands; echo tbreak $arg1; echo continue; echo end; } > /tmp/gdbtmp
  source /tmp/gdbtmp
  shell rm /tmp/gdbtmp
end

If your echo接受-e选项,它可以缩短为

define break-stack
  dont-repeat
  break $arg0
  shell echo -e "commands\ntbreak $arg1\ncontinue\nend" > /tmp/gdbtmp
  source /tmp/gdbtmp
  shell rm /tmp/gdbtmp
end

您的具体任务 - 功能停止时b由函数调用a- 可以通过使用来完成$_caller_is便利函数,包含在最新版本的 gdb 中。

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

如何将 CLI 参数传递给 GDB 中“定义”内的“命令”? 的相关文章

  • gdb 输入文件中的十六进制值

    我正在尝试通过使用 gdb 内的 run 我可以成功地溢出程序 但在将十六进制值附加到字符串时遇到问题 我尝试过引用 将 mem addr 的值转换为 ascii 以及各种转义尝试 但没有成功 输入文件示例 AAAA x42 在上面的示例中
  • 如何在 gdb 上进行 grep 打印

    有没有办法在 gdb 中 grep 打印命令的输出 就我而言 我正在使用 gdb 调试核心转储 并且我正在调试的对象包含大量元素 我发现很难寻找匹配的属性 即 gdb print this grep
  • 如何在GDB中运行记录指令历史记录和函数调用历史记录?

    编辑 根据下面的第一个答案 当前的 技巧 似乎正在使用 Atom 处理器 但我希望一些 gdb 专家可以回答这是否是一个基本限制 或者路线图上是否添加了对其他处理器的支持 反向执行似乎在我的环境中起作用 我可以反向继续 查看合理的记录日志
  • GNU gdb 如何显示源文件名和符号行

    当使用 GNU gdb 调试 c 进程时 list 命令将打印行但不告诉我文件名 设置断点可以显示我想要的所有行和文件信息 但我不想设置断点并且必须禁用或删除它 gdb b oyss funtion Breakpoint 13 at 0x8
  • 专门逐行调试

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

    在 GDB 中 给定一个指向结构体的变量 print将显示原始指针值并x将显示指向的原始字节 有什么方法可以显示指向该结构的数据 即字段及其值的列表 print variable 如果这样做 它将在 GDB 中显示该变量的值 您还可以选择显
  • gdb 通过指向错误的代码行显示不正确的回溯

    我们可以通过在源代码中包含多个中止调用 用非常简单的示例重现此问题 在下面的示例代码中 我们在不同条件下总共有四个中止调用 但是当我们使用优化标志 O3 进行编译时 我们只能看到一个中止调用的调试信息 因此 在这四个中止调用中发生崩溃时 g
  • 使用 libtool 和 gdb

    我正在开发一个使用 GNU 自动工具的项目 因此为了使用 gdb 调试代码 我从 libtool 中运行 gdb libtool mode execute gdbtui foobar 是否可以重新加载项目的修改版本 而不必退出 gdb li
  • GDB/bin/bash 无法在 Eclipse CDT 中执行应用程序?

    在 Mac OS X Mojave 上使用 Eclipse CDT 运行 GDB 时遇到困难 当我尝试调试项目时 GDB 表现得很混乱 我能够调试几次 但随后它在下一个调试会话开始时开始停止 并显示消息 配置 GDB 可执行文件是 User
  • Eclipse 调试模式下的 GDB 找不到 stdlib/rand.c

    我试图让 gdb 在 ubuntu 上与 eclipse cdt 一起运行 以开始调试一些简单的程序 所以我做了我认为必要的步骤来让它运行 1 创建可执行项目 2 Compile 3 Run 4 创建文件 gdbinit 并将其放在主项目文
  • TUI模式下的GDB:如何处理stderr与ui的交互

    我正在尝试使用gdb来调试caffe http caffe berkeleyvision org 我更喜欢使用 tui 模式 因为它允许我查看整个源代码而不仅仅是一行 但有一个问题 每当程序caffe输出一些东西stderr 输出扭曲了 t
  • gcc 中 -g 选项的作用是什么

    我看到很多关于 gdb 的教程要求在编译 c 程序时使用 g 选项 我无法理解 g 选项的实际作用 它使编译器将调试信息添加到生成的二进制文件中 此信息允许调试器将代码中的指令与源代码文件和行号相关联 拥有调试符号可以使某些类型的调试 例如
  • 在GDB中的每一行设置断点

    有没有办法用GDB在代码的每一行设置断点 明明我不想打b addr对于每一行 所以我想知道是否有一种快速的方法来做到这一点 Edit请注意 我正在运行由其他人创建的二进制文件 并且我无权访问源代码 不幸的是 该二进制文件尚未使用 g 标志进
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 使用 math.h 函数时 gdb 给出奇怪的输出[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 gdb 将 sqrt 3 计算为 0 https stackoverflow com questions 5122570 why does gdb evaluate sqrt3 to 0 这里
  • 评估 gdb 中的变量/函数

    我有以下代码 char seg mmap 0 printf seg x n seg 该程序打印seg b7ffd000 而在 gdb 中 对于相同的执行 当使用p x seg 它打印 2 0x0 我在这里很困惑 这不是同一个var吗seg
  • 多线程调试器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 GDB 在使用多线程 pthreads 进行调试时存在严重问题 nix 上还有其他好的 C C 多线程调
  • Ruby 解释器出现段错误后,是否可以从 corefile 中获取 Ruby 回溯?

    Note 我使用了在使用 libxml ruby gem 时遇到的段错误来说明问题 但我已经用所述 gem 解决了我的问题 这个问题真正涉及的是从 gdb 使用 corefile 查看 Ruby 回溯 即解释器在 Ruby 代码无法处理异常
  • 是否可以根据函数要返回的内容在函数末尾设置条件断点?

    我有以下更复杂的版本 unsigned int foo unsigned int bar unsigned int myFunc return foo bar 就我而言 myFunc从很多地方调用 在其中一种情况下 出现了问题 通过进一步调
  • gdb:显示一些数据的类型信息

    基本上 我想得到typeid this name 即真实类型this 我想在GDB中得到这个 不修改源代码 我试过print typeid this 但它说typeid未知 因为我没有将其包含在源文件中 Use ptype命令 像这样 gd

随机推荐

  • 在Python中合并两个不同长度的文件

    我有两个文件 其列数相同 但行数不同 第一个文件是时间戳列表和单词列表 第二个文件是时间戳列表 每个单词中都有声音列表 即 9640 12783 she 12783 17103 had and 9640 11240 sh 11240 127
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 如何在 Ext.js 中自动完成 html 输入标签?

    如果您使用 Ext js 库 如何在输入文本区域中进行自动完成 更准确地说 如何根据迭代 Ajax 请求进行自动完成 例如jQuery 自动完成插件 http docs jquery com Plugins AutoComplete aut
  • Spring Neo4j不保存数据

    我创建了新的应用程序 它应该通过存储库将 Person 对象保存到 neo4j 中 但是当我使用 findAll 方法时 我没有任何项目 我正在使用 Spring Boot 这是我的配置 package com example import
  • Google Chrome 客户端的 ASP.NET MVC 路由问题

    我的 Silverlight 4 应用程序托管在 ASP NET MVC 2 Web 应用程序中 当我使用 Internet Explorer 8 浏览时 它工作正常 但是 Google Chrome 版本 5 无法找到 ASP NET 控
  • 在调试或发布控制台应用程序中创建文件夹

    我在 vs2010 C 中有一个控制台应用程序 在项目中 我添加了一个文件夹 右键单击项目 添加 gt 文件夹 我希望在编译应用程序 调试或发布 时 然后该文件夹将在调试或发布目录中创建 如果不存在 那可能吗 控制台应用程序是一个守护程序
  • 检查 WebView 元素时的 UiAutomator 错误

    I have recently started automation testing in android and was using UiAutomator tool for inspecting UI elements Surprisi
  • 使用healpy通过HEALPix像素化制作2D直方图

    数据是天空中物体的坐标 例如如下 import pylab as plt import numpy as np l np random uniform 180 180 2000 b np random uniform 90 90 2000
  • android edittext中的字符映射

    我想让我的编辑文本就像我写字符 g 时一样 它是相关的映射自定义字符应该写成印地语中的 我认为应该有字符映射 但没有知识任何人都可以帮助我 怎么做 其他应用程序https play google com store apps details
  • 是否可以@Lazy 初始化Spring @Value?

    是否有可能 Lazy初始化一个Spring Value e g Lazy Value someConfig private String someConfig 我特别提到的场景是通过 JNDI 设置的变量 并且一个嵌入式 Tomcat 容器
  • 强制 Mpeg2 解复用器使用 ffdshow 渲染 H 264 数字电视视频

    不幸的是 我花了很多时间尝试使 DirectShow 的 DTVViewer 示例正常工作 但没有成功 DVBT网络的视频格式是H264 我发现IntelliConnect行为IFilterGraph更喜欢使用 Mpeg2 视频格式 对于那
  • 错误域=kAFAssistantErrorDomain 代码=209“(空)”

    我面临着一个问题SFSpeechRecognizer 启动应用程序几秒钟后 我开始收到错误消息 错误域 kAFAssistantErrorDomain 代码 209 空 和 错误 域 kAFAssistantErrorDomain 代码 2
  • python 单击帮助格式化换行符

    我发现我的 EPILOG 中没有保留换行符 我想知道为什么如果我看到只有当一行有换行符时才会保留74人物 http click pocoo org 5 commands import click sys def main caller ar
  • Celery工人变量共享问题

    我正在使用Python并且celery http www celeryproject org在一个项目中 在项目中 我有两个文件 celeryconfig py BROKER URL amqp guest guest localhost 5
  • fread 将空导入为 NA

    我正在尝试导入带有空白的 csv 读取为 不幸的是他们都读作 NA now 为了更好地演示问题 我还展示了如何NA NA and 都映射到同一事物 除了最底部的示例 这将妨碍简单的解决方法dt is na dt lt gt write cs
  • 如何使用导航组件在单一活动设计中使用偏好?

    我想使用导航组件迁移到单一活动设计 我正在使用一项活动 其他活动是片段 对于某些屏幕 我只有布局 没有偏好 使碎片膨胀没有问题 但当我尝试按偏好工作时 我遇到了问题 我的要求是 我需要在片段中膨胀工具栏和首选项列表 我的做法 使用以下代码添
  • 同域策略如何应用于 Firefox 和 Chrome 扩展程序中的后台脚本(非内容脚本)?

    据我了解 扩展中有两种类型的脚本 一种是从网页中的 DOM 运行并与之交互的 内容脚本 它们受同源策略的约束 另一种是 内容脚本 其他的是脚本 调用它们 扩展脚本 在后台运行 可能会也可能不会与网页交互 例如main js在火狐或背景 js
  • 为 M1 mac 签署 Electron 构建会导致渲染器崩溃

    一段时间以来 我一直在使用 Electron Builder 对我们的 Electron 应用程序进行英特尔构建 对它们进行签名 并且能够毫无问题地运行它们 我现在正在尝试进行 M1 arm 构建 但事实证明签署该构建会导致渲染器崩溃 不签
  • React:隐藏特定路由上的组件

    新的反应 我有一个
  • 如何将 CLI 参数传递给 GDB 中“定义”内的“命令”?

    E g define mycmd break arg0 commands print arg0 end end mycmd myfunc continue Prints 1 void 而不是预期的myfunc 因为 arg0当命令被点击时被