在QT的学习过程中,调试是非常重要的,单步调试慢慢的让你更容易理解
学习qt调试
1. 使用警告和调试信息
qDubug():输出调试信息
Example:
qDebug( "my window handle = %x", myWidget->id() );
qWarning():输出警告信息
Example:
void f( int c )
{
if ( c > 200 )
qWarning( "f: bad argument, c == %d", c );
}
qFatal():输出致命错误信息 ,程序自动被迫中止
Example:
int divide( int a, int b )
{
if ( b == 0 ) // program error
qFatal( "divide: cannot divide by zero" );
return a/b;
}
使用例子:
#include <qapplication.h>
#include <iostream.h>
void myMessageOutput( int input );
int main( int argc, char **argv )
{
QApplication a( argc, argv );
int temp;
while(1)
{
cout << "Please input 1 2 or 3 here and else for quit:";
cin>>temp;
myMessageOutput( temp ) ;
}
return a.exec();
}
void myMessageOutput( int input )
{
switch ( input ) {
case 1:
qDebug("The number you input is : %d ",input);
break;
case 2:
qWarning("The number you input is : %d ",input);
break;
case 3:
qWarning("The number you input is : %d ",input);
break;
default :
//qWarning("The number you input is : %d ,which is invalid here.",input);
qFatal( "It will be quit." );
//cout<<"It will be quit."<<endl ;
//abort();
}
}
2. 使用调试宏
头文件qglobal.h 中定义了一些用于调试的宏:
Q_ASSERT(BOOL b) :b为假时程序将输出警告信息并指出代码所在的文件和行数
Q_CHECK_PTR(point):point为一个指针变量,如果point为空时,将输出警告信息并指出代码所在的文件和行数
ASSERT(BOOL b)和CHECK_PTR(point)是标准C++中的语法。
#include <qapplication.h>
#include <iostream.h>
//#include <qglobal.h>
void check_assert(int size);
int main( int argc, char **argv )
{
QApplication a( argc, argv );
int temp;
while(1)
{
cout << "Please input a number here which should be more than 5 ,or less 0 quit:";
cin>>temp;
check_assert(temp);
}
return a.exec();
}
void check_assert(int size)
{
ASSERT( ( size > 0) );
char* p= NULL;
if ( size > 5 )
p = new char(size);
if ( size < 0 )
{
cout<<"It will be quit."<<endl ;
abort();
}
else
CHECK_PTR(p);
}