标签: corruption

用于处理c ++中的堆栈损坏的工具

编辑:由于评论是关于我的例子我删除它并将其转换为一般问题:

有些时候,在我的项目中,我遇到了堆栈损坏.无论我多么努力编写代码来避免它,有时候这是不可避免的.但是当它发生时,有什么方法可以对抗呢?

我在这个博客中发现了一个好人给出的一个宏:http://rxwen.blogspot.com/2009/04/detect-stack-corruption.html,它读取ebp寄存器值以检测损坏.

但是必然会有更复杂的工具来帮助你不要徒步射击自己.我使用Codeblocks和gcc编译器在Windows中编程.我提出这个问题的原因是找到我可以在我的编程环境下使用的工具来帮助我检测这些错误并纠正它们.有什么建议?

感谢您的任何答案,并花时间阅读我的问题.

c++ stack corruption

8
推荐指数
1
解决办法
1616
查看次数

C++堆腐败

我有一段时间没有做过任何C++,但决定完成一个我正在为某人工作的大项目.我现在收到以下错误消息但...

HEAP CORRUPTION DETECTED:在正常阻止(#1761)之后在0x17DEB940.CRT检测到应用程序在堆缓冲区结束后写入内存.

我一直在踩过我认为可能导致它的所有功能,但我不知所措.有没有办法使用更高级的调试功能来追捕它?

c++ debugging heap-memory corruption visual-c++

8
推荐指数
1
解决办法
9789
查看次数

我应该担心`git fsck`警告:"包含零填充文件模式"

git fsck在我的仓库上运行,我得到这个输出:

$ git fsck
Checking object directories: 100% (256/256), done.
warning in tree bde551ba2d6882ac7614c25305c24ddc1c75b1c4: contains zero-padded file modes
warning in tree 7cac28aefa67ff63e5ca163de382a3e08b8a7ba5: contains zero-padded file modes
warning in tree c24803abe783decd96c1dbf05d3ac45dbf3ff372: contains zero-padded file modes
warning in tree 51393697adb908ddb5fac540a86ea5a331fc1da5: contains zero-padded file modes
Checking objects: 100% (40275/40275), done.
Run Code Online (Sandbox Code Playgroud)

我应该担心这些警告吗?它们会损坏我的回购吗?

git corruption

8
推荐指数
1
解决办法
1070
查看次数

如何修复git missing blob?

因为我一直在各个地方之间使用我的git repo,我现在陷入了一个破碎的git repo.当我这样做时,git log我得到了正确的历史,但是当我这样做时,git status我得到了

fatal: unable to read 563e4c9abcd4114e08255db989f0f53426bdeff7
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我试过git fsck:

Checking object directories: 100% (256/256), done.
missing blob 33244941016301570dccdcdc95e543910109d0a8
dangling blob 59f44441e6437ebc4d40182eb8a10d3e07fe367b
missing blob 5dc8ab1804acb58fc658bcd6152fbb246290c8ae
dangling blob 698c775f2599fad3d09906dead4dc67743a984bd
dangling blob 922003b8433bcad6ce9778a37628d738faa26389
dangling blob c33c0528bfee55b04d99de4580da49de4413329b
dangling blob e5107c118bde0edbe5dfb994cb6a50d235c3f06b
dangling blob 437573e539572454cb868ca5a0f5074b96d777ac
missing blob 468d1856336eaa1ce8006f38ce779c0d997c8d48
dangling blob 6fc9c88708d7d5ca455e68781472bdea119997eb
dangling blob 7225d0147fa566369ba3024324b527a7adeac094
dangling blob bb8125d15579fcf37925f09cd1883b15272f9f0d
missing blob c8095f49253ac3787a6f86943160eda2c78a6a28
dangling blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
dangling blob 0bdaed084e15add987ef86fe84f435d085475995
dangling blob 36ee13c9b334da090ea6b194606df8a2852b3b3a
missing blob 563e4c9abcd4114e08255db989f0f53426bdeff7   <= the one which results …
Run Code Online (Sandbox Code Playgroud)

git blob corrupt corruption git-branch

8
推荐指数
1
解决办法
6083
查看次数

文件内容损坏的原因

我在野外有一个应用程序反复出现问题.

它有一个相当简单的XML文件,它偶尔会丢弃,就像每30分钟一样.

数据文件通常非常小 - 例如<5KB.

它没有锁定文件 - 它只是每次从头开始重新创建它.

我很幸运地看到问题发生在测试机器上,我观察到的是文件已损坏并设置为"nulls"(即十六进制中的00).真正奇怪的是它与它应该具有的正确长度完全相同.

我在保存过程中一直非常小心:

  1. 我将xml写入同一目录中的临时文件,因为我要真正保存它
  2. 我使用MOVEFILE_WRITE_THROUGH设置执行Win32 MoveFile()(因此它应该阻塞直到移动真正完整),移动文件以替换现有数据文件

我甚至锁定Mutex以确保这不是线程问题.

它通常不会发生,例如1000个用户中的1个.

现在我在过去观察到数据文件在写入过程中被电源故障或BSOD损坏,我看到像32kb的文件都是NULL.

但考虑到写入期间出现电源故障的可能性,以及特别是因为我正在使用MOVEFILE_WRITE_THROUGH,它似乎比我预期的要发生得更多.

有任何想法吗?

约翰


一些问题的答案:

  • 问:为什么不直接写入文件A:我避免这种情况使软件不易受到电源故障的影响.例如,你正在编写文件和崩溃/ powerfail/BSOD的一半,那么你肯定有一个损坏的文件.执行临时文件写入然后执行移动是确保尽可能执行原子文件操作的常用且简单的方法(尽管在不使用NTFS特定API的情况下尽可能合理).我应该说该软件是一个归档/备份系统,所以我必须更加注意数据一致性,而不是其他应用程序.

  • 问:这是否在正常操作期间发生?

  • 答:由于这个问题在野外发生,我只是在处理一些线索,所以我不确定.我可以说该软件在99.9%的时间内可靠运行.我猜这是我的问题的核心:这只是由BSOD /电源故障引起的随机不幸还是一个错误?

  • 问:什么环境/操作系统:

  • 答:XP,Vista,7,Server 200X.最有可能是NTFS,但可能是FAT32

  • 问:我在移动之前关闭了文件吗?

  • 答:是的.在使用MoveFile之前,我正在使用C++流并调用close()

  • 问:还有哪些进程正在访问该文件?

  • 答:没有我管理.显然,我无法控制病毒检查程序,文件夹同步器等.该文件位于用户计算机的AppData\Local文件夹中.

c++ windows file-io winapi corruption

7
推荐指数
1
解决办法
2305
查看次数

ASP.NET会话在负载下损坏

我们看到,在负载下,会话数据已损坏或丢失,但会话本身仍然存在.

我们的网站托管在运行ASP.Net 4.0的IIS 7上,并在Web场中使用InProc会话状态,共有4台服务器位于Cisco ACE Appliance负载均衡器后面.

此时问题是随机的,我们无法随意重现问题.此Web应用程序在过去七个月中一直运行正常.

我们意识到,即使正在使用粘性会话,Microsoft也不建议将InProc与Web场一起使用.

我们确实有一个与我们的生产环境完全相同的实验室环境,但是无法在大量负载下重现(我们使用WAPT).

在我们的生产环境中,我们尝试仅在负载均衡器后面隔离一个服务器,以消除由负载均衡器本身引起的"服务器跳跃".但是,即使在一台服务器上运行,问题仍然存在.我们在生产中根本看不到任何AppPool或IIS回收.作为标准做法,我们每天凌晨3点开始回收生产应用程序池,并在操作系统上享受数月的正常运行时间.

会话中存储的是各种各样的对象,从简单类型(整数和字符串)到整个购物车(复杂的对象图),甚至是用户控件(.ascx)实例.由于无法轻松序列化许多这些对象,我们无法在合理的时间段内切换到进程外会话存储.

有人建议尝试使用Fiddler捕获HTTP会话.运行Fiddler的问题是我们不能故意自己重现这个问题.因此,这使得我们无法在发生故障事件时捕获HTTP跟踪.我们实验室中来自WAPT的跟踪日志可能会提供与Fiddler相同的数据,但正如我所说,我们无法在那里重现它.

我非常感谢任何人可能拥有的见解......

asp.net iis session iis-7 corruption

7
推荐指数
1
解决办法
2812
查看次数

你如何确定.sqlite或.sqback在Java中是否已损坏?

我得到了一个目录目录,每个目录都包含我必须解析的.sqlite和.sqback文件的集合.

问题是我相信其中一些文件在收到时会损坏,因为我收到错误:错误:[SQLITE_CORRUPT]当我尝试处理它们时,我的控制台上的数据库磁盘映像格式错误(数据库磁盘映像格式错误) .这只发生在某些文件中.我已经隔离了一些,并尝试单独运行我的程序在这些坏文件的新副本上,它们会导致错误.大多数文件虽然很好:)

