fix: windows crash report issues
This commit is contained in:
parent
d260d75953
commit
47125b5d9d
|
@ -102,10 +102,10 @@ void taosResetTerminalMode();
|
||||||
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
|
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
|
||||||
\
|
\
|
||||||
if (frames > 0) { \
|
if (frames > 0) { \
|
||||||
offset = snprintf(buf, bufSize - 1, "obtained %d stack frames", frames); \
|
offset = snprintf(buf, bufSize - 1, "obtained %d stack frames", (ignoreNum > 0) ? frames - ignoreNum : frames); \
|
||||||
for (i = 0; i < frames; i++) { \
|
for (i = (ignoreNum > 0) ? ignoreNum : 0; i < frames; i++) { \
|
||||||
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
|
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
|
||||||
offset += snprintf(buf + offset, bufSize - 1 - offset, "frame:%i, %s - 0x%0X", frames - i - 1, symbol->Name, symbol->Address); \
|
offset += snprintf(buf + offset, bufSize - 1 - offset, "frame:%i, %s - 0x%0X", (ignoreNum > 0) ? i - ignoreNum : i, symbol->Name, symbol->Address); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
free(symbol); \
|
free(symbol); \
|
||||||
|
@ -131,10 +131,10 @@ void taosResetTerminalMode();
|
||||||
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
|
symbol->SizeOfStruct = sizeof(SYMBOL_INFO); \
|
||||||
\
|
\
|
||||||
if (frames > 0) { \
|
if (frames > 0) { \
|
||||||
taosPrintLog(flags, level, dflag, "obtained %d stack frames", frames); \
|
taosPrintLog(flags, level, dflag, "obtained %d stack frames", (ignoreNum > 0) ? frames - ignoreNum : frames); \
|
||||||
for (i = 0; i < frames; i++) { \
|
for (i = (ignoreNum > 0) ? ignoreNum : 0; i < frames; i++) { \
|
||||||
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
|
SymFromAddr(process, (DWORD64)(stack[i]), 0, symbol); \
|
||||||
taosPrintLog(flags, level, dflag, "frame:%i, %s - 0x%0X", frames - i - 1, symbol->Name, symbol->Address); \
|
taosPrintLog(flags, level, dflag, "frame:%i, %s - 0x%0X", (ignoreNum > 0) ? i - ignoreNum : i, symbol->Name, symbol->Address); \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
free(symbol); \
|
free(symbol); \
|
||||||
|
|
|
@ -419,8 +419,14 @@ void taosClientCrash(int signum, void *sigInfo, void *context) {
|
||||||
_return:
|
_return:
|
||||||
|
|
||||||
taosLogCrashInfo("taos", pMsg, msgLen, signum, sigInfo);
|
taosLogCrashInfo("taos", pMsg, msgLen, signum, sigInfo);
|
||||||
|
|
||||||
|
#if defined(WINDOWS)
|
||||||
|
exit(signum);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void crashReportThreadFuncUnexpectedStopped(void) { atomic_store_32(&clientStop, -1); }
|
||||||
|
|
||||||
static void *tscCrashReportThreadFp(void *param) {
|
static void *tscCrashReportThreadFp(void *param) {
|
||||||
setThreadName("client-crashReport");
|
setThreadName("client-crashReport");
|
||||||
char filepath[PATH_MAX] = {0};
|
char filepath[PATH_MAX] = {0};
|
||||||
|
@ -432,6 +438,12 @@ static void *tscCrashReportThreadFp(void *param) {
|
||||||
int32_t sleepTime = 200;
|
int32_t sleepTime = 200;
|
||||||
int32_t reportPeriodNum = 3600 * 1000 / sleepTime;
|
int32_t reportPeriodNum = 3600 * 1000 / sleepTime;
|
||||||
int32_t loopTimes = reportPeriodNum;
|
int32_t loopTimes = reportPeriodNum;
|
||||||
|
|
||||||
|
#ifdef WINDOWS
|
||||||
|
if (taosCheckCurrentInDll()) {
|
||||||
|
atexit(crashReportThreadFuncUnexpectedStopped);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (clientStop) break;
|
if (clientStop) break;
|
||||||
|
@ -499,7 +511,11 @@ void tscStopCrashReport() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
clientStop = 1;
|
if (atomic_val_compare_exchange_32(&clientStop, 0, 1)) {
|
||||||
|
tscDebug("hb thread already stopped");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
while (atomic_load_32(&clientStop) > 0) {
|
while (atomic_load_32(&clientStop) > 0) {
|
||||||
taosMsleep(100);
|
taosMsleep(100);
|
||||||
}
|
}
|
||||||
|
|
|
@ -866,7 +866,12 @@ int32_t taosGenCrashJsonMsg(int signum, char** pMsg, int64_t clusterId, int64_t
|
||||||
tjsonAddIntegerToObject(pJson, "crashSig", signum);
|
tjsonAddIntegerToObject(pJson, "crashSig", signum);
|
||||||
tjsonAddIntegerToObject(pJson, "crashTs", taosGetTimestampUs());
|
tjsonAddIntegerToObject(pJson, "crashTs", taosGetTimestampUs());
|
||||||
|
|
||||||
|
#if !defined(WINDOWS)
|
||||||
taosLogTraceToBuf(tmp, sizeof(tmp), 3);
|
taosLogTraceToBuf(tmp, sizeof(tmp), 3);
|
||||||
|
#else
|
||||||
|
taosLogTraceToBuf(tmp, sizeof(tmp), 8);
|
||||||
|
#endif
|
||||||
|
|
||||||
tjsonAddStringToObject(pJson, "stackInfo", tmp);
|
tjsonAddStringToObject(pJson, "stackInfo", tmp);
|
||||||
|
|
||||||
char* pCont = tjsonToString(pJson);
|
char* pCont = tjsonToString(pJson);
|
||||||
|
@ -925,9 +930,10 @@ _return:
|
||||||
#ifndef WINDOWS
|
#ifndef WINDOWS
|
||||||
taosPrintLog(flags, level, dflag, "sender PID:%d cmdline:%s", ((siginfo_t *)sigInfo)->si_pid,
|
taosPrintLog(flags, level, dflag, "sender PID:%d cmdline:%s", ((siginfo_t *)sigInfo)->si_pid,
|
||||||
taosGetCmdlineByPID(((siginfo_t *)sigInfo)->si_pid));
|
taosGetCmdlineByPID(((siginfo_t *)sigInfo)->si_pid));
|
||||||
#endif
|
|
||||||
|
|
||||||
taosPrintTrace(flags, level, dflag, 3);
|
taosPrintTrace(flags, level, dflag, 3);
|
||||||
|
#else
|
||||||
|
taosPrintTrace(flags, level, dflag, 8);
|
||||||
|
#endif
|
||||||
|
|
||||||
taosMemoryFree(pMsg);
|
taosMemoryFree(pMsg);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue