當前位置:首頁 » 編程軟體 » qt編譯debug

qt編譯debug

發布時間: 2022-05-11 00:28:21

1. QtCreator怎麼使用debug功能

您好。
在項目project中配置下為debug模式!!Make:
mingw32-make.exe
debug
-w
in

首先要設置一個斷點,然後Debug(當然要在Debug模式下),
程序會運行到斷點處,然後就可以用F10或F11之類的調試了
Qt-SDK有debug功能的,不過用的是MingW編譯器,編譯成動態的debug版本後可以debug
如果還有問題,可以繼續追問,感謝。

2. Qt debug模式和release模式的區別

debug當然是可以調試程序了,而release就不可以。在程序出現錯誤的時候,在debug模式下通過設置斷點來調試程序。當程序所有錯誤都解決了以後,在release模式下生成程序,就可以對外發布了。debug生成的程序因為包含了調試信息,編譯器也未做優化,所以比release模式生成的程序要大很多。

3. qt qdebug正常releasd異常

qt qdebug正常releasd異常,原因:指向了野指針,導致死機。
現象:增加了exe圖標功能,重新編譯debug正常,但realse崩潰。
原因:指向了野指針,導致死機。
解決:
1、realse版本重新編譯,野指針重新指向正確的指針路徑。
2、realse版本用debug調試,查看最後崩潰指向代碼在哪一行。
3、vs版本的可以使用windeploy調試mp文件。
qt是一個跨平台的C++開發庫。Qt是一個1991年由Qt Company開發的跨平台C++圖形用戶界面應用程序開發框架。它既可以開發GUI程序,也可用於開發非GUI程序,比如控制台工具和伺服器。Qt是面向對象的框架,使用特殊的代碼生成擴展(稱為元對象編譯器(Meta Object Compiler, moc))以及一些宏,Qt很容易擴展,並且允許真正地組件編程

4. qt5.10在debug時,出現could not find qtWebEngineProcessed.exe(確認該文件是存在的),release時正常

qt 程序在編譯的時候,會在輸出目錄下自動生成一個文件夾, 如下:
e:/build-untitled-Desktop_Qt_5_10_1_MSVC2015_32bit-Debug/
e:/build-untitled-Desktop_Qt_5_10_1_MSVC2015_32bit-Release/
具體名稱因編譯環境不同而異,但結構相同,注意看最後一段,-Debug -Release , 你注意對比下兩個目錄中文件的差異。仍可能缺少相應的支持文件

5. QT的代碼編譯沒錯,但是debug模式下會異常終止,在release模式下就沒問題,請問是什麼情況

qt代碼在release模式下編譯之後,會偶先題目所述現象,但是debug模式下確沒事,單獨運行release文件夾中的exe也可以,唯獨在qtcreator中運行時不行,網路之後的答案基本是環境問題,巴拉巴拉,但是他也沒說具體是什麼環境問題,這叫我怎麼排查?!

不過就在剛剛我又出現了這個問題,這種問題一般出現在如下情況:

1、添加一些新的模塊或代碼中需要新的qt的dll庫等;

2、把別人的代碼拉倒本地後再編譯(別人的庫包括上一條所述的內容);

qt的release模式是需要單獨去尋找dll或相關鏈接庫的,如果它自己找不到,就會爆出標題所述的內容,此時你可以檢查你的環境(但是就像我之前說的,我也不知道我要檢查什麼環境!),另外一種有效的做法就是呢:

安裝qt後會隨著按照一個命令行工具(和windows自帶的CMD類似),叫做 Qt 5.7 for Desktop (MinGW 5.3.0 32bit),在開始目錄里打開這個工具,如下圖:


在命令行中進入到,編譯後的exe存放的目錄中,然後輸入命令:

windeployqt xxx.exe

其中xxx.exe就是你生成的exe名稱,這條命令會把exe相關的內容解析出來,你會在文件夾中看到很多qt的相關dll,這些都是依賴性,有了這些依賴項之後,再返回運行qt creator就能成功運行啦~~~~

當然了,這種方式也適用於對應用打包,把exe單獨放到一個文件夾,運行上述命令,這個文件夾就可以在沒有qt的環境的電腦中運行了。

6. QT編譯錯誤,怎麼解決

項目->構建設置,把中文路徑改為英文路徑 ,記得清理之後再重新構建哦

7. 為什麼我用Qt5.6編譯出的debug與release程序在不同的目

這個十分簡單, 如果我理解的沒有錯的話, 你應該是在新建項目時沒有添加Release對象吧?
1. 點擊左側邊欄的Projects
2. 在Build Step里的qmake build configuration中選擇Release
此時你編譯出來的對象就是release的了...
如果是要上交的內容, 更改下build directory, 就OK了

