我有以下问题:我有一个用 C++ 编写的应用程序(永不结束的服务器)作为服务运行,在主线程中还包含 3 个线程(主要执行 IO)。
在主循环中,我捕获了所有可能的异常。
进程终止,主循环或线程本身没有打印任何内容。我在事件日志中看到进程以代码 1000 停止。
- Windows 是否像在 unix 中一样创建核心文件?
- 如果我从事件日志中得到一个内存地址,是否有任何方法可以知道它发生在应用程序的哪个部分?
- 也许这是一个线索:在它发生的同时我启动了另一个应用程序(不同类型)。
最佳答案
尝试将 windbg 设置为事后调试器。
- 安装windbg
- 从命令行执行“
windbg -I
” - 启动您的应用程序,然后当您的应用程序收到未处理的异常时, windbg 将被激活。
从 windbg 使用
"kb"或 "!uniqstack"
查看堆栈跟踪。look here for more commands.
看看here如何分析。
并尝试使用 SEH:
#include "windows.h"
#include "stdio.h"
DWORD FilterFunction()
{
printf("you will see this message first.\n");
return EXCEPTION_EXECUTE_HANDLER;
}
int main(char** argv, int c)
{
__try
{
int this_will_be_zero = (c == 9999);
int blowup = 1 / this_will_be_zero;
}
__except ( FilterFunction())
{
printf("you will see this message\n");
}
return 0;
}
关于c++ - 进程终止 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2012552/