我意识到我有可能确实会被给予损坏的文件,所以在尝试解析它们之前,我想要一种方法来确定哪些文件是好的,哪些文件不是.

我是用Java写的.我只对sqlite和sqback验证感兴趣,因为我知道我的解析器工作.我正在重复使用之前的项目.

暗示?建议?答案?

非常感谢知识转移.

java sqlite android corruption

7
推荐指数
1
解决办法
1641
查看次数

是否有用于在Linux中验证SQLite数据库的命令行实用程序?

我正在寻找一个命令行实用程序来验证SQLite数据库.我遇到了一些继承代码的情况,其中一个应用程序无法启动,因为尝试访问数据库会产生以下错误:

database disk image is malformed
Run Code Online (Sandbox Code Playgroud)

所以我需要在应用程序中检测一些验证代码.另外,我需要一个工具,我可以从Linux提示符运行,告诉我数据库是否已损坏.

谢谢

linux sqlite command-line corruption

7
推荐指数
2
解决办法
4804
查看次数

糟糕的sha1文件处理

git fsck --full --no-dangling在远程存储库上做这些错误.(GIT的服务器)

user@server:/var/git/REPOSITORY.git$ git fsck --full --no-dangling
bad sha1 file: ./objects/15/19d8eeacc8d0cd603bd87d2034508b1ffaffa8_28537991145d7e9d87b68335e9b82c2f788cb4fc
bad sha1 file: ./objects/32/4f425bcfe23d9f38b154427eeb9c800d109365_6df2d745fff22839759b25cc83f8d742c2e64086
bad sha1 file: ./objects/42/9225fd8d895084051189dc6478343d54fe41c8_28537991145d7e9d87b68335e9b82c2f788cb4fc
bad sha1 file: ./objects/46/798e4a01a5a7eaf2b203f6d1634d603497041b_6df2d745fff22839759b25cc83f8d742c2e64086
bad sha1 file: ./objects/bc/fb9d62ac05d5203249caa0e7e9cb5d1c32daba_6df2d745fff22839759b25cc83f8d742c2e64086
bad sha1 file: ./objects/cd/477947092b4f20feba8c37df974027b1864215_6df2d745fff22839759b25cc83f8d742c2e64086
Checking object directories: 100% (256/256), done.
Checking objects: 100% (136737/136737), done.
missing commit 590ebc3ac022491d7f11c483480fa9530adc91e8
missing tree bab1d768f0d4f6a02e0a30a6c446afaeabc4aa71
Run Code Online (Sandbox Code Playgroud)

