当前位置:网站首页>QT environment generates dump to solve abnormal crash
QT environment generates dump to solve abnormal crash
2022-07-02 02:59:00 【Blank is nickname】
background
For regular use C/C++ For my partner , If there is a problem with the procedure, the problem of strike collapse is simply not familiar . For example, local tests are released through packaging release edition Qt Program , Abnormal crash may still occur in the customer environment . Generally, through customer feedback and analysis of system operation logs , Basically, all problems can be solved quickly . But there will always be some bug Hard to locate , In this case, by generating dump file , combination winDbg Program positioning will be a good solution .
Specific operation
One 、 Generate dump file
stay QtCreator Generation... Is not supported by default in dump file , And release release The mode does not contain debugging information , Therefore, the following two steps are required .
1. stay .pro Add the following statement to the file , To generate debugging information and pdb file
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
LIBS += -lDbgHelp
2. Adding in the program file can produce dump File code . Code can be copied directly , No more meaning
LONG crashHandler(EXCEPTION_POINTERS *pException)
{
QString curDataTime = QDateTime::currentDateTime().toString("yyyyMMddhhmmss");
QString dumpName = curDataTime + ".dmp";
HANDLE dumpFile = CreateFile((LPCWSTR)QString("./" + dumpName).utf16(),GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(dumpFile != INVALID_HANDLE_VALUE)
{
MINIDUMP_EXCEPTION_INFORMATION dumpInfo;
dumpInfo.ExceptionPointers = pException;
dumpInfo.ThreadId = GetCurrentThreadId();
dumpInfo.ClientPointers = TRUE;
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(),dumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);
CloseHandle(dumpFile);
}
else
{
qDebug() << "dumpFile not vaild";
}
return EXCEPTION_EXECUTE_HANDLER;
}
// prevent CRT(C runtime) Function error may not be caught
void DisableSetUnhandledExceptionFilter()
{
void* addr = (void*)GetProcAddress(LoadLibrary(L"kernel32.dll"), "SetUnhandledExceptionFilter");
if(addr)
{
unsigned char code[16];
int size = 0;
code[size++] = 0x33;
code[size++] = 0xC0;
code[size++] = 0xC2;
code[size++] = 0x04;
code[size++] = 0x00;
DWORD dwOldFlag, dwTempFlag;
VirtualProtect(addr, size, PAGE_READWRITE, &dwOldFlag);
WriteProcessMemory(GetCurrentProcess(), addr, code, size, NULL);
VirtualProtect(addr, size, dwOldFlag, &dwTempFlag);
}
}
int main(int argc, char *argv[])
{
// Register exception capture function
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)crashHandler);
DisableSetUnhandledExceptionFilter();
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
3. Clear and re qmake function , produce pdb Documents and running procedures . In this case, the application crash will occur at the predetermined location dump file .
Two 、 Use dump file
1. Suppose the program crashes and gets dump file , open winDbg Software ( You need to download , Easy to install ), Set the source code paths respectively 、pdb File path 、dump route , After confirmation, the software jumps to the analysis interface .
2. Click auto analysis (!anasyle -v), Generate stack information , Then you can see the number of error source code lines 
matters needing attention
The above provides an idea to solve the abnormal crash , Not the ultimate solution , Although there is no guarantee 100% solve the problem , But it may have miraculous effects , Personal suggestions are still based on logical analysis , Problems can be basically solved , It can also exercise the ability of analysis , Avoid writing similar bug.
Here are some points to note :
1. It should be packed exe,pdb, The source code version is consistent , Otherwise, there may be deviation in debugging .
2.dump Documents are not guaranteed to produce , Some errors may not be caught .
3.!anasyle -v After automatic analysis , Most of the time, you can directly locate the number of error lines , intuitive . But there are also cases where the number of rows cannot be found , But having clear stack information can help analyze the problem .
边栏推荐
- GB/T-2423. XX environmental test documents, including the latest documents
- CVPR 2022 | Dalian Institute of technology proposes a self calibration lighting framework for low light level image enhancement of real scenes
- 3124. Word list
- Soul app released the annual report on generation Z behavior: nearly 20% of young people love shopping in the vegetable market
- Websocket + spingboot realize code scanning login
- 2022-2028 global wood vacuum coating machine industry research and trend analysis report
- [learn C and fly] day 5 chapter 2 program in C language (Exercise 2)
- Just a few simple steps - start playing wechat applet
- Mathematics in Sinorgchem: computational geometry
- Qualcomm platform WiFi -- P2P issue (2)
猜你喜欢

Which brand of running headphones is good? How many professional running headphones are recommended

Mongodb non relational database

About DNS

Start a business

buu_ re_ crackMe
Face++ realizes face detection in the way of flow
![[staff] pitch representation (treble clef | C3 60 ~ B3 71 pitch representation | C4 72 pitch representation | C5 84 pitch representation)](/img/e0/05890eafdb291c5aaff78cc241f455.jpg)
[staff] pitch representation (treble clef | C3 60 ~ B3 71 pitch representation | C4 72 pitch representation | C5 84 pitch representation)

Jvm-01 (phased learning)

GB/T-2423. XX environmental test documents, including the latest documents

2022-2028 global encryption software industry research and trend analysis report
随机推荐
2022 safety officer-c certificate examination questions and mock examination
[staff] pitch representation (bass clef | C1 36 note pitch representation | C2 48 note pitch representation | C3 60 note pitch representation)
GB/T-2423.xx 环境试验文件,整理包括了最新的文件里面
Redis set command line operation (intersection, union and difference, random reading, etc.)
Yyds dry goods inventory accelerating vacuum in PG
Vsocde has cli every time it is opened js
Missing numbers from 0 to n-1 (simple difficulty)
2022 hoisting machinery command examination paper and summary of hoisting machinery command examination
【做题打卡】集成每日5题分享(第二期)
[JSON] gson use and step on the pit
Analysis of FLV packaging format
Baohong industry | four basic knowledge necessary for personal finance
How to turn off the LED light of Rog motherboard
How to develop digital collections? How to develop your own digital collections
Stack - es - official documents - filter search results
Baohong industry | what misunderstandings should we pay attention to when diversifying investment
图扑软件通过 CMMI5 级认证!| 国际软件领域高权威高等级认证
What is the principle of bone conduction earphones and who is suitable for bone conduction earphones
[staff] diacritical mark (ascending sign | descending sign B | double ascending sign x | double descending sign BB)
Divorce for 3 years to discover the undivided joint property, or