当前位置:网站首页>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 .
边栏推荐
- Leetcode question brushing (10) - sequential question brushing 46 to 50
- 寻找重复数[抽象二分/快慢指针/二进制枚举]
- [JS reverse series] analysis of a customs publicity platform
- Baohong industry | what misunderstandings should we pay attention to when diversifying investment
- 图扑软件通过 CMMI5 级认证!| 国际软件领域高权威高等级认证
- Use usedeferredvalue for asynchronous rendering
- Kibana controls es
- 创业了...
- STM32__ 05 - PWM controlled DC motor
- Tupu software has passed CMMI5 certification| High authority and high-level certification in the international software field
猜你喜欢

只需简单几步 - 开始玩耍微信小程序

2022-2028 global deep sea generator controller industry research and trend analysis report

高并发场景下缓存处理方案

图扑软件通过 CMMI5 级认证!| 国际软件领域高权威高等级认证

ZABBIX API creates hosts in batches according to the host information in Excel files
![寻找重复数[抽象二分/快慢指针/二进制枚举]](/img/9b/3c001c3b86ca3f8622daa7f7687cdb.png)
寻找重复数[抽象二分/快慢指针/二进制枚举]

Mongodb base de données non relationnelle

Redis cluster

超图iServer rest服务之feature查询

2022-2028 global human internal visualization system industry research and trend analysis report
随机推荐
Use the open source project [banner] to achieve the effect of rotating pictures (with dots)
MongoDB非关系型数据库
Après le mariage
Provincial election + noi Part IV graph theory
Qualcomm platform WiFi -- Native crash caused by WiFi
Addition without addition, subtraction, multiplication and division (simple difficulty)
2022-2028 global military computer industry research and trend analysis report
4. Find the median of two positive arrays
Mathematics in Sinorgchem: computational geometry
Face++ realizes face detection in the way of flow
Discussion on related configuration of thread pool
Mmsegmentation series training and reasoning their own data set (3)
[untitled]
寻找重复数[抽象二分/快慢指针/二进制枚举]
Websocket + spingboot realize code scanning login
Golang configure export goprivate to pull private library code
Soul app released the annual report on generation Z behavior: nearly 20% of young people love shopping in the vegetable market
[learn C and fly] 2day Chapter 8 pointer (practice 8.1 password unlocking)
MVVM and MVC
2022安全员-C证考试题及模拟考试