stm32cubeide调试窗口用不了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stm32cubeide调试窗口用不了相关的知识,希望对你有一定的参考价值。
参考技术A 您可以通过重新安装STM32CubeIDE并重新启动计算机来尝试解决问题。如果问题仍然存在,您还可以使用其他调试工具,例如GDB或者使用J-Link和OpenOCD软件包。 参考技术B stm32cubeide调试窗口用不了,生成了一个STM32的工程开始进行系统开发,一如既往的build,debug,就在开始进行调试的时候,不幸发生了,main()函数很简单vc MFC 用AfxBeginThread()启动不了线程
开启线程中写入:
CWinThread* m_pEventThread;
m_pEventThread = AfxBeginThread(MyThread,this);
程序调试发现进入不了线程,单步调试时发现AfxBeginThread(...)函数中if条件满足,线程指针被删除了,如下:
if(!pThread->CreateThread(...))
pThread->Delete();
return NULL;
诚请高手指明为何开启不了线程???在线等,十分感谢!
创建多线程:
thread=AfxBeginThread(RepThreadProc,this,THREAD_PRIORITY_NORMAL,0,0,NULL);//
RepThreadProc为//多线程函数
多线程函数:
头文件中声明:
static UINT RepThreadProc(LPVOID
pParam);
源文件中定义:
UINT
CRepeat::RepThreadProc(LPVOIDpParam)// CRepeat为使用多线程的类
while(XXX)//条件判断是否退出多线程,XXX自己定义变量来控制
//在这实现多线程代码
return 0;
参考技术A 调试的时候,在Watch(监视)里面添加一个“@err”,然后到你那个如下的地方的时候,光标停在pThread->Delete处,看那个@err是什么数字。然后到msdn上找system error codes,看看数字对应的是什么错误 参考技术B 看看你的MyThread函数,是不是一进线程就退出线程了追问
没有,是AfxBeginThread()函数中
if(!pThread->CreateThread(...))
pThread->Delete();
return NULL;
的问题,但是这个是我调用的,不知道怎么会跳到if中执行pThread->Delete();
不要看AfxBeginThread是怎么执行的。。去看你的MyThread函数,那才是你线程要执行的函数
追问由于pThread->Delete(); 所以程序根本跳不到MyThread()函数
追答线程创建失败了,在AfxBeginThread后面加上一句
DWORD dwErr = GetLastError();
看看错误码是多少?
错误码=0
追答这么奇怪。。我想看看你的MyThread的函数声明可以吗?
线程函数必须是全局函数或者静态成员函数
且必须是__stdcall调用约定
MFC的AfxBeginThread的线程函数可以写为
UINT MyThread(LPVOID pParam);
就是这个
UINT MyThread(LPVOID pParam);
刚刚说错了应该是__cdecl调用约定
你的这个函数是全局函数吗?
如果是类的成员函数要定义为静态函数
另外需要设置运行库为多线程的
不过你这里既然能编译通过,应该不是代码语法问题,不知道你的具体情况
GetLastError返回0说明是执行正常的,你是不是用的Release版本再调试啊。。
谢谢!如何查LastError?
追答在出错的代码之后 调用 GetLastError
看看返回值
返回值为0
追答没有错误的话 那么你的MyThread函数是否设置了死循环 如果没有 在里面加上试试
while (1)
Sleep(1);
MyThread()函数肯定没有问题,而且目前还没有执行到该函数,是AfxBeginThread()函数中
if(!pThread->CreateThread(...))的问题,但是这个是我调用的,不知道怎么会跳到if中执行pThread->Delete();
我的程序在开启这个线程之前有串口通信,我怀疑跟这个有关,所以将串口关闭,但是还是进不了线程
那就不知道了 贴全一点代码看看?
以上是关于stm32cubeide调试窗口用不了的主要内容,如果未能解决你的问题,请参考以下文章
STM32CubeIDE 在地址“xxx”处中断,没有可用的调试信息,或在程序代码之外