gpt4 book ai didi

visual-c++ - Visual C++ 调试器和 BoundsChecker 之谜

转载 作者:行者123 更新时间:2023-12-02 07:24:40 26 4
gpt4 key购买 nike

查看 Visual C++ 调试器 session 的屏幕截图:


(来源:lviv.ua)

执行点现在位于虚拟函数内。 “mDb”是对该类成员对象的引用。 “mDb”的类型为CDbBackend&。只有一个线程。红色矩形中的值应该相等,...但它们不是。这怎么可能?

正在调试的代码已使用 BoundsChecker(内存调试器和分析器)进行检测。这种差异导致了后来的崩溃。非检测代码不会导致任何这些影响。我认为现在指责 BoundsChecker 还为时过早 - 这很可能是 BoundsChecker 揭示的我的程序中的一个隐藏错误,这就是为什么我非常倾向于了解这种情况。

为“b = &mDb”语句生成的程序集如下(如果相关的话)。单步执行此程序集,观察器和寄存器可见,捕获 here(500kb avi 文件)。

007AB7B0  push        4    
007AB7B2 push 80000643h
007AB7B7 push 4
007AB7B9 push 0C0002643h
007AB7BE lea eax,[ebp-10h]
007AB7C1 push eax
007AB7C2 call dword ptr [_numega_finalcheck_C_110456 (8FA8A8h)]
007AB7C8 mov eax,dword ptr [eax]
007AB7CA add eax,1CCh
007AB7CF push eax
007AB7D0 call dword ptr [_numega_finalcheck_C_110456 (8FA8A8h)]
007AB7D6 mov dword ptr [ebp-70h],eax
007AB7D9 push dword ptr [ebp-70h]
007AB7DC push 4
007AB7DE push 50000643h
007AB7E3 lea eax,[ebp-20h]
007AB7E6 push eax
007AB7E7 call dword ptr [_numega_finalcheck_Y_110456 (8FA8ECh)]
007AB7ED mov ecx,dword ptr [ebp-70h]
007AB7F0 mov ecx,dword ptr [ecx]
007AB7F2 mov dword ptr [eax],ecx

最佳答案

  1. 请重建并再次测试。 (我知道这听起来很愚蠢:)

  2. 代码是在 Debug模式下编译的,没有任何优化,对吗?大概吧。但是,在反汇编中,没有呈现任何符号信息。我只能看到[ebp - offset];这应该表示为一些符号名称,例如 b。请务必在反汇编 View 中打开“显示符号名称”。

  3. 我不确定您粘贴的反汇编代码是 b = &mDb 的代码。看起来 [ebp-10h][ebp-70h] 会是 b,但 mDb 不是好像就在这里。这里的所有代码只是调用检测函数。你能提供更多的反汇编和源代码吗?

  4. 我有过调试信息生成不正确的经历,因此符号调试给出了错误的值。我的解决方法是更改​​成员变量布局并在本地堆栈中放置一些填充。但是,我不确定这是否真的是编译器的错误。我正在使用 Intel C/C++ 编译器开发 Visual Studio 2008,该项目非常复杂。

信息不足以解决此问题。如果能多一些反汇编就更好了。

关于visual-c++ - Visual C++ 调试器和 BoundsChecker 之谜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com