- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要防止 Visual Studio 调试器的默认消息框在堆损坏期间显示。根据documentation它应该很简单:
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
但是我不能让上面的工作。这是我的小玩具示例:
$ cat hc.cxx
#include <windows.h>
int main()
{
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
char * p = new char[10];
for( int i = 0; i < 500; ++i ) p[i] = i;
delete p;
return 0;
}
如果我在没有标志的情况下编译它,一切都会按预期进行(没有消息框):
$ cl hc.cxx
但是,如果我决定使用/MDd,那么烦人的消息框又回来了:
$ cl /MDd hc.cxx
与/MTd 相同的问题。
我的系统是安装了 SP2 的 Windows Vista Pro/32 位。编译器为 Visual Studio 2010,cl 版本为 16.00.40219.01。 SetThreadErrorMode 在我的系统上不可用。
如果这有助于理解问题:我正在使用 CMake+CTest 进行自动化测试。 CTest 是执行测试的父进程(调用 SetErrorMode )。然后将测试提交给 CDash(相当于 jenkins/hudson)。但是,如果出现堆损坏的消息框,则测试被标记为执行时间过长,而不是很好地报告低级别问题。我无法控制用户编译标志,只需要一种方法来防止消息框出现。
最佳答案
如果您正在研究如何像这样禁用/抑制模态对话框:
那么您需要阻止 C++ 运行时消息传递而不是操作系统崩溃报告。 _CrtSetReportMode
是您所需要的:
#include <crtdbg.h>
int _tmain(int argc, _TCHAR* argv[])
{
//SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_DEBUG);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_DEBUG);
您仍然有报告,但这次是调试输出,非阻塞:
f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c(1322) : Assertion failed: _CrtIsValidHeapPointer(pUserData)
HEAP CORRUPTION DETECTED: after Normal block (#161) at 0x002D2448.
CRT detected that the application wrote to memory after end of heap buffer.
HEAP[ConsoleApplication11.exe]: Heap block at 002D2420 modified at 002D2456 past requested size of 2e
ConsoleApplication11.exe has triggered a breakpoint.
HEAP[ConsoleApplication11.exe]: Invalid address specified to RtlFreeHeap( 002D0000, 002D2428 )
ConsoleApplication11.exe has triggered a breakpoint.
关于c++ - SetErrorMode 和/MDd (/MTd) 编译标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306820/
您可以在内核命令行 root=mtd:name 上按名称指定 MTD 设备,并且可以使用名称 mount mtd:name 进行挂载。我希望我的应用程序能够做同样的事情。它必须调用 open,但是 o
我需要创建一个与回调函数一起工作的 dll。当我在项目属性中设置 Runtime Libary = Multi-threaded Debug (/MTd) 时,它生成此错误消息: 但是当我设置 Run
获得了一个嵌入式系统,我可以使用 root shell 访问它。我无法进入U-boot启动菜单。 (开机延迟=0) 设备从 nor flash 启动并加载 emmc 上的文件系统。它不设置/dev/m
我的表(市场)中有三列:销售员、销售额和周数。我希望能够计算 MTD(本月至今)的总数。就我而言,我希望能够提供表中从 11-18-2016 到 12-18-2016 的数据。我不知道如何在我的表中制
我正在使用 phram 和 ramoops 将最新的系统日志存储在保留内存中,这样一旦我的机器崩溃,我就可以在重启后转储紧急日志。 MTD驱动phram和模块ramoops用于自动记录系统日志到内存:
我有一个小程序,用于尝试在我的嵌入式 Linux 平台上读取 MTD 的详细信息。我遇到了大多数 block 无法读取的问题,而且我不是 100% 确定为什么会这样。 检查 /dev 目录显示 8 个
我有一个非常具体的需求:部分替换闪存的内容和移动 MTD 分区边界。 当前 map 是: u-boot 0x000000 0x040000 u-boot-env 0x040000 0x010000 内
我正在使用嵌入式设备,并希望它们能够通过 Linux 调整其 MTD 分区的大小而无需重新启动。 问题是我的 Linux 镜像大小增加了,并且它所在的当前 MTD 分区 (mtd0) 现在太小了。但是
我才刚刚开始研究 SQL。 我有一个 SQL Server 2008 r2 数据库,它将返回两个字段 DocDate 和 InvValue。我需要将 InvValues 求和为截至今天日期的 MTD
我的立方体中有以下情况: 商店 A 使用日历 Cal1。他们的销售月从 1 月 5 日开始。B 店使用日历 Cal2。他们的销售月从 1 月 10 日开始。铺C...等 商店日历不能简单地表示为主日历
我有一个关于多线程调试 DLL (/MDd) 和多线程调试 (/MTd) 设置的问题。它们之间的区别很明显:一个是使用动态库,一个是使用静态库。当我使用/MDd 编译我的程序时,一切都进行得很好。但是
jffs2(mtd-utils 版本 1.5.0、mkfs.jffs2 修订版 1.60)的最小删除 block 大小似乎为 8KiB: Erase size 0x1000 too small. In
在构建动态库(C++)时,我们可以为Windows选择多线程调试(/MTd)或多线程调试DLL(/MDd)运行时库。如果我们选择Multi-threaded Debug,那么创建的动态库将负责为库中使
我正在为纸牌游戏编写 AI,经过一些测试我发现在我的 alpha beta 算法上使用 MTD(f) - 一系列零窗口搜索 - 比仅使用 alpha-beta 更快本身。 此处对 MTD(f) 算法进
我有两个带有 MSVC2013 32 位编译器的 QT 5.5 项目。第一个是 Qt 控制台应用程序,在 pro 文件中使用 crypto++ 和这两个: QMAKE_CXXFLAGS_RELEASE
我指的是这个 answer 中的代码.不过我添加了错误处理。open() 删除和 read() 都执行无误,我读取的 20 个字节都是 0xff。但是,当尝试从 data[] 数组写入 20 个字节时
在我的 linux/dev/文件夹中,我有 mtd0 - mtd7 和 mtdblock0 - mtdblock7。我想在这里有更多的 mtd 设备。构建内核时应该更改什么? 谢谢 最佳答案 您需要更
我在嵌入式设备上工作,内核镜像存储在闪存的/dev/mtd4 部分。我想在没有 Uboot 的情况下更新这个内核。 这怎么可能?我想调用: echo ./kernel.bin > /dev/mtdbl
我正在尝试使用 MTD block 设备在 NAND 闪存上写入,但我并不理解所有内容。 当我读到here mtdblockN为只读 block 设备N mtdN为读写字符设备N mtdNro为只读字
12 mtd、12 mtd 滚动和 ytd 计算有什么区别 最佳答案 12 mtd 可以追溯到 12 个月,而 ytd 是从当年(日历、财政年度等)的第一天到今天。 关于sas - ytd 报告和 1
我是一名优秀的程序员,十分优秀!