Problem mit einer Funktion
-
Hi!
Ich habe hier eine Funktion, die an sich zwar funktioniert, aber in unregelmaessigen Abstaenden dazu fuehrt, dass der Server auf dem sie benutzt wird einfriert. Ich wollte mal schauen ob hier irgendjemand irgendetwas an der Funktion sieht was generell 'gefaehrlich' ist, da ich dafuer nicht wirklich zu gebrauchen bin (mache mehr C# als C++).
void CServerDlg::WriteConsoleString(LPCTSTR pMsg,...) { CM_TRACE_FUNC_ARG1("WriteConsoleString", "(%s)", pMsg); TCHAR str[250]; va_list marker; int nLen; static int nMax = 250; if(m_edConsole.GetLineCount() > nMax) { // Nuke the oldest 75%. int iLine = (m_edConsole.GetLineCount()*75) / 100; int iChar = m_edConsole.LineIndex(iLine); m_edConsole.SetRedraw(FALSE); m_edConsole.SetSel(0, iChar); m_edConsole.ReplaceSel("", FALSE); m_edConsole.SetRedraw(TRUE); } va_start(marker, pMsg); _vsnprintf( str, sizeof( str ) - 1, pMsg, marker ); va_end(marker); int len = strlen(str); if (len > 0) { if (len > 0 && str[len-1] < 32) str[len-1] = '\0'; SYSTEMTIME st; GetSystemTime(&st); //Date - Time // printf("Year:%d\nMonth:%d\nDate:%d\nHour:%d\nMin:%d\nSecond:% d\n" ,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond); TCHAR str2[250]; TCHAR str3[250]; int tmphr = st.wHour+i_TimeOffset; if (tmphr == 24) {tmphr = 0;} sprintf(str2,"[%02d:%02d:%02d - %02d.%02d.%d] %s\r\n",(tmphr),st.wMinute,st.wSecond,st.wMonth,st.wDay,st.wYear,str); sprintf(str3,"[%02d:%02d:%02d - %02d.%02d.%d] %s",(tmphr),st.wMinute,st.wSecond,st.wMonth,st.wDay,st.wYear,str); if(strcmp(s_ChatLogName ,"null") != 0 && i_DoLogging == 1) { //Append to file FILE *log = fopen(s_ChatLogName, "at"); if (!log) log = fopen(s_ChatLogName, "wt"); if (!log) { return; // bail out if we can't log } sprintf(str,"%s",str2); fputs(str,log); fclose(log); } nLen = m_edConsole.SendMessage(EM_GETLIMITTEXT, 0, 0); m_edConsole.SetSel(nLen, nLen); m_edConsole.ReplaceSel(str2); } }Vom logging abgesehen ist es der 'original' code, der seit etwa 9 Jahren problemlos arbeitet.. also muesste da das Problem zu finden sein. Erster gedanke war, dass die datei irgendwoanders bereits veraendert wird und es so problemen kommt, aber das ist nicht der fall...
Hoffentlich findet jemand was :0)
Danke schonmal fuers angucken
-
Wenn der Server "einfriert" hat dies i.d.R. nix mit Deiner Applikation zu tun, sondern eher mit einem Treiber bzw. der Hardware...
Mach doch einen Full-Memory-Dump, dann kannst Du debuggen wer wo hängt... (oder nimm einen Remote-Debugger)
-
hm, der server haengt bisher auf 6 verschiedenen Rechnerkonfigurationen weshalb ich das mal ausgeschlossen hatte.. nen memorydump waere jedoche eine interessante idee :0)