Commit dc432b83 by 李定达

1.修复支付成功取消交易按钮亦然显示bug;2.数据库操作分离;3.冲正功能测试完成

parent 7a65671d
...@@ -18,20 +18,18 @@ FMNetWork::FMNetWork(QObject *parent) : QObject(parent) ...@@ -18,20 +18,18 @@ FMNetWork::FMNetWork(QObject *parent) : QObject(parent)
} }
bool FMNetWork::HttpPost(QString url, QByteArray outdata, const QByteArray &indata, QString content, QString accept, QString &error, int timeout) bool FMNetWork::HttpPost(QString url, QByteArray &outdata, const QByteArray &indata, QString content, QString accept, QString &error, int timeout)
{ {
QString path; QString path;
ToolS::GetPath(path); ToolS::GetPath(path);
//QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString();
QString host = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_HOST).toString(); QString host = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_HOST).toString();
QEventLoop loop; QEventLoop loop;
QTimer timer; QTimer timer;
QSslConfiguration config; QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone); config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::SslV3);
QNetworkAccessManager manger; QNetworkAccessManager manger;
QNetworkRequest request(url); QNetworkRequest request(url);
...@@ -40,7 +38,7 @@ bool FMNetWork::HttpPost(QString url, QByteArray outdata, const QByteArray &inda ...@@ -40,7 +38,7 @@ bool FMNetWork::HttpPost(QString url, QByteArray outdata, const QByteArray &inda
request.setRawHeader("Content-Type", content.toUtf8()); request.setRawHeader("Content-Type", content.toUtf8());
request.setRawHeader("Accept", accept.toUtf8()); request.setRawHeader("Accept", accept.toUtf8());
request.setRawHeader("host", host.toUtf8()); request.setRawHeader("Host", host.toUtf8());
request.setRawHeader("Authorization", "Basic dXBzLWNsaWVudDo2VGk4TjBXNzRyb1A="); request.setRawHeader("Authorization", "Basic dXBzLWNsaWVudDo2VGk4TjBXNzRyb1A=");
...@@ -57,6 +55,7 @@ bool FMNetWork::HttpPost(QString url, QByteArray outdata, const QByteArray &inda ...@@ -57,6 +55,7 @@ bool FMNetWork::HttpPost(QString url, QByteArray outdata, const QByteArray &inda
if(reply->error() != QNetworkReply::NoError) if(reply->error() != QNetworkReply::NoError)
{ {
QLOG_ERROR() << reply->errorString();
error = QString::fromLocal8Bit("网络异常"); error = QString::fromLocal8Bit("网络异常");
return false; return false;
} }
......
...@@ -10,7 +10,7 @@ class FMNetWork : public QObject ...@@ -10,7 +10,7 @@ class FMNetWork : public QObject
public: public:
explicit FMNetWork(QObject *parent = 0); explicit FMNetWork(QObject *parent = 0);
static bool HttpPost(QString url, QByteArray outdata, const QByteArray &indata, QString content, QString accept, QString &error = QString(), int timeout = 60); static bool HttpPost(QString url, QByteArray &outdata, const QByteArray &indata, QString content, QString accept, QString &error = QString(), int timeout = 60);
}; };
......
...@@ -7,23 +7,32 @@ ...@@ -7,23 +7,32 @@
#include <QSqlQueryModel> #include <QSqlQueryModel>
#include "QsLog.h" #include "QsLog.h"
FMPDataBase::FMPDataBase(QString dbname, QString connectname, QObject *parent) : QObject(parent) FMPDataBase::FMPDataBase(QString dbname, QString connectname, QObject *parent) : QObject(parent)
{ {
_db = QSqlDatabase::addDatabase("QSQLITE", connectname); _dbname = dbname;
_db.setDatabaseName(dbname); _connectname = connectname;
_isopen = _db.open(); }
void FMPDataBase::Init()
{
_db = QSqlDatabase::addDatabase("QSQLITE", _connectname);
_db.setDatabaseName(_dbname);
} }
FMPDataBase::~FMPDataBase() FMPDataBase::~FMPDataBase()
{ {
if(_isopen) if(_db.isOpen())
_db.close(); _db.close();
} }
bool FMPDataBase::creat(QString sql) bool FMPDataBase::creat(QString sql)
{ {
if(!_isopen)
return false; if(!_db.isOpen())
qDebug()<< "----" <<_db.open();
qDebug() << _db.lastError().type() << _db.lastError().text();
QSqlQuery query(_db); QSqlQuery query(_db);
...@@ -32,17 +41,23 @@ bool FMPDataBase::creat(QString sql) ...@@ -32,17 +41,23 @@ bool FMPDataBase::creat(QString sql)
if(!flag) if(!flag)
QLOG_WARN() << query.lastError(); QLOG_WARN() << query.lastError();
_db.close();
return flag; return flag;
} }
bool FMPDataBase::dlt(QString table, QString condition) bool FMPDataBase::dlt(QString table, QString condition)
{ {
if(!_isopen)
return false; if(!_db.isOpen())
qDebug()<< "----" <<_db.open();
qDebug() << _db.lastError().type() << _db.lastError().text();
QString sql = QString("delete from %1 where %2").arg(table, condition); QString sql = QString("delete from %1 where %2").arg(table, condition);
qDebug() << "55555555555555555555555555555" <<sql; QLOG_INFO() << "delete sql " << sql;
QSqlQuery query(_db); QSqlQuery query(_db);
...@@ -51,13 +66,15 @@ bool FMPDataBase::dlt(QString table, QString condition) ...@@ -51,13 +66,15 @@ bool FMPDataBase::dlt(QString table, QString condition)
if(!flag) if(!flag)
QLOG_WARN() << query.lastError(); QLOG_WARN() << query.lastError();
_db.close();
return flag; return flag;
} }
bool FMPDataBase::insert(QString table, QVariantHash data) bool FMPDataBase::insert(QString table, QVariantHash data)
{ {
if(!_isopen) if(!_db.isOpen())
return false; qDebug()<< "----" <<_db.open();
QString sql; QString sql;
QStringList columnnamelist; QStringList columnnamelist;
...@@ -75,19 +92,21 @@ bool FMPDataBase::insert(QString table, QVariantHash data) ...@@ -75,19 +92,21 @@ bool FMPDataBase::insert(QString table, QVariantHash data)
QLOG_WARN() << "inset sql : " << sql; QLOG_WARN() << "inset sql : " << sql;
qDebug() << "inset sql : " << sql; qDebug() << "inset sql : " << sql;
bool flag = query.exec(sql); bool flag = query.exec(sql);
if(!flag) if(!flag)
QLOG_WARN() << query.lastError(); QLOG_WARN() << query.lastError();
_db.close();
return flag; return flag;
} }
bool FMPDataBase::update(QString table, QVariantHash data, QString condition) bool FMPDataBase::update(QString table, QVariantHash data, QString condition)
{ {
if(!_isopen)
return false; if(!_db.isOpen())
qDebug()<< "----" <<_db.open();
QString sql; QString sql;
...@@ -107,13 +126,19 @@ bool FMPDataBase::update(QString table, QVariantHash data, QString condition) ...@@ -107,13 +126,19 @@ bool FMPDataBase::update(QString table, QVariantHash data, QString condition)
if(!flag) if(!flag)
QLOG_WARN() << query.lastError(); QLOG_WARN() << query.lastError();
_db.close();
return flag; return flag;
} }
bool FMPDataBase::find(QString table, QSqlQuery &query, QStringList keylist, QString condition) bool FMPDataBase::find(QString table, QSqlQuery &query, QStringList keylist, QString condition)
{ {
if(!_isopen)
return false; if(!_db.isOpen())
qDebug()<< "----" <<_db.open();
qDebug() << _db.lastError().type() << _db.lastError().text();
QSqlQuery tmpquery(_db); QSqlQuery tmpquery(_db);
...@@ -130,13 +155,15 @@ bool FMPDataBase::find(QString table, QSqlQuery &query, QStringList keylist, QSt ...@@ -130,13 +155,15 @@ bool FMPDataBase::find(QString table, QSqlQuery &query, QStringList keylist, QSt
QLOG_INFO() << "find sql : " << sql; QLOG_INFO() << "find sql : " << sql;
bool flag = tmpquery.exec(sql); bool flag = query.exec(sql);
if(!flag) if(!flag)
QLOG_WARN() << tmpquery.lastError(); QLOG_WARN() << tmpquery.lastError();
query = tmpquery; query = tmpquery;
_db.close();
return flag; return flag;
} }
......
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
#include <QObject> #include <QObject>
#include <QSqlDatabase> #include <QSqlDatabase>
#include <QMutex>
class FMPLoggerInterface; class FMPLoggerInterface;
class QSqlQuery; class QSqlQuery;
...@@ -28,8 +30,12 @@ public: ...@@ -28,8 +30,12 @@ public:
QSqlDatabase getDb() const; QSqlDatabase getDb() const;
void Init();
private: private:
bool exist(QString table); bool exist(QString table);
bool getSql(QString table, QVariantHash data, QString &sql); bool getSql(QString table, QVariantHash data, QString &sql);
...@@ -40,7 +46,12 @@ private: ...@@ -40,7 +46,12 @@ private:
QSqlDatabase _db; QSqlDatabase _db;
QString _dbname;
QString _connectname;
bool _isopen; bool _isopen;
}; };
#endif // FMP_DATABASE_H #endif // FMP_DATABASE_H
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
#include <QTimer> #include <QTimer>
#include <QSettings> #include <QSettings>
#include <QJsonObject> #include <QJsonObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include "tools.h" #include "tools.h"
#include "QsLog.h" #include "QsLog.h"
#include "cretopt.h" #include "cretopt.h"
...@@ -14,13 +17,7 @@ ...@@ -14,13 +17,7 @@
RollBack::RollBack(QObject *parent) : QThread(parent) RollBack::RollBack(QObject *parent) : QThread(parent)
{ {
QString path; //_db = new FMPDataBase(path + DB_ORDER, QString("rollback"));
ToolS::GetPath(path);
qDebug() << "++++++++++++++++++++++++++++" << path;
_db = new FMPDataBase(path + DB_ORDER, QString("rollback"));
_spr.release(10);
} }
RollBack::~RollBack() RollBack::~RollBack()
...@@ -28,15 +25,15 @@ RollBack::~RollBack() ...@@ -28,15 +25,15 @@ RollBack::~RollBack()
requestInterruption(); requestInterruption();
wait(); wait();
if(_db != NULL) // if(_db != NULL)
{ // {
delete _db; // delete _db;
_db = NULL; // _db = NULL;
} // }
} }
void RollBack::RollWiteQuery(QSqlQuery &query) void RollBack::RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query)
{ {
while(query.next()) while(query.next())
{ {
...@@ -47,8 +44,9 @@ void RollBack::RollWiteQuery(QSqlQuery &query) ...@@ -47,8 +44,9 @@ void RollBack::RollWiteQuery(QSqlQuery &query)
if( jsonDocument.isNull() ) if( jsonDocument.isNull() )
{ {
QLOG_ERROR() << "content not json:" << content; QString sql = QString("delete from orderlist where orderid='%1'").arg(parnetid);
_db->dlt(DB_TABLE_NAME, QString("%1='%2'").arg(SQL_KEY_ORDERID).arg(parnetid)); QLOG_ERROR() << sql;
query.exec(sql);
} }
QJsonObject json = jsonDocument.object(); QJsonObject json = jsonDocument.object();
...@@ -65,10 +63,6 @@ void RollBack::RollWiteQuery(QSqlQuery &query) ...@@ -65,10 +63,6 @@ void RollBack::RollWiteQuery(QSqlQuery &query)
QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact); QByteArray data = QJsonDocument(json).toJson(QJsonDocument::Compact);
_spr.acquire();
QtConcurrent::run( [this, parnetid, data]()
{
QByteArray array; QByteArray array;
QString path; QString path;
...@@ -79,31 +73,31 @@ void RollBack::RollWiteQuery(QSqlQuery &query) ...@@ -79,31 +73,31 @@ void RollBack::RollWiteQuery(QSqlQuery &query)
QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString(); QString url = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_URL).toString();
if(FMNetWork::HttpPost(url, array, data, "application/json;charset=utf-8","application/json", error, 25)) QLOG_INFO() << "roll back server url : " << url;
if(FMNetWork::HttpPost(url, array, data, "application/json;charset=utf-8","application/json", error, 12))
{ {
QString path; QString sql = QString("delete from orderlist where orderid='%1'").arg(parnetid);
ToolS::GetPath(path); QLOG_ERROR() << sql;
FMPDataBase db(path + "\\" + DB_ORDER, QString("curr") + QString::number((int)QThread::currentThreadId())); query.exec(sql);
db.dlt(DB_TABLE_NAME, QString("%1='%2'").arg(SQL_KEY_ORDERID).arg(parnetid));
} }
QLOG_WARN() << QThread::currentThreadId() << ":" << array; QLOG_WARN() << "rollback resulte " << QThread::currentThreadId() << ":" << array;
this->_spr.release();
});
} }
} }
void RollBack::run() void RollBack::run()
{ {
while(!isInterruptionRequested())
{
QString path; QString path;
ToolS::GetPath(path); ToolS::GetPath(path);
qDebug() << "======================" << path; QSqlDatabase _db = QSqlDatabase::addDatabase("QSQLITE", QString("backup"));
_db.setDatabaseName(path + DB_ORDER);
_db.open();
while(!isInterruptionRequested())
{
int timeout = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_TIMEOUT).toInt(); int timeout = QSettings(path + "\\" + USERCONFIG_NAME, QSettings::IniFormat).value(VALUE_TIMEOUT).toInt();
if(timeout == 0) if(timeout == 0)
...@@ -111,12 +105,17 @@ void RollBack::run() ...@@ -111,12 +105,17 @@ void RollBack::run()
do do
{ {
QSqlQuery query; QSqlQuery query(_db);
QLOG_WARN() << "find sql : " << "select * from orderlist";
bool flag = query.exec("select * from orderlist");
if(!flag)
QLOG_WARN() << query.lastError();
if(!_db->find(DB_TABLE_NAME, query))
break;
RollWiteQuery(query); RollWiteQuery(_db, query);
}while(0); }while(0);
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
#include <QThread> #include <QThread>
#include <QPointer> #include <QPointer>
#include <QSemaphore> #include <QSemaphore>
#include "fmp_database.h"
class QSqlDatabase;
class QSqlQuery;
class RollBack : public QThread class RollBack : public QThread
{ {
...@@ -15,12 +15,12 @@ public: ...@@ -15,12 +15,12 @@ public:
RollBack(QObject *parent = 0); RollBack(QObject *parent = 0);
~RollBack(); ~RollBack();
void RollWiteQuery(QSqlQuery &query); void RollWiteQuery(QSqlDatabase &_db, QSqlQuery &query);
void run(); void run();
private: private:
FMPDataBase *_db; //FMPDataBase *_db;
QSemaphore _spr; QSemaphore _spr;
}; };
......
...@@ -39,6 +39,7 @@ Control::Control(QObject *parent) : QObject(parent), _widget(NULL) ...@@ -39,6 +39,7 @@ Control::Control(QObject *parent) : QObject(parent), _widget(NULL)
QLOG_INFO() << "creat table : " << sql; QLOG_INFO() << "creat table : " << sql;
_db->Init();
_db->creat(sql); _db->creat(sql);
InitModel(); InitModel();
......
#ifndef GLOBAL #ifndef GLOBAL
#define GLOBAL #define GLOBAL
#define EXE_ROLLBACK "rollback.dll"
#define MAX_BUF_LEN 25600 #define MAX_BUF_LEN 25600
#define MAX_CHILED_LEN 256 #define MAX_CHILED_LEN 256
#define MAX_PRINT_LEN 12800 #define MAX_PRINT_LEN 12800
......
...@@ -334,6 +334,7 @@ void HostWidget::ShowWiteMGS(ReqType type, bool flag, QString message) ...@@ -334,6 +334,7 @@ void HostWidget::ShowWiteMGS(ReqType type, bool flag, QString message)
{ {
_need_exit = true; _need_exit = true;
_label_pay_timer->stop(); _label_pay_timer->stop();
ui->btn_pay_exitint->hide();
ui->label_pay_time_load->setVisible(false); ui->label_pay_time_load->setVisible(false);
ui->label_pay_money->setVisible(true); ui->label_pay_money->setVisible(true);
ui->label_pay_money->setText(message); ui->label_pay_money->setText(message);
......
#ifdef SBKDLL #ifdef SBKDLL
#include "DataProcess/tools.h" #include "DataProcess/tools.h"
#include "DataProcess/rollback.h" #include "DataProcess/rollback.h"
#include <qwinwidget.h> #include <qwinwidget.h>
#include <QMessageBox> #include <QMessageBox>
#include <windows.h> #include <windows.h>
#include "control.h" #include "control.h"
...@@ -15,6 +13,7 @@ ...@@ -15,6 +13,7 @@
#include "rspfactory.h" #include "rspfactory.h"
#include <QDir> #include <QDir>
EXTERN_C IMAGE_DOS_HEADER __ImageBase; EXTERN_C IMAGE_DOS_HEADER __ImageBase;
...@@ -71,12 +70,18 @@ extern "C" __declspec(dllexport) void Start(const char *indata, char *outdata) ...@@ -71,12 +70,18 @@ extern "C" __declspec(dllexport) void Start(const char *indata, char *outdata)
QsLogging::DestinationPtr consleDest(QsLogging::DestinationFactory::MakeDebugOutputDestination()); QsLogging::DestinationPtr consleDest(QsLogging::DestinationFactory::MakeDebugOutputDestination());
logger.addDestination(consleDest); logger.addDestination(consleDest);
// QByteArray rollback;
// rollback = QByteArray(path) + EXE_ROLLBACK;
// WinExec(rollback.data(), SW_HIDE);
static RollBack rollback; static RollBack rollback;
Control control(&win); Control control(&win);
control.Start(indata, outdata);
if(!rollback.isRunning()) if(!rollback.isRunning())
rollback.start(); rollback.start();
control.Start(indata, outdata);
} }
......
...@@ -118,7 +118,7 @@ private: ...@@ -118,7 +118,7 @@ private:
FMTool::SetString(response.CardTraceNo, 40, json[JSON_KEY_FMID].toString()); FMTool::SetString(response.CardTraceNo, 40, json[JSON_KEY_FMID].toString());
FMTool::SetString(response.NeedPrint, 2, QString("01")); FMTool::SetString(response.NeedPrint, 2, QString("01"));
int transAmount = json[JSON_KET_CLIENTREF].toInt(); int transAmount = json[JSON_KET_CLIENTREF].toString().toInt();
int merchantDiscount = json[JSON_KEY_MERDISCOUNT].toInt(); int merchantDiscount = json[JSON_KEY_MERDISCOUNT].toInt();
int platformDiscount = json[JSON_KEY_PLTDISCOUNT].toInt(); int platformDiscount = json[JSON_KEY_PLTDISCOUNT].toInt();
int userAmount = transAmount - merchantDiscount - platformDiscount; int userAmount = transAmount - merchantDiscount - platformDiscount;
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 3.5.1, 2017-08-28T01:14:35. --> <!-- Written by QtCreator 3.5.1, 2017-08-31T18:35:35. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.5.1 MSVC2010 32bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.55.win32_msvc2010_kit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.55.win32_msvc2010_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
...@@ -226,14 +226,12 @@ ...@@ -226,14 +226,12 @@
</valuelist> </valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value> <value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/> <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">sbkpay</value> <value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Arguments"></value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.WorkingDirectory">%{buildDir}</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">自定义执行档</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:D:/gitcode/sbkpay/sbkpay/sbkpay.pro</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">sbkpay.pro</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value> <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value> <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment