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;

诚请高手指明为何开启不了线程???在线等,十分感谢!

CWinThread* thread;//全局变量

创建多线程:

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版本再调试啊。。

参考技术C 把LastError查询出来追问

谢谢!如何查LastError?

追答

在出错的代码之后 调用 GetLastError
看看返回值

追问

返回值为0

追答

没有错误的话 那么你的MyThread函数是否设置了死循环 如果没有 在里面加上试试

while (1)

Sleep(1);

追问

MyThread()函数肯定没有问题,而且目前还没有执行到该函数,是AfxBeginThread()函数中
if(!pThread->CreateThread(...))的问题,但是这个是我调用的,不知道怎么会跳到if中执行pThread->Delete();
我的程序在开启这个线程之前有串口通信,我怀疑跟这个有关,所以将串口关闭,但是还是进不了线程

追答

那就不知道了 贴全一点代码看看?

以上是关于stm32cubeide调试窗口用不了的主要内容,如果未能解决你的问题,请参考以下文章

STM32CubeIDE 上的空目标选择窗口

STM32CubeIDE只能刷一次,没有SWD调试

STM32CubeIDE 在地址“xxx”处中断,没有可用的调试信息,或在程序代码之外

STM32CubeIDE教程:下载安装,配置生成代码,硬件在线调试

HAL库系列2.STM32CubeIDE新建工程

如何在 stm32cubeide 中启动 GDB 服务器?