【问题标题】:Locate a stack overflow定位堆栈溢出
【发布时间】:2013-09-25 15:54:40
【问题描述】:

我正在尝试调试其他人的代码,在调试模式下运行应用程序大约 12 小时后,我在0x400795f4 in XXXX Cx00000FD Stack Overflow 获得了第一次机会异常。我在这个异常处打开了中断,但它并没有在那里中断,当它发生时,应用程序已经停止在文件 atlosapice.h line 906 处运行,这是 wvsprinfw 函数。

我想知道是否还有其他方法可以尝试找到这个?我正在尝试调试的应用程序在 WinCE 6.0 上运行并使用 Visual Studio 2008。

【问题讨论】:

  • 应用程序是多线程的还是单线程的?

标签: visual-c++ visual-studio-2008 windows-ce


【解决方案1】:

通过应用程序查看类似 printf() 的功能。请务必包含 NKDbgPrintfW()、RETAILMSG、DEBUGMSG 和其他调试宏。在每个调用之前和之后都写下这样的内容:

printf( "++%s(%d)\n", __FILE__, __LINE__ );
printf( "some printf\n" ); // the printf already in the code
printf( "--%s(%d)\n", __FILE__, __LINE__ );

然后,观察输出窗口,看看异常之前打印的最后一件事是什么。

可能发生的情况是 printf 为某些项目指定了错误的格式说明符、格式说明符过多或格式说明符不足。

对于example

long z = 'A';
printf("%c\n", z);  // undefined behavior

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2012-04-15
    • 2012-12-20
    • 2011-03-02
    • 2011-08-22
    • 2023-03-04
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多