为什么64位Windows在异常期间不能展开堆栈,如果堆栈跨越内核边界 - 当32位Windows可以?
整个问题的背景来自:
消失的OnLoad异常 - x64中的用户模式回调异常的情况
在32位Windows中,如果我在我的用户模式代码中抛出异常,那是从内核模式代码调用的,这是从我的用户模式代码调用的,例如:
User mode Kernel Mode
------------------ -------------------
CreateWindow(...); ------> NtCreateWindow(...)
|
WindowProc <---------------------+
Run Code Online (Sandbox Code Playgroud)
Windows中的结构化异常处理(SEH)可以展开堆栈,通过内核模式展开回到我的用户代码,在那里我可以处理异常,并且我看到有效的堆栈跟踪.
64位版本的Windows无法执行此操作:
由于复杂的原因,我们无法在64位操作系统(amd64和IA64)上传播异常.自从Server 2003的第一个64位版本发布以来,情况一直如此.在x86上,情况并非如此 - 异常通过内核边界传播,并最终将帧移回
由于在这种情况下无法回溯可靠的堆栈跟踪,因此必须做出决定:让您看到非荒谬的异常,或者完全隐藏它:
当时的内核架构师决定采用保守的AppCompat友好方法 - 隐藏异常,并希望最好.
本文接着讨论了所有64位Windows操作系统的表现如何:
但是从Windows 7(和Windows Server 2008)开始,架构师改变了主意 - 有点像.对于仅 64位应用程序(不是32位应用程序),它们(默认情况下)会停止抑制这些用户内核用户异常.所以,默认情况下,在:
所有64位应用程序都会看到这些异常,他们从来没有看到它们.
在Windows 7中,当本机x64应用程序以这种方式崩溃时,将通知 …
windows 64-bit structured-exception windows64 windows-appcompat-platform
我最近尝试在我的系统上安装Python 3.4作为替代安装,试图在迁移代码之前熟悉自己.我的主要Python安装是2.7.6.
我尝试了Windows的64位安装程序,但它出现了一条错误消息
此Windows Installer程序包存在问题.作为设置的一部分运行的程序没有按预期完成.请联系您的支持人员或包装供应商.
在此之后安装回滚(从下面显示的点):

