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

调用堆栈没有说"你来自哪里",而是"你下一步去哪里"?

这个问题涉及到调试和追踪程序执行的过程。当程序执行出现异常或错误时,通常需要查看调用堆栈来了解程序执行的路径和顺序。调用堆栈可以帮助我们找到问题的根源,从而解决问题。

调用堆栈是一种数据结构,它记录了程序执行的路径和顺序。当程序执行到某个函数时,调用堆栈会记录该函数的信息,包括函数名、参数、返回值等。当该函数执行完毕后,调用堆栈会将该函数的信息弹出。通过查看调用堆栈,我们可以了解程序执行的路径和顺序,从而找到问题的根源。

在程序中,调用堆栈通常是由编译器自动生成的。我们可以通过调试工具来查看调用堆栈的信息。例如,在Visual Studio中,我们可以使用“调用堆栈”窗口来查看调用堆栈信息。

当调用堆栈没有说“你来自哪里”时,它实际上是在告诉我们程序执行的路径和顺序。这有助于我们了解程序是如何执行到当前位置的,从而更好地理解程序的执行过程。而当调用堆栈说“你下一步去哪里”时,它实际上是在告诉我们程序接下来将要执行的路径和顺序。这有助于我们了解程序接下来将要执行的操作,从而更好地理解程序的执行过程。

总之,调用堆栈是一种非常重要的工具,它可以帮助我们了解程序执行的路径和顺序,从而更好地理解程序的执行过程。

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

相关·内容

Python DeBug的7个步骤【Programming】

这一点很重要,因为有时候所做的测试并没有模仿失败的调用; 如果正在使用一个网络或其他框架来模糊测试,这一点尤其重要。...最后我发现到处都是印刷的声明,我不知道它们在哪里,为什么,事情变得复杂起来。但主要使用pdb还有一个更重要的原因。比方放入一个print语句,然后发现有些地方出错了——而且一定是早些时候出错了。...运行该测试,当它到达断点时,按下w并查看堆栈。如果通过查看堆栈,您不知道另一个调用是如何或者在哪里出错的,那么在堆栈中找到属于您的一些代码,并在该文件中放置一个断点,在堆栈跟踪中的断点之上放置一行。...继续前后移动,顺着堆栈向上移动,找出您的调用偏离轨道的地方。如果您一直到达跟踪的顶部而没有遇到断点,那么恭喜您,您已经发现了问题:您的应用程序拼写错误。这里没有经验,没有,一点也没有。 4....休息一下 严肃地,当它不再像一个有趣的挑战或游戏,开始变得真正令人沮丧时,最好的行动就是离开问题。休息一下。我强烈建议散散步,试着想想别的事情。

1.2K00

如何在Linux上获得错误段的核心转储

当我最初试图获得一个核心转储时,我很长一段时间非常沮丧,因为 – Linux 没有生成核心转储!我的核心转储在哪里?...下一步将使用 gdb 打开核心转储文件并获取堆栈调用序列。...从 gdb 中得到堆栈调用序列 可以像这样用 gdb 打开一个核心转储文件: 1. $ gdb -c my_core_file 接下来,我们想知道程序崩溃时的堆栈是什么样的。...在 gdb 提示符下运行 bt 会给你一个调用序列(backtrace)。在我的例子里,gdb 没有为二进制文件加载符号信息,所以这些函数名就像 “??????”。...这个博客听起来很多,当我做这些的时候很困惑,但真的,从一个段错误的程序中获得一个堆栈调用序列不需要那么多步骤: ☉ 试试用 valgrind 如果那没用,或者你想要拿到一个核心转储来调查: ☉ 确保二进制文件编译时带有调试符号信息

