WinDbg是否能够检测由于无效的下转换而导致的内存堆损坏
Is WinDbg able to detect memory heap corruption due to invalid downcasting?
这是我刚刚发现的一个bug!好极了这个错误是由于不正确的下转换造成的,事实上我使用的是static_cast而不是dynamic_cast。
我的应用程序很大,是多线程的,可以与其他应用程序交互。所以调试非常困难。我尝试过使用WinDbg、GFlags和应用程序验证程序,但没有结果。当然,因为我不知道如何使用这些工具。
使用像WinDbg这样的工具,有可能发现由于无效的下转换而导致的内存堆损坏吗?如果是,如何?
Windbg!heap–s–v命令可以揭示损坏的堆
0:008> !heap -s -v
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-----------------------------------------------------------------------------
.ERROR: Block 001842e8 previous size 0 does not match previous block size 4
HEAP 00140000 (Seg 00140640) At 001842e8 Error: invalid block Previous
EDIT:注释清楚地表明非Windows选项是不可行的。在这种情况下,我以前在Purify上运气不错,但不幸的是它是$$$。不过,我不熟悉其他Windows内存检查工具。
对于这种特定的情况,无论何时你发现自己情绪低落,都要花至少一分钟的时间思考一个可以消除这种需求的替代界面或设计。编译器错误和警告,以及一个可靠的设计可以发现很多错误,否则需要数小时才能找到。
相关文章:
- 防止主数据类型C++的隐式转换
- 为什么会发生堆损坏
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 与强制转换相关的堆损坏错误
- 将大双精度转换为无符号 int 期间堆栈损坏
- 如何在不损坏数据的情况下将缓冲区强制转换为结构
- WinDbg是否能够检测由于无效的下转换而导致的内存堆损坏
- DirectX 11-使用AVX的AoS到SoA转换导致重映射时顶点缓冲区损坏
- Qt Creator错误:LNK1123:转换到COFF时失败:文件无效或损坏
- utf 8 - 将 UTF16(Windows wchar_t) 转换为 UTF8 C++ 非英语字母损坏(韩语)
- 无效强制转换导致的堆损坏