- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个使用压控振荡器芯片 (VCO) 来帮助处理信号的系统。芯片制造商 (Analog Devices) 提供了一个将设置文件加载到 VCO 上的程序,但我希望能够从总体信号处理控制系统中设置芯片。幸运的是,Analog Devices 还提供了一个 DLL 来连接他们的芯片并自行加载设置文件。我正在使用 Visual C++ 6.0(我知道的旧版)编程,我的程序是一个对话框应用程序。
我让系统完美地工作,将设置文件写入卡并读取其状态。然后我决定我需要处理附加了多张卡片并且必须选择一张的情况。 DLL 提供返回整数的 GetDeviceCount()。由于某种原因,可执行文件每次运行时都会返回 15663105(我认为是垃圾)。然而,每当我调试我的代码时,该函数都会返回正确数量的卡片。这是我对 GetDeviceCount() 的调用。
typedef int (__stdcall *GetDeviceCount)();
int AD9516_Setup()
{
int NumDevices;
GetDeviceCount _GetDeviceCount;
HINSTANCE hInstLibrary = LoadLibrary("AD9516Interface.dll");
_GetDeviceCount = (GetDeviceCount)GetProcAddress(hInstLibrary,"GetDeviceCount");
NumDevices = _GetDeviceCount();
return NumDevices;
}
需要说明的是:我使用的 DLL 中的所有其他函数都是这样调用的,并且在可执行文件和调试器中完美运行。我做了一些研究,发现 Heisenbugs 的一个常见原因是线程。我知道我正在使用的对话框在幕后有一些线程,所以我删除了对函数的所有调用,除了一个。我还发现调试器代码的执行速度比可执行代码慢,我认为芯片可能没有足够的时间来完成每个命令的处理。首先,我尝试通过插入一个空的 for 循环来占用每个芯片函数调用之间的时间,当这不起作用时,我注释掉了对 DLL 的所有其他调用。
我无法访问用于构建 DLL 的源代码,我不知道为什么它的函数会在可执行文件中返回垃圾而不是调试器。在调试器中运行和执行可能导致错误之间还有哪些其他区别?我还可以执行哪些其他操作来搜索此错误?
最佳答案
某些编译器/IDE 会在调试版本中向变量添加额外的填充或将它们初始化为 0 - 这可能解释了您在调试和“正常”执行之间遇到的差异。
一些可能值得检查的事情:
- 您是否使用了正确的调用约定?
- 如果没有连接任何设备,你会得到相同的返回值吗?
- 您是否使用了正确的返回类型(uint vs int vs long vs ..)?
关于c++ - 使用 dll 的 Heisenbug 问题。接下来我该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781848/
我正在开发一个应用程序,该应用程序从使用 performSelectorInBackground 启动的单独线程中的循环调用 AudioServicesPlayAlertSound(kSystemSo
如果我在循环中添加调试输出,我有一个行为不同的循环。我想知道这是否是一个编译器错误,或者我是否错误地依赖了一些未定义的 C++ 行为。 循环从 uint64_t 数组中读取整数,将它们存储在临时数组中
我在域套接字上调用 async_read,我的问题是有时我会获得数据,有时我没有,即使远程系统总是返回数据。如果我进行逐步调试,我似乎能够从套接字中读取。如果我自动化单元测试,它们似乎运行得太快而无法
经过一些资源修改(图像)后,我的程序随机崩溃 (0xC0000005)。我知道这些来自糟糕的内存管理,但我找不到它的来源,原因有二:首先,我没有使用很多指针或手动动态分配的变量(我的意思是我使用的是标
好的,我有一个非常奇怪的 CSS 问题,我想知道任何人都可以提出解释。 重现步骤: 打开 Chrome 并导航到 http://www.mcwhinneys.com/media照片库应该没有对齐,向右
好的 StackOverflow - 这是一个奇怪的。 问题 所以我有一个“按钮”(实际上只是一个带有 javascript onclick 监听器的 div),它在页面加载时通过 json 从数据库
我最近修复了我们产品中的一个缺陷,其症状是访问悬空指针导致的访问冲突。 为了良好的实践,我添加了一个单元测试以确保错误不会再次出现。在编写单元测试时,我总是会撤消我的缺陷修复并确保单元测试失败,否则我
使用Django 1.4/Python 2.7/reportlab(开源版)生成pdf。 到目前为止,一切都非常顺利。以前的 pdf 生成(如在 http 中请求返回/下载生成的 pdf 文件)在 D
我刚刚花了最后一个小时来解决 C# 中非托管内存的一个奇怪问题。 首先,一些上下文。我有一个 C# DLL,它导出一些 native 方法(通过 this awesome project templa
我想注意的是,我将描述的场景很少发生,并且在大多数情况下,一切都按预期进行。 我在 Pub/Sub 端有 1 个主题和 1 个订阅。 我的 java 应用程序监听订阅,进行一些处理并发送回确认。由于g
我遇到了一个非常令人困惑的崩溃,我目前正在用尽我的智慧...... 首先是崩溃日志: 日期/时间:2012-02-14 10:55:09.771 +0100 操作系统版本:Mac OS X 10.7.
我正在开发基于 WebKit(使用 C++/Qt4)并支持 JavaScript 的 headless 浏览器。这样做的主要目的是能够生成大量基于 JavaScript 的网站的 HTML 快照(请参
我的一个 iOS 应用程序似乎具有典型 Heisenbug 的症状。该应用程序跟踪用户的家庭位置,因此当用户进入和离开他们的家庭位置时会发生某些事件。 在我测试该应用程序时,它运行良好。我在 CLCi
我有一个 Heisenbug 的经典示例,它是由我以前从未见过的条件触发的。我的遗留应用程序(大约 100K sloc 的旧代码)在特定实例中无法正常工作,仅仅启用 JPDA 远程调试足以改变行为,导
我已无路可走:我有一个单线程 C++ 程序。这里有一些经验数据和背景信息,我试图突出最重要的关键词; 我所说的整个部分没有任何系统调用,除了标准 C++ 库 可能执行的内存(取消)分配调用(std::
在开发 Spring boot REST 端点期间,我的应用程序遇到了奇怪的(heisenbug)行为。也可能与我为每个端点项目制作单独的模块有关。具体来说,它可以运行一次但重新运行后会失败,可能运行
我称此为 Heisenbug 错误,因为该错误仅在未观察到时才存在。这是调用: @selected_members = Member.where(id: params[:member_ids]) @
我正在开发一个使用压控振荡器芯片 (VCO) 来帮助处理信号的系统。芯片制造商 (Analog Devices) 提供了一个将设置文件加载到 VCO 上的程序,但我希望能够从总体信号处理控制系统中设置
最近,我遇到了一个经典的 Heisenbug .情况是这样的: 我在一个面板中有一个树列表,即主视图,在右侧的另一个面板中有一个详细 View ,显示有关当前选定树节点的信息。 (与 Windows
我在 Java 6/Websphere 8.5 上遇到套接字绑定(bind)错误(Liberty 配置文件,Websphere 的精简可用版本)。当再次立即杀死并启动应用程序服务器时,我得到: [ER
我是一名优秀的程序员,十分优秀!