请教高手!调试没问题,可执行文件直接运行一会就出错!

时间:2022-10-26 15:35:05
调试运行一个月都没出问题,但是直接把可执行文件弄出来运行,过一段时间就出现提示内存读取错误,不能调试检查,没法锁定问题在哪里,请教高手,给点思路也行!
用运行日志跟踪过,但是出错的地方不是固定的。这里贴几个出错提示框。
该程序有用SQL数据库,还有用到串口通信,用线程处理写文件操作,一般出错的时候都是串口收到数据时。
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!

24 个解决方案

#1


图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

#2


用线程,对文件写操作和串口操作,你确认一下是否对这些资源进行了同步处理或是处理是否合理。

#3


出错的地方不是固定的,有可能是堆或栈被破坏,这种情况下的调用堆栈往往不会直接定位到真正出错的地方,楼主可以尝试用windbg来定位。这个也可以配合dump一起使用

#4


debug跑,不设断点,看最后到哪儿

#5


目标机上安装个VS的远程调试器,远程调试

#6


程序内捕捉异常

#7


引用 4 楼  的回复:
debug跑,不设断点,看最后到哪儿

调试下跑就是不出错啊

#8


出错图上面看不到了,这里我再贴下
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!

#9


把所有的变量都初始化,特别是缓冲区,线程控制那块,同步,加锁.
如果无法判断从哪下手,建议使用排除法,把其他的功能都屏蔽,只留下串口通讯模块,如果再崩溃,集中精力搞

#10


引用 5 楼  的回复:
目标机上安装个VS的远程调试器,远程调试


远程调试?怎么做?
我的程序直接在本机上跑,VS调试运行状态下不出错。直接运行可执行文件过一段时间就出错了

#11


哎,怎么贴图不能显示呢?
我说明下吧,错误提示类似“某某地址”指令引用的“某某地址”内存。该内存不能为“read”。

#12


引用 1 楼  的回复:
图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

我去找找看

#13


打开任务管理器,在进程里面找到你的程序,右击,然后选择调试,这样就可以跟你的代码了,你试一试看看

#14


引用 1 楼  的回复:
图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

 TO dahaiI0:
用户模式的程序排错(上)不能下载,能另外给个链接吗?

#15


Release版本的一样可以调试啊,和Debug版本的差不多,打开所有的异常,F5调试

#16


百度下,应该有能下的,实在没有我记得优酷视频里有这个。

#17


有几种可能:
1.线程同步部分,有没有可能线程间同时对同一资源进行访问。
2.内存泄露,多发生在IO部分。
3.基础数据初始化不完整。
具体调试方法:
vs2005貌似可以附加到进程调试        

#18


该回复于2012-05-16 17:07:42被版主删除

#19


这个问题很容易   如果是多线程   那么就是线程同步问题    调试模式下   内存访问是被保护的  而且代码执行是需要加入调试吗的   而直接编译话    很多情况下  线程是争夺的    也就是说   莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生

#20


内存问题吗,是不是内存泄露,指针数组越界...

#21


引用 19 楼  的回复:
这个问题很容易   如果是多线程   那么就是线程同步问题    调试模式下   内存访问是被保护的  而且代码执行是需要加入调试吗的   而直接编译话    很多情况下  线程是争夺的    也就是说   莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生


如果是这种原因的话,怎么解决呢?还有在调试模式下怎么能找出可能产生该问题的代码呢?

#22


我用WINDBG调试遇到程序调用配置文件不能打开的问题,能帮忙看下能否解决吗?网址如下:
http://topic.csdn.net/u/20120523/17/5515d688-df0b-4d8a-be99-c8375d254afc.html
问题解决了一起给分

#23


引用 19 楼  的回复:
这个问题很容易 如果是多线程 那么就是线程同步问题 调试模式下 内存访问是被保护的 而且代码执行是需要加入调试吗的 而直接编译话 很多情况下 线程是争夺的 也就是说 莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生


用postmessage或者sendmessage这样的消息处理没有类似问题吧?

#24


楼主,这个错误最后是怎么解决的...?

