Rez*_*deh 7 python runtime-error pythonw python-2.7
我有一个连续在服务器上运行的python程序,它将一些数据放入MYSQL数据库并加载一些.它还使用TCP/IP连接.问题是大约24小时后它会产生运行时错误:
Microsoft Visual C++ Runtime Library!
Runtime Error!
Program: C:\python27\pythonw.exe
This application has requested the Runtime to terminate it in an unusual way.
Run Code Online (Sandbox Code Playgroud)
然后我打开OK python shell关闭.当我关闭所有python文件并检查Windows任务管理器时,我看到仍然有一个pythonw.exe文件打开!!!
我正在使用IDLE来运行我的应用程序.
问题
此应用程序已请求Runtime以不寻常的方式终止它.
如果您在运行Windows应用程序时遇到此错误,则很可能是因为您的python库中的某个地方,甚至可能来自您的python运行时,abort()例程被调用.有关更多信息和调用行为,abort请参阅有关中止的MSDN文档
演示
你需要
创建一个C DLL,调用abort()然后使用ctypes调用此DLL
头文件 abort_dll.h
#include<cstdlib>
#include <windows.h>
extern "C" __declspec(dllexport) void call_abort(void);
Run Code Online (Sandbox Code Playgroud)
资源 abort_dll.cpp
#include "abort_dll.h"
__declspec(dllexport) void call_abort(void)
{
abort();
}
Run Code Online (Sandbox Code Playgroud)
资源 dllmain.cpp
#include "abort_dll.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
现在编译和构建你的DLL(在Debug和Release Version中).
假设我的DLL存在于以下位置
调试版本:C:\ TEMP\Debug\abort_dll.dll发行版:C:\ TEMP\Release\abort_dll.dll
在IDLE中执行以下代码
from ctypes import *
hDLL = WinDLL(r"C:\TEMP\Debug\abort_dll.dll")
hDLL.call_abort()
Run Code Online (Sandbox Code Playgroud)
您一定会看到以下弹出窗口

与你的情况唯一不同的是,它为你提供了臭名昭着的选项[Abort | Retry\Ignore].这只是因为我使用了我的DLL的Debug版本.相反,如果我使用了发布版本,我通常会看到

解
在Windows中,AFAIK无法SIGABRT使用信号处理程序处理.所以,唯一的赌注是使用JIT,我想你已经安装了.然后你会看到以下弹出窗口.

如果选择Debug,将打开已安装的JIT调试器.之后,您可以转储发生故障的堆栈,并确定发生故障的模块.完成后,您可以关联可能已调用模块的python模块.
| 归档时间: |
|
| 查看次数: |
10001 次 |
| 最近记录: |