当前位置:网站首页>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 .
边栏推荐
- PMP personal sprint preparation experience
- Stdref and stdcref
- 使用 useDeferredValue 进行异步渲染
- Soul app released the annual report on generation Z behavior: nearly 20% of young people love shopping in the vegetable market
- Connected block template and variants (4 questions in total)
- How to run oddish successfully from 0?
- How to turn off the LED light of Rog motherboard
- Addition without addition, subtraction, multiplication and division (simple difficulty)
- 2022-2028 global nano abrasive industry research and trend analysis report
- ZABBIX API creates hosts in batches according to the host information in Excel files
猜你喜欢
Force deduction daily question 540 A single element in an ordered array
Which brand of sports headset is better? Bluetooth headset suitable for sports
How to develop digital collections? How to develop your own digital collections
[staff] pitch representation (treble clef | C3 60 ~ B3 71 pitch representation | C4 72 pitch representation | C5 84 pitch representation)
多线程查询,效率翻倍
2022-2028 global deep sea generator controller industry research and trend analysis report
New programmer magazine | Li Penghui talks about open source cloud native message flow system
2022-2028 global soft capsule manufacturing machine industry research and trend analysis report
使用 useDeferredValue 进行异步渲染
批量检测url是否存在cdn—高准确率
随机推荐
Baohong industry | four basic knowledge necessary for personal finance
Which brand of sports headset is better? Bluetooth headset suitable for sports
[staff] restore mark (Introduction to the use of restore mark | example analysis of Metaphone mark and restore mark)
[learn C and fly] 4day Chapter 2 program in C language (exercise 2.5 generate power table and factorial table
GB/T-2423.xx 环境试验文件,整理包括了最新的文件里面
自定义组件的 v-model
New programmer magazine | Li Penghui talks about open source cloud native message flow system
实现一个自定义布局的扫码功能
Deployment practice and problem solving of dash application development environment based on jupyter Lab
超图iServer rest服务之feature查询
Use the open source project [banner] to achieve the effect of rotating pictures (with dots)
Qualcomm platform wifi-- WPA_ supplicant issue
How does proxy IP participate in the direct battle between web crawlers and anti crawlers
只需简单几步 - 开始玩耍微信小程序
PMP personal sprint preparation experience
Set status bar color
Query word weight, search word weight calculation
PHP notes - use Smarty to set public pages (include, if, else, variable settings)
Xiaomi, a young engineer, was just going to make soy sauce
tarjan2