#1


图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

#2


用线程,对文件写操作和串口操作,你确认一下是否对这些资源进行了同步处理或是处理是否合理。

#3


出错的地方不是固定的,有可能是堆或栈被破坏,这种情况下的调用堆栈往往不会直接定位到真正出错的地方,楼主可以尝试用windbg来定位。这个也可以配合dump一起使用

#4


debug跑,不设断点,看最后到哪儿

#5


目标机上安装个VS的远程调试器,远程调试

#6


程序内捕捉异常

#7


引用 4 楼  的回复:
debug跑,不设断点,看最后到哪儿

调试下跑就是不出错啊

#8


出错图上面看不到了,这里我再贴下
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!
请教高手!调试没问题,可执行文件直接运行一会就出错!

#9


把所有的变量都初始化,特别是缓冲区,线程控制那块,同步,加锁.
如果无法判断从哪下手,建议使用排除法,把其他的功能都屏蔽,只留下串口通讯模块,如果再崩溃,集中精力搞

#10


引用 5 楼  的回复:
目标机上安装个VS的远程调试器,远程调试


远程调试?怎么做?
我的程序直接在本机上跑,VS调试运行状态下不出错。直接运行可执行文件过一段时间就出错了

#11


哎,怎么贴图不能显示呢?
我说明下吧,错误提示类似“某某地址”指令引用的“某某地址”内存。该内存不能为“read”。

#12


引用 1 楼  的回复:
图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

我去找找看

#13


打开任务管理器,在进程里面找到你的程序,右击,然后选择调试,这样就可以跟你的代码了,你试一试看看

#14


引用 1 楼  的回复:
图裂了,偶觉得可以尝试下用dump文件。。用法谷歌下就有,另外VC版有高人共享了视频,深入理解计算机系统系列之用户模式的程序排错(上,下),楼主有空可看下
http://topic.csdn.net/u/20100530/21/7a4a0ea3-10dc-4adc-bd9c-775c726a99e0.html?51254

 TO dahaiI0:
用户模式的程序排错(上)不能下载,能另外给个链接吗?

#15


Release版本的一样可以调试啊,和Debug版本的差不多,打开所有的异常,F5调试

#16


百度下,应该有能下的,实在没有我记得优酷视频里有这个。

#17


有几种可能:
1.线程同步部分,有没有可能线程间同时对同一资源进行访问。
2.内存泄露,多发生在IO部分。
3.基础数据初始化不完整。
具体调试方法:
vs2005貌似可以附加到进程调试        

#18


该回复于2012-05-16 17:07:42被版主删除

#19


这个问题很容易   如果是多线程   那么就是线程同步问题    调试模式下   内存访问是被保护的  而且代码执行是需要加入调试吗的   而直接编译话    很多情况下  线程是争夺的    也就是说   莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生

#20


内存问题吗,是不是内存泄露,指针数组越界...

#21


引用 19 楼  的回复:
这个问题很容易   如果是多线程   那么就是线程同步问题    调试模式下   内存访问是被保护的  而且代码执行是需要加入调试吗的   而直接编译话    很多情况下  线程是争夺的    也就是说   莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生


如果是这种原因的话,怎么解决呢?还有在调试模式下怎么能找出可能产生该问题的代码呢?

#22


我用WINDBG调试遇到程序调用配置文件不能打开的问题,能帮忙看下能否解决吗?网址如下:
http://topic.csdn.net/u/20120523/17/5515d688-df0b-4d8a-be99-c8375d254afc.html
问题解决了一起给分

#23


引用 19 楼  的回复:
这个问题很容易 如果是多线程 那么就是线程同步问题 调试模式下 内存访问是被保护的 而且代码执行是需要加入调试吗的 而直接编译话 很多情况下 线程是争夺的 也就是说 莫个数据在前面的线程还没有处理完毕就被后面的线程给修改或者清空删除了, 也就导致了错误的产生


用postmessage或者sendmessage这样的消息处理没有类似问题吧?

#24


楼主,这个错误最后是怎么解决的...?