VS2008 控制台应用程序ASSERT时,如何查看函数调用堆栈

chos2006 2011-09-08 04:32:28
我现在有一个VS2008的控制台应用程序,该程序用到了外部库。

程序运行时在库中引发了一个断言,然后程序就中断了,停留在引发断言的地方。

我能够看到断言是那个文件出来的,但是该文件是封在库中的,我没法知道问题是从哪里引发出来的。

所以我想查看此时程序的调用情况,请问该怎么办?

比如程序在异常的时候会有函数的调用堆栈可以看,有没有什么设置之类的,可以把断言当成异常的。

请教大侠指点,多谢!
...全文
1354 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenwei0304 2012-12-04
  • 打赏
  • 举报
回复
如果是交互线程,且另外一个线程的影响,而产生了这个线程的中断。 1,查看发生交互的变量。 2,查看另一个线程的调用堆栈情况。
mujiok2003 2012-12-04
  • 打赏
  • 举报
回复
从Visual studio开始调试(F5或attach),等触发断言后,分析代码吧。引起异常的代码可能在本帧,有可能在若干帧之前,甚至在另外的栈,另外的进程,慢慢享受整个诊断的过程吧。
chenwei0304 2012-12-04
  • 打赏
  • 举报
回复
是不是标准库的断言,进入之后,偏离自己的程序太远了,所以,在当前的CALL STACK看不到自己的函数。异常的时候会引发一长串的函数调用。因为需要弹出对话框,而这个对话窗口是需要一长串的函数调用。所以,你就看不到自己的函数了。 办法之一:就是在很上层的函数中(不认识也没关系),设置一个端点,然后再次运行,看是否能够看到自己的函数。 如果不行,就继续办法之一,直到看到自己的函数为止。 理论上,不管函数调用多深,都能够得到所有函数调用的轨迹。只是有时候是进入库文件,只能看到汇编代码;有源文件的可以看到源代码。
chos2006 2011-09-15
  • 打赏
  • 举报
回复
没有人知道么?汗
luciferisnotsatan 2011-09-13
  • 打赏
  • 举报
回复
???
vs2005 调试,遇到断言中断后,可以看到call stack。
外部库,如果你没符号文件,没源码,当然没法像自己代码那么调。最多就是看汇编,call stack应该是一层层从某处开始的偏移量。
chos2006 2011-09-13
  • 打赏
  • 举报
回复
事实上,这个程序是MTK提供的,所以郁闷啊。其实我真正想问的问题是,中断后为什么没有call stack可以查看,所以也就不能找出问题究竟是从哪里引发的。正常情况下,只要中断,都会出现call stack的。所以怀疑与工具的设置有关。将别人的设置导入后,出现过call stack,但是后来不知道怎么搞的,又没有了。所以郁闷
chos2006 2011-09-13
  • 打赏
  • 举报
回复
这个窗口是有调出来的,程序发生异常时是能正常看到的,只是ASSERT后,看不到而已
就想叫yoko 2011-09-13
  • 打赏
  • 举报
回复
从楼主5楼的回复来看, 是不是没把call stack窗口调出来
中断后
alt+7
或者
菜单中 debug -> windows -> call stack
masterz 2011-09-09
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
ouyh12345 2011-09-08
  • 打赏
  • 举报
回复
中断后,可以查看调用堆栈啊
jackyjkchen 2011-09-08
  • 打赏
  • 举报
回复
调用堆栈不分exe还是dll吧,直接就能看,如果定位到标准库,别看标准库的,一直回溯到自己的代码
AndyZhang 2011-09-08
  • 打赏
  • 举报
回复
还是先找找自己程序的问题吧

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