对于每个错误的sha1文件,有另一个文件以相同的名称开头,但没有下划线_,然后是其他文本.文件具有完全相同的文件大小但不同的日期或时间.

两个文件的示例:

./objects/15/19d8eeacc8d0cd603bd87d2034508b1ffaffa8_28537991145d7e9d87b68335e9b82c2f788cb4fc
./objects/15/19d8eeacc8d0cd603bd87d2034508b1ffaffa8
Run Code Online (Sandbox Code Playgroud)

我正在附加6个中的两个案例的屏幕截图,因为它们都是相同的:

截图1: 文件1

截图2: 档案2 我可以删除重复项,会发生什么?

*关于遗失的提交\树的任何想法?

git sha1 corruption

7
推荐指数
1
解决办法
2099
查看次数

Git损坏的repo:如何从干净的存储库中选择一个git对象

这是关于Git仓库被破坏的众多问题之一,正是一个出错的松散对象:

$ git gc
Counting objects: 3299, done.
error: inflate: data stream error (unknown compression method)
error: unable to unpack 831a5d31af4a0af2f5a367689bee27a44efc22c9 header
Delta compression using up to 6 threads.
Compressing objects: 100% (3283/3283), done.
error: inflate: data stream error (unknown compression method)
fatal: loose object 831a5d31af4a0af2f5a367689bee27a44efc22c9 (stored in .git/objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9) is corrupt
error: failed to run repack
Run Code Online (Sandbox Code Playgroud)

关于这个问题的现有答案(如何处理损坏的git对象文件?, 如何修复损坏的git存储库?或者由于缺少对象而导致Git损坏怎么办?)我已经831a5d31从损坏的存储库中删除了对象.

在我的情况下,我有一个存储库的克隆,似乎保存我缺少的对象,但没有文件objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9.如何修复我的存储库?

git repository corruption

7
推荐指数
1
解决办法
2万
查看次数