如果你是在Shell下的話... qmake加參數 "-CONFIG+=Release(或者Debug)"

8. qt如何把debug編譯成release版本

這個十分簡單, 如果我理解的沒有錯的話, 你應該是在新建項目時沒有添加Release對象吧?
1. 點擊左側邊欄的Projects
2. 在Build Step里的qmake build configuration中選擇Release
此時你編譯出來的對象就是release的了...
如果是要上交的內容, 更改下build directory, 就OK了

如果你是在Shell下的話... qmake加參數 "-CONFIG+=Release(或者Debug)"

9. 使用vs2013編譯qt工程,qdebug出的中文變成這樣了

qDebug() <<QObject::tr("好多");
這樣用就可以不出亂碼了。
直接寫 qDebug()<<"好多";的話我也是亂碼
差點忘了。我這邊編碼方式是"utf-8".即
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
確切地說是工具-》選項-》文件編碼里的默認編碼要支持中文的。然後寫成一致的就不會亂碼了。請給分。謝謝

10. qt4.8.5build debug libraries 編譯有什麼用

QT Debug大集合 詳細講解是本文要介紹的內容,相信友們應該在編程過程中遇到各種各樣的Debug,先來看內容。QT Debug集錦~ 這篇是在10年測試QT 過程中遇到的問題:
1、中文顯示問題:
#include <QApplication> #include <QLabel> #include <QTextCodec> int main(int argc, char* argv[]) { QApplication app(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); QLabel *label = new QLabel(tr("這里是中文")); label->Show(); return app.exec(); }

編譯代碼,得到的錯誤是: 'tr'在此作用域中尚未聲明。
昨天為什麼沒有出現這種錯誤呢?因為昨天的代碼是從qt creator生成的MainWindow中挑出來的,tr被聲明為QObject的一個static方法,因此在MainWindow中使用tr不會有問題。
把上面的QLabel *label=new QLabel(tr("這里是中文"));
改為
QLabel *label=new QLabel(QObject::tr("這里是中文"));
2、中文問題:
使用sqlite資料庫顯示亂碼的問題
本人近日在使用QT進行sqlite資料庫編程時,出現中文數據顯示亂碼情況,附源碼如下:

//main.cpp #include <QtGui> #include <QtCore/QTextCodec> #include <QSqlTableModel> #include <QTableView> #include <QHeaderView> #include <QSqlRecord> #include <QtGui/QLabel> #include <QString> #include <QVariant> #include "connection.h" #include "sql.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK")); //創建資料庫連接 if (!createConnection()) return 1; //創建學生信息表 createTables(); //初始添加數據 addData(); enum{ Student_Id = 0, Student_Schnum = 1, Student_Name = 2, Student_Sex = 3, Student_Nation = 4 }; QSqlTableModel *model = new QSqlTableModel(); model->setTable("student"); model->setSort(Student_Schnum, Qt::AscendingOrder); model->setHeaderData(Student_Schnum, Qt::Horizontal, QObject::tr("學號")); model->setHeaderData(Student_Name, Qt::Horizontal, QObject::tr("姓名")); model->setHeaderData(Student_Sex, Qt::Horizontal, QObject::tr("性別")); model->setHeaderData(Student_Nation, Qt::Horizontal, QObject::tr("民族")); model->select(); QTableView *view = new QTableView; view->setModel(model); view->setSelectionMode(QAbstractItemView::SingleSelection); view->setSelectionBehavior(QAbstractItemView::SelectRows); view->setColumnHidden(Student_Id, true); view->resizeColumnsToContents(); view->setEditTriggers(QAbstractItemView::NoEditTriggers); QHeaderView *header = view->horizontalHeader(); header->setStretchLastSection(true); view->show(); return a.exec(); } //connection.h #ifndef CONNECTION_H #define CONNECTION_H #include <QMessageBox> #include <QSqlDatabase> #include <QSqlError> #include <QSqlDriver> inline bool createConnection() { QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("sim.dat"); if (!db.open()) { QMessageBox::warning(0, QObject::tr("Database Error"), db.lastError().text()); return false; } return true; } #endif // CONNECTION_H //sql.h #include <QSqlQuery> #ifndef SQL_H #define SQL_H inline void createTables() { QSqlQuery query; query.exec("CREATE TABLE student (" "id INTEGER PRIMARY KEY, " "schnum INTEGER NOT NULL, " "name VARCHAR(40) NOT NULL, " "sex VARCHAR(4) NOT NULL, " "nation VARCHAR(10) NOT NULL)"); } inline void addData(){ QSqlQuery query; for(int i =0;i<100;i++){ query.exec("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"); } } #endif // SQL_H

