【发布时间】:2014-07-16 00:24:12
【问题描述】:
因此,使用 Visual Studio 2008 为 Windows CE 6.0 平台开发本机 C++ 代码。考虑以下多线程应用程序:
#include "stdafx.h"
void IncrementCounter(int& counter)
{
if (++counter >= 1000)
{
counter = 0;
}
}
unsigned long ThreadFunction(void* arguments)
{
int threadCounter = 0;
while (true)
{
Sleep(20);
IncrementCounter(threadCounter);
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
CreateThread(
NULL,
0,
(LPTHREAD_START_ROUTINE)ThreadFunction,
NULL,
0,
NULL
);
int mainCounter = 0;
while (true)
{
Sleep(20);
IncrementCounter(mainCounter);
}
return 0;
}
当我构建它以在我的 Windows 7 开发人员上运行时。机器并在 counter = 0; 语句上使用断点从 Visual Studio 运行调试会话,执行最终将中断,并且两个线程将显示在“线程”调试窗口中。我可以使用双击或右键单击->“切换到线程”在两个线程之间来回切换,然后查看调用堆栈并浏览源代码并检查符号(对于我的应用程序代码中的调用堆栈帧)两个线程。但是,当我在通过 Windows CE 连接时执行相同操作时。 ActiveSync/WMDC(已经在我们的自定义 CE 6.0 硬件和内部操作系统和 SDK 以及旧的 Windows mobile 5.0 PDA 和库存 MS SDK 上进行了尝试)我可以看到调用堆栈并浏览线程的源代码发生了中断(当前执行点在我的应用程序代码中),但是我没有得到任何对其他线程有用的东西,它当前在内核空间中被阻塞,等待它的睡眠超时。
任何人都知道是否有可能在 Windows CE 上让它更好地工作?我猜这可能与调试器不知道在哪里可以找到 WinCE 内核元素的 .pdb 符号文件有关,或者我是否需要运行调试操作系统?
Windows CE 6 remote debugging. No call stack when pause program 描述了同样的问题,但并未真正提供解决方案
谢谢
理查德
【问题讨论】: