现象说明:
2011年6月22日,自己编译的exe程序在用户虚拟机上运行起来就出错退出,此现象只在此一台机器上出现,其他机器和开发机器均不出现此问题,此程序代码量很大,此种情况一时无法解决。
最终解决方案:
在同事的帮助下,使用windbg工具,远程调试客户机器,找到原因所在及问题出错位置和函数,出错位置为获取用户硬盘序列号的时候,buf[20]全部为空格,在左右空格并两两颠倒的时候操作内存越界,程序报错退出。
源码如下:
void AdjustString(char* str, int len)
{
char ch;
int i,j;
int len1;
// 若是右对齐的,调整为左对齐 (去掉左边的空格)
i=0;
while(i<len && str[i]==' ') i++;
// 去掉右边的空格
j = len - 1;
while(j>=0 && str[j]==' ')
{
str[j] = '/0';

在一台虚拟机上,编译的exe程序运行时出错退出,仅此一例。通过windbg远程调试,发现错误发生在调整字符串时的内存越界。源码中的AdjustString函数在处理全空格字符串时出错,导致程序崩溃。通过windbg生成dump文件进行分析,找到问题定位和解决方案,强调了windbg调试的重要性。

5697

被折叠的 条评论
为什么被折叠?



