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

按立即顺序调用StepOut()和EvaluateExpression()

在软件开发中,StepOut()EvaluateExpression() 是两种常见的调试操作,通常在集成开发环境(IDE)的调试器中使用。以下是对这两个操作的详细解释及其应用场景:

StepOut()

基础概念: StepOut() 是一个调试命令,用于执行当前函数剩余的部分并跳出该函数。这个操作会继续执行程序直到当前函数的返回点。

优势:

  • 快速跳过当前函数的剩余部分,节省时间。
  • 有助于快速定位到调用当前函数的代码位置。

应用场景:

  • 当你已经在函数内部调试,并且希望查看该函数调用后的程序状态时。
  • 在检查完函数内部的逻辑后,需要继续执行程序的其他部分。

EvaluateExpression()

基础概念: EvaluateExpression() 允许你在调试过程中动态地计算表达式的值。这可以用来检查变量的当前值、执行临时计算或修改程序状态。

优势:

  • 实时查看和修改程序中的变量值。
  • 可以在不修改源代码的情况下测试不同的逻辑或条件。

应用场景:

  • 需要检查某个复杂表达式的结果时。
  • 想要在运行时修改某个变量的值以观察其对程序行为的影响。

同时调用 StepOut() 和 EvaluateExpression()

如果你需要按立即顺序调用 StepOut()EvaluateExpression(),通常的做法是:

  1. StepOut(): 首先执行 StepOut() 来跳出当前函数。
  2. EvaluateExpression(): 然后在程序暂停在新的位置后,使用 EvaluateExpression() 来评估某个表达式。

示例场景: 假设你在调试一个函数 calculateTotal(),你想知道这个函数返回后的某个全局变量的值。

代码语言:txt
复制
def calculateTotal():
    total = 10 + 20
    return total

global_var = 0
global_var = calculateTotal()

在调试时:

  1. calculateTotal() 内部设置断点。
  2. 执行 StepOut() 跳出该函数。
  3. 此时程序会停在 global_var = calculateTotal() 的下一行。
  4. 使用 EvaluateExpression("global_var") 查看 global_var 的新值。

可能遇到的问题及解决方法

问题: 执行 StepOut() 后程序没有按预期停止。

  • 原因: 可能是因为后续代码没有断点或者程序逻辑导致程序继续运行而没有暂停。
  • 解决方法: 确保在 StepOut() 后有合适的断点设置,或者使用条件断点来控制程序的暂停。

问题: EvaluateExpression() 返回的值不正确。

  • 原因: 表达式可能写错,或者评估时的上下文环境已经改变。
  • 解决方法: 仔细检查表达式的正确性,并确保在正确的上下文中评估表达式。

通过合理使用这两个调试工具,可以有效地提高软件开发的效率和准确性。

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

