Debug 下的问题

machinehuman se  2008-04-10 03:00:23
在Debug 下出现标题的对话框
Microsoft Visual C++ Debug Library
对话框的内容
Debug Assertion Failed!
Program:E:\laji.exe
File:winman.cpp
Line:24

For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)
终止 重试 忽略

我重新调试跟进程序,发现程序在
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "stdafx.h"

#ifdef AFX_CORE1_SEG
#pragma code_seg(AFX_CORE1_SEG)
#endif

/////////////////////////////////////////////////////////////////////////////
// Standard WinMain implementation
// Can be replaced as long as 'AfxWinInit' is called first

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);//就是停在这里

int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();

发现hPrevInstance 的值不为NULL,知道的大下告诉声,小地不胜感激.(以前在Debug下是没问题的)
...全文
240 点赞 收藏 31
写回复
31 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
machinehuman 2008-04-21
看样子是没法解决了, 只好重装系统了
揭贴
回复
jameshooo 2008-04-14
确保正在调试的版本是DEBUG版本
回复
machinehuman 2008-04-12
也就是说出错的代码是系统的,不是我的, 我猜测是设置的问题,我的vc已经重装了好几遍了,可能和我以前装过vc4.0有关系,但不知道怎么解决,望大虾门出出注意啊,
回复
machinehuman 2008-04-12
有可能我说的不够清楚,情况是这样的
我任意新建一个工程(如用向导建一个对话框,什么都不加),编译运行都正常,但是如果我设置断点调试就不行, 我跟踪程序就会进入MFC的源码,也就是上面我提到的哪个地方,哪个hPrevInstance不为NULL导致了弹出了哪个Assert failed的对话框.

zzz3265我现在不在公司,调不了,星期一回去调调看看
回复
scq2099yt 2008-04-11
同意22楼
回复
iyranly 2008-04-11
注明:2、前提是,如果断言文件是你自己的,不是在mfc的src文件中。
回复
iyranly 2008-04-11
你弄清楚以下三个问题,你的问题就解决了:

1、ASSERT(hPrevInstance == NULL);
这一句的作用是什么?

2、如果改成ASSERT(hPrevInstance != NULL);或者没有ASSERT,
会有什么效果?

3、什么会改变hPrevInstance 的值?
回复
wflishh 2008-04-11
把你工程下的debug文件夹删除,再把.ncb 和.opt及.clw这三个文件删除。重新编译试试。
回复
iyranly 2008-04-11
////////////////////////////////////////////////////////////////
Assert 断言处理
1、在VC安装目录下搜出错文件(也有可能是在你的工作目录下);
2、找到Assert提示的错误行,看看是在哪一个函数中发生的断言,判断这是由于哪一方面出现的断言(如控件的创建,等等);
3、在你的程序中设置断点,断点跟踪一下你的代码,直到找到和错误最接近的代码口;
4、修改你的代码。
////////////////////////////////////////////////////////////////
回复
吹雪 2008-04-11
代码发过来看看.
mail2xhl@21cn.com
回复
Yofoo 2008-04-11
#ifdef WPRFLAG
mainret = wWinMain(
#else /* WPRFLAG */
mainret = WinMain(
#endif /* WPRFLAG */
GetModuleHandle(NULL),
NULL, //到这里加断点,单步调试 hPrevInstance 就是由此传递进去的, 看这个值在什么地方变了
lpszCommandLine,
StartupInfo.dwFlags & STARTF_USESHOWWINDOW
? StartupInfo.wShowWindow
: SW_SHOWDEFAULT
);
#else /* _WINMAIN_ */
回复
machinehuman 2008-04-11
回上面的几位
1.任务管理器里没有同样的进程
2.调试状态下进入的代码是MFC自己的代码,屏蔽或删除或者增加自己的代码应该不好,不应该更改系统的代码吧
3.Project-->settings-->General下有两个选项Use MFC in a Static Library和Use MFC in a Shared DLL 两个我都试过结果是一样的
回复
xory001 2008-04-11
是不是工程设置出问题了,比如某些地方使用了宏定义,而又没有改,那个参数在Win32下是零的.在16位的Win3.X下是前一个程序的句柄.
回复
jameshooo 2008-04-10
从任务管理器里检查一下,是否有曾经运行过的同一个执行文件,如果有说明以前的进程没有退出,或者发生异常无法退出,Kill掉。
回复
wrhwww 2008-04-10
不要把焦点放在这个地方,屏蔽掉你最大怀疑的地方,试试看
回复
cnzdgs 2008-04-10
ASSERT(hPrevInstance == NULL);//就是停在这里
你把这行删掉不就完了。
回复
flyprogrammer 2008-04-10
你是不是把Project-->settings-->General:下面的Microsoft foundation classes:设置错误了。我同事以前也有过这样问题。你改下。
回复
明湖居士2018 2008-04-10
这样行不行
在AfxWinMain函数的开头加上
HINSTANCE hOldPrevInstance = hPrevInstance;
hPrevInstance = NULL;

然后在AfxWinMain函数结尾的地方再加上
hPrevInstance = hOldPrevInstance;
回复
machinehuman 2008-04-10
来人帮帮忙啊 楼上的两位说的很象啊 但怎么解决呢
回复
machinehuman 2008-04-10

你的程序是window3.x的??? 奇怪

你能看看callstack吗?

crt\src\crtexe.c

mainret = WinMain(
GetModuleHandleA(NULL),
NULL, //就是这个, 怎么...
lpszCommandLine,
StartupInfo.dwFlags & STARTF_USESHOWWINDOW
? StartupInfo.wShowWindow
: SW_SHOWDEFAULT
);
/////////////////////////////////////////////////////////////////////
#ifdef WPRFLAG
mainret = wWinMain(
#else /* WPRFLAG */
mainret = WinMain(
#endif /* WPRFLAG */
GetModuleHandle(NULL),
NULL,
lpszCommandLine,
StartupInfo.dwFlags & STARTF_USESHOWWINDOW
? StartupInfo.wShowWindow
: SW_SHOWDEFAULT
);
#else /* _WINMAIN_ */
回复
加载更多回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-04-10 03:00
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……