上網查了許多無果,後來在閱讀一篇技術文章中無意發現,原來在插入數據語句若有中文必須先QObject::tr()一番,即進行編碼,
將 Sql.h 中 query.exec("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"); 改為如下 query.exec(QObject::tr("INSERT INTO student (schnum, name, sex, nation) VALUES (2614103, '天殘腳,'男', '漢族')"));

結果在顯示中都能得正確顯示。
注意,如果語句 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));中的編碼改為utf-8則會顯示亂碼。
3、中文問題:
如果使程序只支持一種編碼,也可以直接把整個應用程序的編碼設置為GBK編碼, 然後在字元串之前 加
tr(QObject::tr), qApp->setDefaultCodec( QTextCodec::codecForName("GBK") ); QLabel *label = new QLabel( tr("中文標簽") );

4、找不到<QtSql >
求助:提示無法打開包含文件QtSql
.Pro文件里加入 QT += sql
4、No rule to make target 'mkspecs/default/qmake.conf', needed by `Makefile'. Stop. 錯誤
mingw32-make: *** No rule to make target `http://www.cnblogs.com/http://www.cnblogs.com/Qt/4.3.3/mkspecs/default/qmake.conf', needed by `makefile'. Stop. make[2]: Entering directory `/home/lzy/tps2/rplan/super' make[2]: *** No rule to make target `/home/lzy/qt/qt-3.3.2/mkspecs/default/qmake.conf', needed by `Makefile'. Stop. make[2]: Leaving directory `/home/lzy/tps2/rplan/super'

5、mingw32\bin\ld.exe: cannot find -lqtmaind錯誤
這個錯誤是缺少某些庫,將mingw重新下載安裝即可。
6、編譯時可能會遇到如下錯誤:previous declaration 'long int InterlockedIncrement(long int*)' here
此為qt的bug需要修改源代碼 (Qt\4.4.3\src\corelib\arch\qatomic_windows.h),原文件如下:
Solution:
(1) Qt\4.4.3\src\corelib\arch\qatomic_windows.h:
#if !(defined Q_CC_BOR) || (__BORLANDC__ < 0x560) extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long *); __declspec(dllimport) long __stdcall InterlockedDecrement(long *); __declspec(dllimport) long __stdcall InterlockedExchange(long *, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long); } #else extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long volatile*, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedExchange(long volatile*, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile*, long); } #endif you will see above code in Qt\4.4.3\src\corelib\arch\qatomic_windows.h: file. I modified like below and it works. /*#if !(defined Q_CC_BOR) || (__BORLANDC__ < 0x560) extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long *); __declspec(dllimport) long __stdcall InterlockedDecrement(long *); __declspec(dllimport) long __stdcall InterlockedExchange(long *, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long); } #else */ extern "C" { __declspec(dllimport) long __stdcall InterlockedCompareExchange(long volatile*, long, long); __declspec(dllimport) long __stdcall InterlockedIncrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedDecrement(long volatile*); __declspec(dllimport) long __stdcall InterlockedExchange(long volatile*, long); __declspec(dllimport) long __stdcall InterlockedExchangeAdd(long volatile*, long); } // #endif

7、編譯錯誤,顯示 can not find -lqtmaind。
這是qt的debug庫,安裝完成後需要再自己編譯這個庫。在Qt的開始菜單中,你可以找到一個程序 Qt 4.4.0 (Build Debug Libraries),運行這個程序就能編譯Qt的Debug庫了。
小結:QT debug大集合 詳細講解的內容介紹完了,希望本文對你有搜幫助。

熱點內容
appleid為什麼連接伺服器出現問題 發布:2025-05-13 18:17:37 瀏覽:970
書翁怎麼配置 發布:2025-05-13 18:17:36 瀏覽:911
雲資料庫mongodb 發布:2025-05-13 18:16:12 瀏覽:773
A7編程 發布:2025-05-13 18:15:26 瀏覽:741
python視圖 發布:2025-05-13 18:14:01 瀏覽:758
win為什麼干不過安卓 發布:2025-05-13 18:12:27 瀏覽:586
文件夾只讀win8 發布:2025-05-13 18:11:41 瀏覽:272
xp安裝php 發布:2025-05-13 18:04:30 瀏覽:183
sqlserver介紹 發布:2025-05-13 17:58:00 瀏覽:4
雲閃付安卓版哪個版本好用 發布:2025-05-13 17:57:16 瀏覽:187