相关·内容

  • 7. 模块构建之解析_source获取dependencies

    中处理 同walkStatement中的VariableDeclaration处理几乎一致,不再赘述; CallExpression 该表达式是针对函数调用的场景,这里区分为三种场景,[case 1]是立即执行函数...case 1: iife 立即执行函数 看到iife有细分为两个场景:call和bind会改变this和入参的指向,因此会将call/bind归为一类需要特出处理,另外一种就是普通的立即函数调用;针对iife...currentThis) {...} // functionExpression表示函数表达式; // options是函数表达式的实参; // currentThis显示指定了函数内部的this指向 下面看下两种立即执行函数的区别在哪...下面重点看下parser.evaluateExpression(expression.test);的执行逻辑 evaluateExpression(expression) { //......(expr.left); right = this.evaluateExpression(expr.right); //...

    67010

    Xcode常用快捷键

    Spotlight的功能 option + command + a 向工程中添加文件(add file to project) alt + command + w 关闭当前工程(close project) 和command...代码编辑器里的快捷键 command + → 移动到一行末尾 command + delete 删除一行代码,和上一个快捷键组合使用 command + [ 或 ] 向前或向后调整代码缩进 control...+ ↑ 或 ↓ 在.m/.c/.cpp 文件和头文件.h之间切换 esc 可以弹出对应的代码提示 control + command + e 重构变量名,将光标放在变量名上或者双击选中这个变量,然后按该快捷键...同样是选中控件的情况下,可以根据控件的约束更新位置(update frame) 另外在storyboard界面通过command + shift + o 搜索到对应的文件后,按住option键双击或者按回车这个文件可以以...结束运行中的工程或者取消编译中的工程 F6 从断点处执行下一行代码(stepOver) F7 跳到当前的函数内部调试(stepInto) F8 从当前函数中返回(stepOut) 未经允许不得转载:RffanLAB

    2.6K20

    Kubernetes API 访问控制

    可以使用kubectl、客户端库方式对REST API的访问,Kubernetes的普通账户和Service帐户都可以实现授权访问API。...我们可以指定多个认证模块,每个认证模块都会按顺序进行,直到其中一个成功。 (在GCE上,客户端证书、密码、Plain Tokens和JWT Tokens都会启用。)...Kubernetes支持多种授权模块,如ABAC模式、RBAC模式和Webhook模式。当管理员创建集群时,他们将会配置在API Server中使用的授权模块。...也可以可以配置多个准入控制器,每个都会按顺序调用。 如图中步骤3。 ? 与认证和授权模块不同,任何接入控制器模块被遭拒时,请求会立即失败。...当请求通过了所有准入控制(Admission Control),就会使用相应API对象的验证功能,然后写入对象存储(如步骤4所示) API Server端口和IPs 之前讨论用于发送到API Server

    1.6K30

    OC - load 和 initialize

    ③ 调用顺序: 先调用类的+load,按照编译先后顺序调用(先编译,先调用),调用子类的+load之前会先调用父类的+load; 再调用分类的+load,按照编译先后顺序调用(先编译,先调用)(注意...从call_class_loads和call_category_loads函数中可以得知:可加载的类和分类分别保存在loadable_classes和loadable_categories数组中,因此我们只需要搞明白这两个数组中的类和分类的存放顺序...prepare_load_methods 按编译顺序将可加载的类添加进loadable_classes数组,先添加父类,再添加子类;按编译顺序将可加载的分类添加进loadable_categories数组...所以: 按编译顺序调用类的+load方法,先编译先调用,调用子类的+load之前会先调用父类的+load; 按编译顺序调用分类的+load方法,先编译先调用。...调用顺序 ① 先调用类的+load,按照编译先后顺序调用(先编译,先调用),调用子类的+load之前会先调用父类的+load;② 再调用分类的+load,按照编译先后顺序调用(先编译,先调用)(注意:分类的其它方法是

    1.4K10

    ElasticMQ 0.7.0:使用Akka和Spray的长轮询,非阻塞实现

    这是一次重要的重写,核心部分是使用Akka Actor和REST层则采用Spray。目前为止,只有核心部分和SQS模块被重写;SQL后端和复制(Replication)尚在进行中。...这有助于减少使用的带宽(不需要非常频繁的请求),提高系统整体性能(发送后立即收到消息)并降低SQS消耗。 现在,独立服务器是一个单一的jar文件。...在这里map,flatMap和for-comprehensions(更好的语法是map/ flatMap)非常方便,例如(简化): //异步的按顺序调用查找队列并删除它, //因为?...然而,这个Future几乎可以立即完成(例如正常情况下),或者在10秒(或者其他时间)之后 ,支持这些所需要的代码没有变化。所以唯一要做的就是延迟完成Future,直到指定的时间过去或新的消息到达。...当接收消息的请求到达,并且队列中没有任何内容时,我们不是立即回复(即向发送者Actor发送空列表),而是将原始请求的引用和发送方actor存储在一个map中。

    1.6K90

    JS 中的钩子(Hook)实现

    开发者注册钩子函数,系统或者框架决定在什么时候调用钩子函数,某种意义上,它和事件回调函数有异曲同工之妙。...) 和 调用(Call)。...Hook 的分类 3.1 串行和并行 根据钩子函数的执行顺序,可以分为: 串行钩子:根据注册顺序调用钩子,后面的钩子必须等到前面的钩子执行完后才能调用,串行钩子可以是同步的,也可以是异步的 并行钩子:按顺序调用钩子...Hook 调用 注册钩子比较简单,只需将钩子函数按顺序加入钩子函数数组即可。而调用钩子,需要根据钩子类型来采取不同调用方法。...4.1 同步钩子的调用 同步钩子的调用是最简单,按顺序调用一遍钩子函数即可,并且只有串行执行。

    3K20

    RxJava2--多线程调度Scheduler

    Schedulers.trampoline(): 在当前线程立即执行任务,如果当前线程有任务在执行,则会将其暂停,等插入进来的任务执行完之后,再将未完成的任务接着执行。...} 看输出的日志:会发现有些不一样 onNext发送的线程在子线程RxCachedThreadScheduler-1 onNext事件在子线程发送后,并不会在主线程立即响应...,而是会积攒后,等事件都发送完毕后,统一按顺序回调到主线程 E/SelectImageActivity: Emitter onNext1...RxCachedThreadScheduler-1 E/...如果没有指定Schedulers的话,则会发送一个事件,就接收一个事件 如果指定了Schedulers的话,就会遵循线程调度了,如果没有阻塞的话,就会顺序调用,并且将事件传递到子线程接收 测试结果 都使用

    1.9K40

    java编程思想第八章多态

    前言:   封装:通过合并特征和行为创建新的数据类型。   实现隐藏:通过将细节“私有化”,把接口和实现分离。   多态:消除类型间的耦合关系。也称作动态绑定,后期绑定或运行时绑定。...注:java中除了static方法和final方法,其他方法都是后期绑定。final关键字可以关闭动态绑定。   final关键字最好根据设计来决定是否使用。...对于复杂的继承体系:     1)调用基类的构造器     2)按声明顺序调用成员变量的初始化方法。     3)调用导出类的构造器本体。   注:继承体系中,为什么这样调用?...3)按照声明的顺序调用成员的初始化方法。     4)调用导出类的构造器主体。

    37530

    `@Async`注解

    调用者将在调用时立即返回,方法的实际执行将提交给Spring TaskExecutor的任务中,由指定的线程池中的线程执行。\ 在项目应用中,@Async调用线程池,推荐使用自定义线程池的模式。...例如, 在某个调用中,需要顺序调用 A, B, C三个过程方法;如他们都是同步调用,则需要将他们都顺序执行完毕之后,方算作过程执行完毕;如B为一个异步的调用方法,则在执行完A之后,调用B,并不等待B完成...在Java中,一般在处理类似的场景之时,都是基于创建独立的线程去完成相应的异步调用逻辑,通过主线程和不同的业务子线程之间的执行流程,从而在启动独立的线程之后,主线程继续执行而不会产生停滞等待的情况。...线程池同时被quartz和非quartz使用,才需要使用此类。 ThreadPoolTaskExecutor :最常使用,推荐。

    39200

    GO语言基础之基本命令

    go fmt运行go fmt进行格式化 go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。...go clean命令会删除掉执行其它命令时产生的一些文件和目录。 go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。...func main(){ //函数体 } 4、init函数和main函数的异同 相同点: 两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。...对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。...对于不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init(),如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用

    82500

    AngularDart 4.0 高级-生命周期钩子 顶

    例如,OnInit接口有一个名为ngOnInit的钩子方法,Angular在创建组件后立即调用: lib/src/peek_a_boo_component.dart (ngOnInit) class PeekABoo...生命周期序列 通过调用其构造函数创建组件/指令后,Angular在特定时刻按以下顺序调用生命周期钩子方法: 钩子 作用和时机 ngOnChanges Angular(重新)设置数据绑定输入属性时响应。...在每次更改检测运行期间,立即在ngOnChanges和ngOnInit之后调用。 ngAfterContentInit 在Angular将外部内容投影到组件的视图之后进行响应。...peek-a-boo存在以显示Angular如何按预期顺序调用钩子。 此快照反映用户单击“创建...”按钮然后单击“销毁...”按钮后日志的状态。 ?...您可以期待Angular在创建组件后立即调用ngOnInit方法。 这就是深度初始化逻辑所属的地方。

    6.2K10

    Java并发面试,幸亏有点道行,不然又被忽悠了

    本文出处:https://www.jianshu.com/p/8cb84ce74548 作者:白头雁 前言 面试Java,必然要被问Java内存模型和Java并发开发。...如果程序顺序调用,count的值应该是5000。 for(int i=0;i<5000;i++){ add(); } 复制代码但是线程池启动多线程,是并发执行的。...启动线程的过程,是一个异步过程,启动线程立即返回,启动下一个进程。 当多个线程对同一个变量add进行操作的时候,就会发生写写冲突。 线程1、线程2 同时对值为0的变量进行操作,结果返回1,而不是2。...和父函数的内部变量和运行指针共享同一块区域。 函数运行时,new的空间,都是放在堆中的。 这个就是C的内存模型,做shellcode的基础知识。

    36240

    Java并发面试,幸亏有点道行,不然又被忽悠了

    面试Java,必然要被问Java内存模型和Java并发开发。我被问到的时候,心里慌得一批,“额,是在《Thinking in Java》里面写的吗?果然每天增删改太low了” 要了解这些图吗? ?...如果程序顺序调用,count的值应该是5000。 for(int i=0;i<5000;i++){ add(); } 但是线程池启动多线程,是并发执行的。...启动线程的过程,是一个异步过程,启动线程立即返回,启动下一个进程。 当多个线程对同一个变量add进行操作的时候,就会发生写写冲突。 线程1、线程2 同时对值为0的变量进行操作,结果返回1,而不是2。...和父函数的内部变量和运行指针共享同一块区域。 函数运行时,new的空间,都是放在堆中的。 这个就是C的内存模型,做shellcode的基础知识。 有面试题可以留言,一起讨论。

    29050
    领券