4K20
  • 有的线程它死了,于是它变成一道面试题

    但是我现在正在疯狂输出,没有时间,于是我:"不好意思,现在没有时间,可以约在今天晚上8点钟吗?". 晚上如约接到了电话。我们直奔主题,在你来我往中进行了友好的技术交流。...回到开始的阿里巴巴java开发手册不允许使用默认实现,回答可能会引起OOM,那我们聊聊JVM吧 ...... ?...submit方法执行时,返回结果封装在future中,如果调用future.get()方法则必须进行异常捕获,从而可以抛出(打印)堆栈异常。 以为这一部分写到这里就完事了?...那不行啊,心里没有一个疑问吗?为啥execute直接抛出异常,submit没有直接抛出异常呢?...5号线程哪里了? ? new Worker()方法会告诉:5哪里了。 ? 再配上这张由我这个灵魂画师亲自操刀画的图,一起食用,味道更佳: ?

    74070

    内核地址空间大冒险2:中断与异常

    前情回顾: 通过系统调用进入内核空间的这个虫洞我终于弄清楚了,可我的冒险还要继续······ 详情参见:内核地址空间大冒险:系统调用 1 除0错误 我是一个线程,出生在Linux帝国,今天我的任务是执行一段人类用...没有办法,硬着头皮也得上啊,准备开始执行这个除法。 突然!眼前闪过一道白光,然后变得漆黑,这不是执行系统调用的虫洞吗?可是我并没有执行系统调用啊,怎么跑到这里来了。 ?...“敢问老先生,我怎么到这里来了,我并没有执行系统调用啊”,我向老头打听情况。 “这里并不是系统调用的入口,因为执行了除数为0的除法,触发了异常,所以来到了这里”,老头说完喝了一口葫芦里的酒。...“现在看看你的内核堆栈上面存了什么?” 我低头看了一眼我的内核堆栈,发现上面居然保存了除0指令之后那条指令的地址,这正是我要回去的地方。 ?...“这是什么时候存进去的,我不记得我执行过push保存啊” “在你刚来到这里的时候就存进去了,确实不是push进去的,而是当你通过异常这个虫洞进入内核空间时,CPU自动完成的” “原来如此,我知道我要去哪里

    53310

    内核地址空间大冒险2:中断与异常

    前情回顾: 通过系统调用进入内核空间的这个虫洞我终于弄清楚了,可我的冒险还要继续······ 详情参见:内核地址空间大冒险:系统调用 1 除0错误 我是一个线程,出生在Linux帝国,今天我的任务是执行一段人类用...没有办法,硬着头皮也得上啊,准备开始执行这个除法。 突然!眼前闪过一道白光,然后变得漆黑,这不是执行系统调用的虫洞吗?可是我并没有执行系统调用啊,怎么跑到这里来了。 ?...“敢问老先生,我怎么到这里来了,我并没有执行系统调用啊”,我向老头打听情况。 “这里并不是系统调用的入口,因为执行了除数为0的除法,触发了异常,所以来到了这里”,老头说完喝了一口葫芦里的酒。...“现在看看你的内核堆栈上面存了什么?” 我低头看了一眼我的内核堆栈,发现上面居然保存了除0指令之后那条指令的地址,这正是我要回去的地方。 ?...“这是什么时候存进去的,我不记得我执行过push保存啊” “在你刚来到这里的时候就存进去了,确实不是push进去的,而是当你通过异常这个虫洞进入内核空间时,CPU自动完成的” “原来如此,我知道我要去哪里

    45040

    企业大数据如何起步:从小数据到大数据

    我们现在经常发现,有很多企业在竞争的过程中,最终不是被现在的竞争对手打败,而是被很多不是的竞争对手所打败。...很简单的一个例子,大家都认为亚马逊是做电商的,但这是错的,它现在最主要的收入来自于云(云服务)。也就是企业需要找到自己的核心数据(价值),这个是最关键的。...当你的用户在社会化媒体上发言的时候,没有跟他建立联系?这里有个概念叫做DC(digital connection)。所谓的互联网实际就是一种DC,但是通常互联网上的那种DC是在娱乐层面。...有了这个数据库进行数据挖掘,或者在建立数据的过程中,企业需要从什么方向探索,也不是漫无目的的。首先应该跟着的业务,业务现在有哪些问题,或者这个行业里面主要的竞争点在哪里,这是很关键的。...有了这个业务关系以后,再形成假设,也就是未来的竞争点可能在哪里,大到未来的战略竞争,小到哪些方面。然后下一步要怎么做,这些形成一个假设,其次做一些小样本的测试。

    891110

    继续那个死了的线程的事儿

    到这里,结论三的答案已经很明显了,就是线程池会把发生异常的线程移除掉,并且调用addWorker新建一个线程放到线程池。 那么问题来了,刚才执行结果中的线程4哪里了?...诺~get()方法,很简洁,但是可不要小瞧了这几行代码,还是有点东西的,比如:state是哪里冒出来的,是什么意思?...---- 到这里,基本就已经把该说的说完了,但是,以为这就结束了?还没有呢,别走啊!还有更终极的答案呢!...我们代码中没有任何捕获异常并打印日志的代码,这异常日志是哪里来的?而且执行方式是submit,不是没有捕获的异常在调用get()方法的时候才会打印吗?...好家伙,原来是这玩意搞的鬼,所以在没有捕获异常时候,jvm会自动触发一次这个方法,打印一次堆栈,如果我们捕获了异常: ? 那么就会正常打印三条堆栈信息: ?

    73320

    企业大数据应从何做起

    我们现在经常发现,有很多企业在竞争的过程中,最终不是被现在的竞争对手打败,而是被很多不是的竞争对手所打败。...很简单的一个例子,大家都认为亚马逊是做电商的,但这是错的,它现在最主要的收入来自于云(云服务)。也就是企业需要找到自己的核心数据(价值),这个是最关键的。...当你的用户在社会化媒体上发言的时候,没有跟他建立联系?这里有个概念叫做DC(digital connection)。所谓的互联网实际就是一种DC,但是通常互联网上的那种DC是在娱乐层面。...有了这个数据库进行数据挖掘,或者在建立数据的过程中,企业需要从什么方向探索,也不是漫无目的的。首先应该跟着的业务,业务现在有哪些问题,或者这个行业里面主要的竞争点在哪里,这是很关键的。...有了这个业务关系以后,再形成假设,也就是未来的竞争点可能在哪里,大到未来的战略竞争,小到哪些方面。然后下一步要怎么做,这些形成一个假设,其次做一些小样本的测试。

    90650

    关于 JavaScript 错误处理的最完整指南(上半部)

    作者:Valentino Gagliardi 译者:前端小智 来源:valentinog 点赞再看,微信搜索 【大迁世界】 关注这个没有大厂背景,但有着一股向上积极心态人。...例如: 程序试图打开一个不存在的文件、 网络连接断开 用户输入了无效字符 在类似这些情况下,我们可以自己写个自定义的错误来管理,或者直接让引擎为我们定义这些错误。...大多数时候,大多数错误将直接来自JavaScript引擎,例如InternalError或SyntaxError。 如果重新赋值给 const 声明的变量时,就会引发 TypeError 错误。...异常就像一个上升的电梯:一旦抛出一个,它就会在程序堆栈中冒泡,除非它在某个地方被捕获。...如果异常未被捕获,也就是,程序员不采取任何措施来捕获它,程序将崩溃。 何时何地捕获代码中的异常取决于特定的用例。 例如,我们可能想在堆栈中传递一个异常,以使程序完全崩溃。

    1.6K30

    从创建进程到进入main函数,发生了什么?

    而是用任务:task_struct来描述一个程序的执行实例:进程。...不管在Windows还是Linux上,应用线程都会经常在用户空间和内核空间来回穿梭,这可能出现在以下几种情况发生时: 系统调用 中断 异常 从内核返回时,线程是如何知道自己从哪里进来的,该回到应用空间的哪里继续执行呢...答案是,在进入内核空间时,线程将自动保存上下文(其实就是一些寄存器的内容,比如指令寄存器EIP)到线程的堆栈上,记录自己从哪里来的,等到从内核返回时,再从堆栈上加载这些信息,回到原来的地方继续执行。...在_start的结尾,调用了 __libc_start_main 函数,而这个函数,位于libc.so中。 可能疑惑,这个函数是哪里冒出来的,我们的代码中并没有用到它呢?...这后面和Linux上的机制类似,同样没有直接到main函数,而是需要先进行C/C++运行时库的初始化,这之后经过运行时函数的包装,才最终来到我们的main函数。

    1.4K30

    女票竟然问我什么是同步、异步、阻塞、非阻塞?

    “快说说看到什么了,难道我画的图结构这么清晰的嘛?我还以为英文不咋地看不懂呢?”,我一脸期待的等着,脸上洋溢的微笑,我看到来自女票肯定的目光。...一边玩手机一边问安检员解决方案,说白了就是:再等待解决方案的同时也没有闲着,可以在这个间隔时间期间做其他的事情,等到解决方案出来了,就完成了整个流程。...这里最后一步read操作是一个同步的一个过程,是需要线程等待的过程;原因就是内核准备好了数据,要把数据拷贝到用户缓存区。 总结非阻塞是指:在调用结果没有返回之前,该调用不会阻塞住当前线程。...同步 同步是指:用户发起一个请求,知道请求结果返回之后,才会进行下一步的操作逻辑。必须一件事一件事的完成,只有前一个事情做完了,才轮到去做下面的事情。...同步/异步:表示用户请求完成的方式,如果最终是由用户自己完成的,那么表示是同步;如果不是由自己完成而是别人完成之后通知用户接收的就是异步。

    61020

    有效处理Java异常的三个原则,知道吗?

    在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果的异常没有回答以上全部问题,那么可能没有很好地使用它们。...最后,应该注意到JCheckbook并没有在readPreferences()中捕获异常,而是将捕获和处理异常留到用户界面层来做,这样就能用对话框或其他方式来通知用户。...提早抛出 异常堆栈信息提供了导致异常出现的方法调用链的精确顺序,包括每个方法调用的类名,方法名,代码文件名甚至行数,以此来精确定位异常出现的现场。 ?...堆栈信息立即反映出什么出了错(提供了非法参数值),为什么出错(文件名不能为空值),以及哪里出的错(readPreferences()的前部分)。这样我们的堆栈信息就能如实提供: ?...但我们总不能指望用户阅读或者理解日志文件和异常信息。

    1.6K10

    聊一聊最近关于测试方面被咨询的问题

    3、测试开发的出路在哪里? 测试开发的路在哪里?往上可以做技术专家,技术架构师。也可以转行做开发,等等,没有遇到天花板之前,还没有入门就想天花板。测试开发的定语是开发。...这是最近一个开发问我的问题,我问他为啥做测开,他做不好开发,我测开能做好吗?他看着能做好。我问,那开发呢,他也能。我呵呵,看着能做好的事情都做不好。...对这个职业没有清晰认识,对自己没有一个全盘的思考。而是因为开发干不成,干测开,我感觉真正不是转,而是对自己的否定,开发做不好,也不一定做得好测开。一个测开,比开发懂的还要多。...我最后问他,知道什么是测试开发吗,他就是测试。...首先,要确定为什么要参加技术沙龙,其次,选择这次沙龙的议题,哪里是自己关注的,自己想要研究什么方面。技术沙龙前,可以针对这个沙龙,列出来自己的疑惑,或者不明白。

    31510

    断点调试 Windows 源代码

    如果这时在我的设备,可以看到调用堆栈,我双击一下就可以进去代码 ?...虽然 VisualStudio 可以添加人工智能告诉怎么写代码才有坑,但是他也不知道下载的文件会放在哪。 通过右击解决方案,点击属性,可以看到可以设置源代码 ?...,直接看到微软源代码是哪里异常 符号服务器 打开 dotpeek 符号服务器,打开和使用方法请看调试 ms 源代码 加载代码 如果发现 dotpeek 的加载的代码太少了,如没有找到 WindowsBase...PresentationCore PresentationFramework 找到符号 有时候发现虽然已经按照我的做了,还是无法进入堆栈代码,而且弹出了这个选项,让去找文件 ?...虽然我告诉了大家这些方法用来断点调试,但是我无法大家一定可以使用我的方法看到源代码,有一些源代码是无法拿到的,有一些是没有符号。

    1K30

    这个反人类的智障网站,能成功注册算我输!

    比如,可能想不到,卸载一个软件首先要做的一件事,是寻宝,找到 “ 卸载 ”的入口到底在哪里。 毕竟,一般最显眼的按键,并不是你想点的那个。 差点一不小心重新安装了 ?...来自国外的物联网设计团队 Bagaar,把他们对垃圾交互设计吐不完的槽,汇总到了一个网页游戏上。 ? 小辣椒在下午试玩儿了一哈子,气得我差点儿没把公司的键盘给敲崩咯。...当我换了十个密码都选不了 “ 下一步 ”的时候,才看到最下面快要融化在蓝色背景里的绿色密码设置要求。 ?...看到的 “ X ”绝对不是关闭按钮,而是通往广告页的直达车。 终于进入到了上传照片和提交 “ 提交兴趣 ” 的页面了。...所以,如果遇到了一款真正用户至上,交互体验很棒的产品,一定要且用且珍惜啊,这太难得了。 最后,小辣椒把网站放在这儿了 ↓,找虐的差友们可以自己试试,( 我让小发试了,他,疯了。)

    1.5K3129

    有人关心过线程池里死掉的线程吗?

    从执行结果可以看出: 当执行方式是execute时,可以看到堆栈异常的输出。 当执行方式是submit时,堆栈异常没有输出。 这也就是为什么,抛出异常堆栈,不完全对了。 ?...那为什么以submit方式执行的没有打印堆栈呢,或者怎么拿到这个堆栈呢? ?...submit方法执行时,返回结果封装在future中,如果调用future.get()方法则必须进行异常捕获,从而可以抛出(打印)堆栈异常。...其中的call方法就是我们传进来的方法,所以肯定会抛异常,但是这个异常是怎么处理的呢,被catch掉了,并且没有再抛出来,而是被保存了下来,保存到哪里?...当然是FutureTask里,所以调用get()方法时才会抛出异常,而且强制要求调用get()方法时处理异常。 可能还想问,setException()方法到底干了啥?看一下不就知道了嘛: ?

    1.6K30

    并发编程2:认识并发编程的利与弊

    我下去愚公移山的时候,她可以继续 shopping; 窗外有人吼卖樱桃喽,小肉会说:shixin,买一点。我夸父逐日的时候,她可以继续吃吃吃。...Java 中的栈 栈在线程创建时创建,它和 C 语言中的栈相似,在一个方法中,创建的局部变量和部分结果都会保存在栈中,并在方法调用和返回中起作用。 当前栈只对当前线程可见。...栈中保存方法调用栈、基本类型的数据、以及对象的引用。...上面的线程工作内存是 JVM 的一个抽象概念,具体是哪里,JLS 也没有说明,但可以肯定的是,这里关于线程的“working memory”对许多平台来说都是对高速缓存的抽象。...不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。 堆栈(stack) 位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。

    75880

    Go开发中这些头大的坑踩了几个?

    一、我哪里错了?Error信息不全 官方的 error 包,抛出错误后,只有一句错误信息,别的信息都没有。 当你看到一堆的错误日志,一定会问自己,哪里错了。...我想告诉没错,错的是 error 包,把它换了,使用 github.com/pkg/errors 就好了呀。...proc.go:255 runtime.goexit /usr/local/go/src/runtime/asm_amd64.s:1581 是不是挺像 panic 的错误异常哇,没错,没错,堆栈的外衣都出来了...没错 stack 就是错误的堆栈信息。 快去试试吧! 二、一连串的参数,头大 我不知道大家有没有遇到过,在调用某个库的方法时,参数 5 6 个的那种,有些还不是必填那种。...我们使用时就得这样调用: GetUserList(1,10, "","", "") 好了,我已经听到你想骂他的心理活动了。 面对如此情况,我们建议是使用 Option 方法写!

    24830

    【RTOS训练营】队列的读写、休眠和唤醒、常规应用、使用和晚课提问

    假设初始情况和写了一个数据后,分别如下: 图片 1.写到哪里?pcWriteTo 2.写完之后,pcWriteTo指向下一个位置 那怎么读数据?...1.如果这个中断函数里面有两个循环,第1个循环会去切换任务A,第2个循环要去切换任务B 2.应该把它汇聚起来,只执行一次切换:只在最后时刻切换任务B 切换任务A,中断高于任务,没有用,还不如等到中断处理完的时候...在处理数据的过程中,再去点击屏幕也没有任何作用,处理完数据之后,之前点击屏幕那些动作也没有任何作用。 8....但是中断可以被中断打断,是因为中断可以使用主堆栈保存现场和恢复现场(不同中断服务函数之间使用的主堆栈是连续的)?老师可以这样理解吗? 答: 中断可以被打断,中断不可以阻塞。...图片 所以,在中断里调用xQueueSendToBackFromISR时,只会设置一个变量,表示“需要调度” 等中断处理完,再设置pxCurrentTCB等于最高优先级的任务。

    1.1K30
    领券