我最终找到了下面发布的解决方案,并决定分享以防其他人遇到同样的问题.
我发现在Windows 64位上通过安装程序安装NumPy/SciPy是不可能的,只能在32位上安装.因为我需要比32位安装更多的内存,所以我需要所有内容的64位版本.
我尝试安装所有东西Pip,大部分工作都有效.但是当我来到SciPy时,它抱怨错过了一个Fortran编译器.所以我通过MinGW/MSYS安装了Fortran.但是在此之后你无法立即安装SciPy,你需要重新安装NumPy.所以我尝试了,但现在它不再通过Pip或通过easy_install.两者都有这些错误:
LNK2019和LNK1120,有很多错误.C:C2065,C2054 ,C2085 ,C2143`等等.我相信它们属于一起.致命错误是LNK1120:
build\lib.win-amd64-2.7 \numpy\linalg\lapack_lite.pyd:致命错误LNK1120:7未解析的外部错误:安装脚本退出并显示错误:命令"C:\ Users\me\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe/DLL/nologo/INCREMENTAL:NO/LIBPATH:C:\ BLAS/LIBPATH:C:\ Python27\libs/LIBPATH:C:\ Python27\PCbuild\amd64 /LIBPATH:build\temp.win-amd64-2.7 lapack.lib blas.lib/EXPORT:initlapack_lite build\temp.win-amd64-2.7\Release \numpy\linalg\lapack_litemodule.obj/OUT:build\lib .win-amd64-2.7 \numpy\linalg\lapack_lite.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\numpy\linalg\lapack_lite.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release \numpy\linalg\lapack_lite.pyd.manifest"以退出状态1120失败
在64位Windows机器上安装64位版本NumPy和SciPy的正确方法是什么?我错过了什么吗?我需要在某处指定某些内容吗?Windows上没有关于这些问题的信息,仅适用于Linux或Mac OS X,但它们对我没有帮助,因为我无法使用它们的命令.
需要直接在最新的操作系统中支持一些旧项目,而不是在虚拟机中.
我已成功从VS6磁盘#1安装了VB6,但我无法为此开发环境安装SP6.当我启动它,会出现一些毫秒,通知我关于安装进度的信息窗口,但所需的文件(ADVPACK.DLL,MSVBVM60.DLL,...)没有在系统文件夹更新.VB6 IDE中的About对话框也证明了 - 我在其中的任何地方都看不到"SP6".
如何在此操作系统中安装SERVICE PACK 6(不是VB IDE本身)?
我正在尝试为Python 3.2,Windows 64位安装Feedparser 5.1.
我曾尝试FOREVER(也就是过去2周)为Python安装Feedparser,并且一直在失败.我读过自述文件,尝试搜索互联网,没有任何对我有用.不用说,我觉得完全愚蠢.
有人请给我一步一步的说明来安装Feedparser 5.1 for Python 3.2 Windows 64位.我很绝望,拜托.
我是Python的新手.根据互联网,我在收到此错误后正在寻找模块pyserial:
ImportError: No module named serial
Run Code Online (Sandbox Code Playgroud)
我第一次尝试安装pywin32,它进展顺利.但它似乎不包含pyserial.:-(
然后我找到了pyserial的单个模块安装程序,我无法安装它,它说它没有在注册表中找到python的路径.:-(
之后我在python.org上找到了这个模块,但我不知道该怎么做,它没有安装程序.:-(
如何在Windows 7 64上将pyserial添加到Python(64)2.7 ?
在Windows 7(64位机器)中安装了11g.由于SQL开发人员不会使用64位jdk.
安装了32位jdk1.7.0并将ORACLE_HOME\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf文件SetJavaHome点更改为32位jdk1.7.0.
再次启动SQL开发人员,但它msvcr100.dll丢失了.在max jdk1.6.X中找到SQL Developer3.x支持的内容.
我有一个看起来像这样的联盟
union bareVec8f {
__m256 m256; //avx 8x float vector
float floats[8];
int ints[8];
inline bareVec8f(){
}
inline bareVec8f(__m256 vec){
this->m256 = vec;
}
inline bareVec8f &operator=(__m256 m256) {
this->m256 = m256;
return *this;
}
inline operator __m256 &() {
return m256;
}
}
Run Code Online (Sandbox Code Playgroud)
__m256需要在32字节边界上对齐以与SSE函数一起使用,并且应该是自动的,即使在联合内也是如此.
而当我这样做
bareVec8f test = _mm256_set1_ps(1.0f);
Run Code Online (Sandbox Code Playgroud)
我遇到了分段错误.由于我制作的构造函数,此代码应该可以工作.但是,当我这样做
bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
Run Code Online (Sandbox Code Playgroud)
我没有得到分段错误.
因此,因为工作正常,所以联合可能正确对齐,但是看起来构造函数只会导致一些分段错误
我正在使用gcc 64bit windows编译器
---------------------------------编辑Matt设法生成了这里似乎发生的最简单的错误示例.
#include <immintrin.h>
void foo(__m256 x) {}
int main()
{
__m256 r = _mm256_set1_ps(0.0f);
foo(r);
}
Run Code Online (Sandbox Code Playgroud)
我正在编译 -std=c++11 -mavx
最近将 CMake 从 2.8.1 更新到 3.7.1 版,运行良好。
更新需要CMAKE_FORCE_C_COMPILER从工具链文件中删除已弃用的命令,该文件用于跳过对工作编译器的自动检查。
我试图设置变量,SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)跳过测试,但行为没有变化。
现在似乎需要检查,CMake 无法识别我的编译器 (TriCore_v6.0r1)。
错误信息:
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.elf”中找不到 C 编译器标识
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.map”中找不到 C 编译器标识
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.mdf”中找不到 C 编译器标识
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.o”中找不到 C 编译器标识
编译 C 编译器标识源文件“CMakeCCompilerId.c”失败。编译器:C:/TASKING/TriCore_v6.0r1/ctc/bin/cctc.exe 构建标志:Id 标志:-Aa
注意:根据用法,编译器不接受这个标志(-Aa)
输出是:
1
ctc E200:命令行:选项“-A”:子选项“a”无效
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.elf”中找不到 C 编译器标识
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.map”中找不到 C 编译器标识
在“C:/Build/CMakeFiles/3.7.1/CompilerIdC/CMakeCCompilerId.mdf”中找不到 C 编译器标识
使用“”检查 C 编译器是否为 IAR 与“IAR .+ Compiler”不匹配:
理想情况下,我希望编译器能够被识别,但由于 Altium 不支持 CMake 工具,如果它解决了我的问题并允许我再次成功构建,我将决定跳过这些检查。
工具链文件:
#################################
# CMake Tool Chain File
# for TASKING Build Environment
#################################
# Deprecated!
# INCLUDE(CMakeForceCompiler)
# Skip …Run Code Online (Sandbox Code Playgroud) 有谁知道如何为x64 Windows构建Octave?x32的2GB数据限制对于需要对大型数据集进行分析的许多问题来说过于局限.