首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在gdb中使用各种输入迭代函数,直到获得成功的返回值?

在gdb中使用各种输入迭代函数,直到获得成功的返回值,可以通过以下步骤实现:

  1. 首先,确保你已经在gdb中加载了你的程序,并设置了断点,以便在需要的地方停下来进行调试。
  2. 在程序执行到需要输入的地方停下来时,可以使用gdb的“call”命令来调用输入迭代函数。例如,如果你想使用scanf函数获取用户输入,可以在gdb中输入以下命令:
  3. 在程序执行到需要输入的地方停下来时,可以使用gdb的“call”命令来调用输入迭代函数。例如,如果你想使用scanf函数获取用户输入,可以在gdb中输入以下命令:
  4. 这将在gdb中调用scanf函数,并将用户输入的整数存储在变量variable中。
  5. 接下来,你可以使用gdb的“if”命令来检查返回值是否成功。例如,如果你想检查scanf函数的返回值是否等于1(表示成功读取了一个整数),可以在gdb中输入以下命令:
  6. 接下来,你可以使用gdb的“if”命令来检查返回值是否成功。例如,如果你想检查scanf函数的返回值是否等于1(表示成功读取了一个整数),可以在gdb中输入以下命令:
  7. 这将检查寄存器rax的值是否等于1,如果是,则表示成功读取了一个整数。
  8. 如果返回值不符合预期,你可以使用gdb的“while”循环来重复执行输入迭代函数,直到获得成功的返回值为止。例如,你可以在gdb中输入以下命令:
  9. 如果返回值不符合预期,你可以使用gdb的“while”循环来重复执行输入迭代函数,直到获得成功的返回值为止。例如,你可以在gdb中输入以下命令:
  10. 这将在gdb中循环调用scanf函数,直到成功读取一个整数为止。

总结起来,使用gdb中的“call”命令调用输入迭代函数,使用“if”命令检查返回值,使用“while”循环重复执行输入迭代函数,直到获得成功的返回值。这样可以在gdb中进行迭代输入,直到满足你的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

linux下gdb调试方法与技巧整理「建议收藏」

until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体; until+行号: 运行至某行,不仅仅用来跳出循环; finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息...; call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55); quit:简记为 q ,退出gdb; 三、gdb基本使用命令 1、运行命令 run:简记为...until+行号: 运行至某行,不仅仅用来跳出循环 finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit:简记为 q ,退出gdb 2、设置断点 break n (简写b n):在第n行处设置断点...list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12 list 函数名:将显示“函数名”所在函数的源代码,如:list main list :不带参数,将接着上一次 list

2.7K20

Linux下GDB调试指令总结

代码调试器:避免不了,程序会出现bug,但是使用命令行编译出错后是没有调试信息的(g++编译时),因此我们需要使用gdb对程序进行调试。 ?...g++ -g -std=c++11 main.cpp gdb a.out 常用的指令如下: 01 运行指令: run(简写r): 运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步命令...until+行号:运行至某行,不仅仅用来跳出循环 finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit(简写q) : 退出gdb 02 设置断点: break n (简写b n):在第n行处设置断点...gdb_test() 函数 print gdb_test(a):将以变量 a 作为参数调用 gdb_test() 函数 display 表达式:在单步运行时将非常有用,使用display命令设置一个表达式后

4.6K20
  • C语言:---gdb多线程调试

    1)恢复程序运行和单步调试 当程序被停住了,你可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来。也可以使用step或next命令单步跟踪程序。...finish 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。 until 或 u 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。...D、强制函数返回 如果你的调试断点在某个函数中,并还有语句没有执行完。你可以使用return命令强制函数忽略还没有执行的语句并返回。...return return 使用return命令取消当前函数的执行,并立即返回,如果指定了,那么该表达式的值会被认作函数的返回值。...E、强制调用函数 call 表达式中可以一是函数,以此达到强制调用函数的目的。并显示函数的返回值,如果函数返回值是void,那么就不显示。

    2.2K20

    GDB使用详解

    *注意-g,在linux下用gcc编译时,如果不加-g,编译器会进行优化,就不会生成调试信息,无法调试,也可以使用-ggdb,这是gcc为gdb提供的更详细的调试信息,别的调试器无法使用。...二、常见命令 l(list):显示代码,list 行号:将显示当前文件以“行号”为中心的前后10行代码,如:list 12,list 函数名:将显示“函数名”所在函数的源代码,如:list main...r (run):执行程序; s(step):有函数时,进入函数函数体,没有时,单步执行; n (next):单步执行,不进入函数体; c (continue):遇到断点以后,程序会阻塞,输入c可以让程序继续执行...until:可以运行程序直到退出循环体; finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息; watch:设置一个监视点,一旦被监视的“表达式”的值改变,gdb...help 命令将显示“命令”的常用帮助信息; call 函数(参数):调用“函数”,并传递“参数”,如:call gdb_test(55); layout:用于分割窗口,可以一边查看代码,一边测试;

    7.1K100

    GDB调试学习

    gdb调试 能进行GDB调试,一般在编译过程中,需使用-g参数。如果不使用-g参数,则在gdb调试过程中,将不能得到程序的函数名、变量名等信息,而只能看见运行时内存地址。...c:继续执行被调试程序,直到到下一个断点,或程序整体结束。 b:设置断点,包括以下几种: s:执行一行源程序的代码,如果此行代码中存在函数调用,则进入该函数。...如希望程序中断后显示即将被执行的下一条汇编指令,可使用如下命令:display /i pc,其中gdb帮助命令,提供对GDB各种命令的解释说明。如果指定了“命令名称”参数,则显示该命令的详细说明;若果没有指定参数,则分类显示所有GDB命令,共用户进一步浏览和查询。...如set val = 2即为把2保存到val变量中;设置输入参数使用set args a b c(a,b,c分别为对应输入参数)。 watch:监视一个变量的值,不管它何时被改变。

    1.4K20

    GDB实现原理和使用范例

    一、前言 这篇文章为了让你深入了解gdb的工作原理,以及如何在linux环境下使用强大的gdb调试程序功能。 二、gdb工作原理 2.1....每个DIE有: 一个 TAG 属性表达描述什么类型的东西, 如: TAG_subprogram(函数)、TAG_formal_parameter(形式参数)、TAG_variable(变量)、TAG_base_type...说这个函数在 foo.c 第879(十六进制36F)行声明 AT_prototyped 为一个 Bool 值, 为 True 时代表这是一个子程序/函数(subroutine) AT_type 属性描述这个函数返回值的类型是什么...三、gdb的使用方法 3.1. 启动gdb gdb有三种使用方法: 一个程序gdb 。或者gdb后,然后在交互式框输入r 。...如果设置足够多的函数断点,可以打印出所有的函数调用关系,然后后处理该脚本的输出,可以得到一个函数调用图。这是一个比较快捷的方法。 最后的args 文件中需要保存运行workbinary命令的参数。

    5.3K10

    什么是Canary保护

    什么是Canary gdb指令复习 有无Canary呢就是在函数压栈的时候,函数刚开始执行的时候,它会多一个参数,也就是在ebp的上面,会压入一个Canary的值,在子函数验证完之后,对比Canary...32位程序 -no-pie 中间没有空格 -fno-stack-protector 关闭canary保护 -o 输出 生成之后图片有锁,输入指令chmod 777 canary 进行提权 下一步我们使用...运行程序,直到当前函数运行完毕返回再停止。例如进入的单步执行如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish....(gdb) until 或(gdb) u 指定程序直到退出当前循环体这里,发现需要把光标停止在循环的头部,然后输入u这样就自动执行全部的循环了。...(gdb) return 强制返回当前函数: 这样,将会忽略当前函数还没有执行完毕的语句,强制返回。return后面可以接一个表达式,表达式的返回值就是函数的返回值。

    14310

    Biu一下GDB

    a.exe(windows)或a.out(linux) ** -Wall **:打开一些很有用的编译警告 ** -std **:指定C标准,如-std=99,使用C99标准 ** -g **:指示编译器...显示指定行号或者指定函数附近的源代码 b break 在指定行号或指定函数开头设置断点 r run 运行程序,直到程序结束或遇到断点 c continue 在程序中断后继续执行程序,直到程序结束或遇到断点停下...cl clear 取消断点,和b格式相同,如果该位置有多个断点,将同时取消 i info 显示各种信息,如i b显示所有断点,i disp显示display,而i lo显示所有局部变量 bt backtrace...调用栈由栈帧(Stack Frame)组成,每个栈帧对应着一个未运行完的函数。在GDB中可以用backtrace(简称bt)命令打印所有栈帧信息。...在函数执行体完毕后删除栈帧,处理返回值,并修改当前代码行数。

    33930

    gdb 调试笔记

    设置跟踪点 或者改变跟踪点命令直到下个tstart命令才会生效;因此,不能在跟踪会话过程中改变跟踪 点的属性。...str2) 比较两个字符串是否相等,相等返回1 help function 查看可使用的函数 explore val :可以显示变量的类型 (1)观察类型 pt(ptype) 观察数据类型(结构) whatis...skip file [filename] 始终不进入指定文件 until 3 继续执行直到命中断点3 finish 继续执行直到当前函数返回 set print finish on 继续执行到函数后会打印返回值...call func 执行func函数并打印返回值 return result 强制返回,返回值为result 六、实用操作 gdb 重放操作 repeat (1)启动参数 gdb ‐n :可以不加载任何...gdbinit文件,不想使用插件时不必去注释gdbinit文件了 gdb ‐q :不打印版本和介绍信息启动 gdb ‐write:对二进制程序可读可写启动,可对二进制程序指令进行修改,并保存到文件中,或者启动后

    94300

    如何实现一个Lua调试器

    "}; 然后我们使用gdb,去获得每个函数对应的内存地址,例如: gdb -p PID -ex "p (long)luaV_execute" --batch 最后,在这个地址,使用hookso的argp...首先gdb很常见,大部分机器都装好了,其次自己去解析的话,费时费力,还需要考虑各种平台之类的兼容问题,代码也很臃肿。...3.png 命令输入 c标准输入,是无法处理回退、方向键的,比较难用,所以这里使用readline库来处理输入问题,使用的方式比较简单: char *command = readline("\n(dlua...然后判断这个函数的返回值即可 step模式 前面提到,当触发断点后,进入了step模式。...在这个模式里,程序暂停了运行,直到用户输入了n(下一步)、s(下一步入)、f(结束函数)、c(继续)、q(退出)。

    2.2K30

    【译】如何在生产环境跟踪 GO 函数的参数

    原文地址:https://blog.px.dev/ebpf-function-tracing/ 前言 这是一系列文章中的第一篇,这个系列的文字是分析记录我们如何在生产环境中使用 eBPF 调试应用程序,...观察状态的一种简单方法是使用调试器捕获函数参数。对于 Go 应用程序,我们通常使用 Delve 或 gdb。 Delve 和 gdb 可以很好地用于开发环境中的调试,但它们不经常用于生产环境中。...computeE 接受单个查询参数(iters),该参数指定为近似运算而运行的迭代次数。迭代次数越多,以计算周期为代价的结果近似就越准确。理解函数背后的数学原理并不重要。...此信息是可以用的,即使在优化的二进制文件中也是可以读取使用,除非已经剥离了调试数据(如使用 strip 命令)。...Go 的许多方面,如嵌套指针、接口、通道等,使这个过程很有挑战性,但是,要解决这些问题,需要另一种现有系统中无法使用的检测模式。

    88421

    GDB调试

    这些section里保存了调试信息,目前ELF文件采用DWARF 3(Debug With Arbitrary Record Format)标准的调试信息格式。 使用GDB你可以: 1....finish:运行程序直到函数完成,打印返回的堆栈地址和返回值及参数信息。 util [break_args]:until(u)不带参数跳出循环,break_args同clear中参数。...查看各种事件类型。...signal :给程序产生一个信号signal和handle命令中参数意义相同 强制函数返回: return []:强制函数返回,如果提供了expression则会当做返回值...这给我们一个启示,在写代码的时候注意保持良好的输入习惯:在输入括号的时候先把左右括号都输完整,再在中间填代码;在写一个新函数的时候首先把return语句写上;在写if语句的时候最好else语句也先填上,

    2.2K10

    MIT6.828实验1 —— Lab Utilities

    实验完成后使用make grade可以执行单元测试进行评分,会以gdb-server模式启动qemu,并在gradelib.py中模拟gdb-client对我们的程序进行测试。...注意对于子目录中的.和..不要进行递归。 xargs xargs的功能是将标准输入转为程序的命令行参数。可配合管道使用,让原本无法接收标准输入的命令可以使用标准输入作为参数。...根据lab中的使用例子可以看出,xv6的xargs每次回车都会执行一次命令并输出结果,直到ctrl+d时结束;而linux中的实现则是一直接收输入,收到ctrl+d时才执行命令并输出结果。...用户进程和内核进程之间是如何切换上下文的?系统调用的函数名、参数和返回值是如何在用户进程和内核进程之间传递的?...从寄存器a0中拿到函数返回值。

    2.4K00

    日志录入之旅:深入了解程序日志的编写和执行

    对于与可查找文件(例如,磁盘文件,但不是管道或终端)关联的输入流,fflush()将丢弃从基础文件提取但应用程序尚未使用的任何缓冲数据。 流的打开状态不受影响。...调用将阻塞,直到设备报告传输已完成。它还刷新与文件关联的元数据信息(请参阅stat() )。 调用fsync()并不一定确保包含该文件的目录中的条目也已到达磁盘。...通常,所有文件都是块缓冲的。如果流引用终端(如stdout通常所做的那样),那么它是行缓冲的。默认情况下,标准错误流stderr总是无缓冲的。 setvbuf() 函数可用于任何开放流以更改其缓冲区。...要想实时或及时把数据刷到磁盘中,可以自己调用fsync()函数。...(4)fflush()是把C库中的缓冲调用write() 函数写到磁盘(其实是写到内核的缓冲区)。 (5)fsync() 是把内核缓冲刷到磁盘上。

    10900

    一篇搞定fortran超详细学习教程 fortran语法讲解

    如何学习: 学习Fortran的语法规则,如语句的结束符、注释的写法等。 掌握Fortran中各种数据类型的声明和使用方法。 编写简单的Fortran程序,如打印输出不同数据类型的变量值。...掌握如何在Fortran程序中编写条件判断和循环结构。 编写包含条件语句和循环结构的Fortran程序,解决简单的逻辑和迭代问题。...子程序用于执行一系列操作但不返回值,而函数则用于执行计算并返回一个值。Fortran中的子程序和函数可以接受参数并传递数据。 如何学习: 学习Fortran中子程序和函数的定义和调用方法。...如何学习: 学习Fortran中输入输出语句的语法和使用方法。 掌握如何在Fortran程序中实现数据的读写操作。 编写包含输入输出功能的Fortran程序,处理不同格式的数据文件。...此外,Fortran还支持字符串的格式化输入输出。 如何学习: 学习Fortran中字符串类型的声明和使用方法。 掌握Fortran中字符串操作函数和运算符的使用方法。

    37610

    PHP 生成器入门

    == null); } } 客户端可以迭代出所有用户或者在任何时候停止遍历。 把生成器当迭代器使用真是无聊 是的,你的想法是对的。以上我给出的所有讲解任何人都可以从 PHP 文档中获取到。...在讲解协程和状态流解析器之前,我们快速浏览一下如何在生成器中返回数据,我们还没有将接触这方面的知识。从 PHP 5.5 开始我们可以在生成器内部使用 return; 语句,但是不能返回任何值。...这个功能在用于迭代时可能有些奇怪,但是在其他使用场景如协程时将非常有用,例如,当我们在执行一个生成器时我们可以依据返回值处理,而无需直接对生成器进行操作。...这个值看起来和普通函数的返回值并无二致,只不过它处于异步执行环境中。...; for ($i = 0; $i < 100; $i++) { $parser->push("bar\r"); $parser->push("\nfoo"); } 解析器会缓存所有输入直到接收的是

    2K10

    从零开始学习Python基础语法:打开编程大门的钥匙

    :77 是奇数请输入考试成绩:85成绩等级: B3.3.2 for循环:遍历列表、元组等可迭代对象for循环的语法:# variable是一个变量,用于存储可迭代对象中的每个元素# iterable是一个可迭代对象...无限循环无限循环...3.4 函数3.4.1 为什么使用函数:代码的组织和重用函数是一段可重用的代码块,用于执行特定的任务或计算,可以接收参数,可以返回值。...避免重复代码:如果某些代码需要在多个地方使用,可以把它们封装成函数,减少重复的代码量,使程序更加简洁。代码的可复用性更高:封装成函数的代码可以在不同的程序中复用,提高代码的可维护性和可重用性。...:函数的输入和输出参数是函数定义时指定的变量,用于接收外部传入的值;返回值是函数执行完毕后返回给调用者的结果。...for循环通常用于遍历序列或迭代器,而while循环则用于在条件成立时重复执行代码块。函数 Python中的函数使用def关键字定义。函数可以接收参数并返回值,也可以没有参数或返回值。

    14710

    使用 eBPF 在生产环境调试 Go 应用

    本文是描述我们如何在生产中使用 eBPF 调试应用程序的系列文章中的第一篇,无需重新编译/重新部署,这篇文章介绍了如何使用 gobpf[1] 和uprobes 为 Go 应用程序建立一个函数参数跟踪器,...Delve 和 gdb 在开发环境中调试效果很好,但在生产中并不经常使用,调试器会对程序造成很大的干扰,甚至允许状态变化,这可能就会导致生产环境的应用出现一些意外的故障。...为了更干净地捕获函数参数,我们将探索使用 Linux 4.x+ 中可用的增强型 BPF(eBPF[2])和更高级别的 Go 库 gobpf 的使用。...,第一条指令是 mov 0x8(%rsp),%rax,这将内容偏移 0x8 从 rsp 寄存器移到 rax 寄存器,这其实就是上面的输入参数迭代,Go 的参数是在栈上传递的。...Go 的许多特性,如嵌套指针、接口、通道等,使得这个过程具有挑战性,但是解决这些问题可实现现有系统中不存在的另一种检测模式。

    1.8K20

    【Linux】进程信号(中)

    ,形成core.pid的二进制文件,如core.pid就被叫做核心转储文件 在云服务器上看不到核心转储文件,因为在云服务器上默认关闭这个功能 ---- 输入 ulimit -a 指令 查看当前系统中特定资源对应的上限...会先进行核心转储,在终止进程 核心转储的作用 方便异常后,进行调试 为了让代码从release变为debug,所以在makefile中 加入 -g 如果不懂请看 : gdb调试器的使用 ----...输入 gdb 可执行程序 进入gdb调试器 再次输入 core-file +core文件 gdb直接定位到当前进程终止是因为8号信号,信号的更详细描述为 Arithmetic exception -...比特位的位置表示哪一个信号 比特位的内容代表是否对应的信号被阻塞 如:0000000...0010 代表2号信号被屏蔽 ---- handler表:函数指针数组 返回值为void,参数为int的函数指针...直到循环10次才解除对信号的屏蔽,最后显示打印的这句话后,执行2号进程默认动作即终止进程

    21430
    领券