From: André Hentschel Subject: [1/3] winedbg: Make it possible to save the backtrace to a file Message-Id: <4E8CC8D2.1030503@dawncrow.de> Date: Wed, 05 Oct 2011 23:14:58 +0200 the LoadStringW stuff was taken from notepad so that we get the same translations from po files --- programs/winedbg/Makefile.in | 2 +- programs/winedbg/crashdlg.c | 42 ++++++++++++++++++++++++++++++++++++++++++ programs/winedbg/debugger.h | 1 + programs/winedbg/resource.h | 3 +++ programs/winedbg/rsrc_Da.rc | 1 + programs/winedbg/rsrc_De.rc | 3 ++- programs/winedbg/rsrc_En.rc | 3 ++- programs/winedbg/rsrc_Es.rc | 1 + programs/winedbg/rsrc_Fr.rc | 1 + programs/winedbg/rsrc_He.rc | 1 + programs/winedbg/rsrc_It.rc | 1 + programs/winedbg/rsrc_Ja.rc | 1 + programs/winedbg/rsrc_Ko.rc | 1 + programs/winedbg/rsrc_Lt.rc | 1 + programs/winedbg/rsrc_Nl.rc | 1 + programs/winedbg/rsrc_No.rc | 1 + programs/winedbg/rsrc_Pl.rc | 1 + programs/winedbg/rsrc_Pt.rc | 2 ++ programs/winedbg/rsrc_Ro.rc | 1 + programs/winedbg/rsrc_Ru.rc | 1 + programs/winedbg/rsrc_Si.rc | 1 + programs/winedbg/rsrc_Sr.rc | 2 ++ programs/winedbg/rsrc_Sv.rc | 1 + programs/winedbg/rsrc_Uk.rc | 1 + programs/winedbg/winedbg.c | 6 ++++-- programs/winedbg/winedbg.rc | 3 +++ 26 files changed, 78 insertions(+), 5 deletions(-) -- Best Regards, André Hentschel diff --git a/programs/winedbg/Makefile.in b/programs/winedbg/Makefile.in index 8170eb8..7dc404d 100644 --- a/programs/winedbg/Makefile.in +++ b/programs/winedbg/Makefile.in @@ -1,6 +1,6 @@ MODULE = winedbg.exe APPMODE = -mconsole -IMPORTS = psapi dbghelp advapi32 +IMPORTS = psapi dbghelp advapi32 comdlg32 DELAYIMPORTS = user32 gdi32 EXTRALIBS = @LIBPOLL@ EXTRADEFS = -DWINE_NO_UNICODE_MACROS diff --git a/programs/winedbg/crashdlg.c b/programs/winedbg/crashdlg.c index 4a24dcc..92f217f 100644 --- a/programs/winedbg/crashdlg.c +++ b/programs/winedbg/crashdlg.c @@ -21,6 +21,7 @@ #include "debugger.h" #include "wingdi.h" #include "winuser.h" +#include "commdlg.h" #include "psapi.h" #include "wine/debug.h" @@ -106,6 +107,43 @@ static void set_message_with_filename(HWND hDlg) SetDlgItemTextW(hDlg, IDC_STATIC_TXT1, newText); } +static BOOL save_to_file(HWND hDlg) +{ + HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtrW(hDlg, GWLP_HINSTANCE); + HANDLE hFile; + OPENFILENAMEW ofn; + static const WCHAR txt_files[] = { '*', '.', 't', 'x', 't', 0 }; + static const WCHAR all_files[] = { '*', '.', '*', 0 }; + static WCHAR file[MAX_PATH] = {'b', 'a', 'c', 'k', 't', 'r', 'a', 'c', 'e', '.', 't', 'x', 't', 0}; + static WCHAR filter[MAXIMUM_FILENAME_LENGTH]; + LPWSTR p = filter; + + LoadStringW(hInstance, IDS_TEXT_FILES, p, sizeof(filter)/sizeof(WCHAR)); + p += lstrlenW(p) + 1; + lstrcpyW(p, txt_files); + p += lstrlenW(p) + 1; + LoadStringW(hInstance, IDS_ALL_FILES, p, sizeof(filter)/sizeof(WCHAR)); + p += lstrlenW(p) + 1; + lstrcpyW(p, all_files); + p += lstrlenW(p) + 1; + *p = '\0'; + + ZeroMemory(&ofn, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + ofn.hwndOwner = hDlg; + ofn.lpstrFile = file; + ofn.lpstrFilter = filter; + ofn.nMaxFile = MAX_PATH; + + if (!GetSaveFileNameW(&ofn)) return FALSE; + hFile = CreateFileW(file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); + if (hFile == INVALID_HANDLE_VALUE) return FALSE; + else dbg_houtput = hFile; + + return TRUE; +} + static INT_PTR WINAPI DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) @@ -140,6 +178,10 @@ static INT_PTR WINAPI DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_COMMAND: switch (LOWORD(wParam)) { + case ID_SAVEREPORT: + if (save_to_file(hwnd)) + EndDialog(hwnd, LOWORD(wParam)); + return TRUE; case IDOK: case IDCANCEL: case ID_DEBUG: diff --git a/programs/winedbg/debugger.h b/programs/winedbg/debugger.h index 9c72916..d09a0e3 100644 --- a/programs/winedbg/debugger.h +++ b/programs/winedbg/debugger.h @@ -446,6 +446,7 @@ extern struct dbg_type types_find_type(unsigned long linear, const char* name, /* winedbg.c */ extern void dbg_outputW(const WCHAR* buffer, int len); extern const char* dbg_W2A(const WCHAR* buffer, unsigned len); +extern HANDLE dbg_houtput; #ifdef __GNUC__ extern int dbg_printf(const char* format, ...) __attribute__((format (printf,1,2))); #else diff --git a/programs/winedbg/resource.h b/programs/winedbg/resource.h index 11c2cb9..dea2784 100644 --- a/programs/winedbg/resource.h +++ b/programs/winedbg/resource.h @@ -30,7 +30,10 @@ #define IDM_DEBUG_POPUP 100 #define ID_DEBUG 200 +#define ID_SAVEREPORT 201 #define IDS_AUTO_CAPTION 16 #define IDS_INVALID_PARAMS 17 #define IDS_UNIDENTIFIED 18 +#define IDS_ALL_FILES 19 +#define IDS_TEXT_FILES 20 diff --git a/programs/winedbg/rsrc_Da.rc b/programs/winedbg/rsrc_Da.rc index e69dedc..e7c33c0 100644 --- a/programs/winedbg/rsrc_Da.rc +++ b/programs/winedbg/rsrc_Da.rc @@ -38,5 +38,6 @@ BEGIN Du kan evt. tjekke http://appdb.winehq.org for tips til at køre dette program.\n\n\ Hvis dette problem ikke er til stede under Windows, og ikke har været rapporteret \ endnu, kan du indberette det til http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Luk", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_De.rc b/programs/winedbg/rsrc_De.rc index 45af616..3961625 100644 --- a/programs/winedbg/rsrc_De.rc +++ b/programs/winedbg/rsrc_De.rc @@ -38,5 +38,6 @@ BEGIN der Anwendung einholen.\n\n\ Tritt dieses Problem unter Windows nicht auf und wurde es noch nicht \ gemeldet, können Sie unter http://bugs.winehq.org einen Eintrag hinterlassen.",IDC_STATIC_TXT2,27,60,224,100 - DEFPUSHBUTTON "Schließen", IDOK, 205, 151, 60, 16, WS_TABSTOP + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 + DEFPUSHBUTTON "S&chließen", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_En.rc b/programs/winedbg/rsrc_En.rc index 383e320..b16f612 100644 --- a/programs/winedbg/rsrc_En.rc +++ b/programs/winedbg/rsrc_En.rc @@ -36,5 +36,6 @@ BEGIN this application.\n\n\ If this problem is not present under Windows and has not been reported \ yet, you can report it at http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 - DEFPUSHBUTTON "Close", IDOK, 205, 151, 60, 16, WS_TABSTOP + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 + DEFPUSHBUTTON "&Close", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Es.rc b/programs/winedbg/rsrc_Es.rc index 465d1de..a6d3da7 100644 --- a/programs/winedbg/rsrc_Es.rc +++ b/programs/winedbg/rsrc_Es.rc @@ -39,5 +39,6 @@ BEGIN esta aplicación.\n\n\ Si este problema no esta presente en Windows y no ha sido reportado \ todavía, lo puedes reportar en http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Cerrar", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Fr.rc b/programs/winedbg/rsrc_Fr.rc index 9132611..f231a7b 100644 --- a/programs/winedbg/rsrc_Fr.rc +++ b/programs/winedbg/rsrc_Fr.rc @@ -39,5 +39,6 @@ BEGIN l'exécution de cette application.\n\n\ Si ce problème ne se produit pas sous Windows et n'a pas déjà été rapporté, \ vous pouvez le rapporter sur http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Fermer", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_He.rc b/programs/winedbg/rsrc_He.rc index 0e7f857..dd12bd9 100644 --- a/programs/winedbg/rsrc_He.rc +++ b/programs/winedbg/rsrc_He.rc @@ -40,5 +40,6 @@ BEGIN יישום זה.\n\n\ אם תקלה זו אינה קיימת בעת הרצת Windows ולא דווח עליה עדיין, \ ניתן לדווח עליה בכתובת http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "סגירה", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_It.rc b/programs/winedbg/rsrc_It.rc index 82d360e..b84166f 100644 --- a/programs/winedbg/rsrc_It.rc +++ b/programs/winedbg/rsrc_It.rc @@ -39,5 +39,6 @@ BEGIN questa applicazione.\n\n\ Se questo problema non è presente sotto Windows e non è stato ancora segnalato, \ puoi segnalarlo su http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Chiudi", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Ja.rc b/programs/winedbg/rsrc_Ja.rc index 80b5454..f69614a 100644 --- a/programs/winedbg/rsrc_Ja.rc +++ b/programs/winedbg/rsrc_Ja.rc @@ -40,5 +40,6 @@ BEGIN この問題が Windows 上で発生することがなく、まだ報告されていない場合は \ http://bugs.winehq.org でこの問題を報告できます。", IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "閉じる", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Ko.rc b/programs/winedbg/rsrc_Ko.rc index b9a4f60..79a2f5d 100644 --- a/programs/winedbg/rsrc_Ko.rc +++ b/programs/winedbg/rsrc_Ko.rc @@ -39,5 +39,6 @@ BEGIN .\n\n\ 만약 이 문제가 윈도우에서는 존재하지 않고, 아직 버그로 보고되지 않았으면 \ , 당신은 http://bugs.winehq.org에 버그로 보고할 수 있습니다.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "닫기", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Lt.rc b/programs/winedbg/rsrc_Lt.rc index d088697..9ab736a 100644 --- a/programs/winedbg/rsrc_Lt.rc +++ b/programs/winedbg/rsrc_Lt.rc @@ -39,5 +39,6 @@ BEGIN programos vykdymą.\n\n\ Jei šios problemos nėra Windows sistemoje ir apie ją dar nebuvo pranešta, \ galite pranešti http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Užverti", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Nl.rc b/programs/winedbg/rsrc_Nl.rc index b3e6baf..6e4287b 100644 --- a/programs/winedbg/rsrc_Nl.rc +++ b/programs/winedbg/rsrc_Nl.rc @@ -36,5 +36,6 @@ BEGIN van dit programma.\n\n\ Als dit probleem niet optreedt onder Windows en nog niet is gerapporteerd, \ dan kunt u het rapporteren op http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Sluiten", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_No.rc b/programs/winedbg/rsrc_No.rc index 5cee7aa..081c922 100644 --- a/programs/winedbg/rsrc_No.rc +++ b/programs/winedbg/rsrc_No.rc @@ -39,5 +39,6 @@ BEGIN dette programmet.\n\n\ Du kan rapportere feilen på http://bugs.winehq.org hvis problemet \ ikke oppstår i Windows.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Lukk", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Pl.rc b/programs/winedbg/rsrc_Pl.rc index a70fd62..380416b 100644 --- a/programs/winedbg/rsrc_Pl.rc +++ b/programs/winedbg/rsrc_Pl.rc @@ -36,5 +36,6 @@ BEGIN tej aplikacji.\n\n\ Jeeli problem ten nie wystpuje pod Windowsem i nie zosta jeszcze zgoszony \ to moesz poinformowa o tym pod adresem http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Zamknij", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Pt.rc b/programs/winedbg/rsrc_Pt.rc index 19b11b7..04dafc4 100644 --- a/programs/winedbg/rsrc_Pt.rc +++ b/programs/winedbg/rsrc_Pt.rc @@ -39,6 +39,7 @@ BEGIN esta aplicativo.\n\n\ Se este problema não existe no Windows e não foi relatado ainda \ você pode fazê-lo em http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Fechar", IDOK, 205, 151, 60, 16, WS_TABSTOP END @@ -58,5 +59,6 @@ BEGIN esta aplicação.\n\n\ Se este problema não existe no Windows e não foi reportado ainda \ você pode fazê-lo em http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Fechar", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Ro.rc b/programs/winedbg/rsrc_Ro.rc index 5377147..2309fb1 100644 --- a/programs/winedbg/rsrc_Ro.rc +++ b/programs/winedbg/rsrc_Ro.rc @@ -39,5 +39,6 @@ BEGIN Dacă această problemă nu este prezentă în Windows și nu a \ fost raportată încă, o puteți raporta la \ http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Închide", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Ru.rc b/programs/winedbg/rsrc_Ru.rc index bddc8d4..67cce3b 100644 --- a/programs/winedbg/rsrc_Ru.rc +++ b/programs/winedbg/rsrc_Ru.rc @@ -39,5 +39,6 @@ BEGIN этой программы.\n\n\ Если эта проблема не присутствует под Windows и ещё не была зарегистрирована, \ вы можете сообщить о ней на http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Закрыть", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Si.rc b/programs/winedbg/rsrc_Si.rc index 58112bb..8bc1d66 100644 --- a/programs/winedbg/rsrc_Si.rc +++ b/programs/winedbg/rsrc_Si.rc @@ -38,5 +38,6 @@ BEGIN te aplikacije.\n\n\ Če ta težava ni prisotna na Windows sistemu in še ni bila prijavljena \ na http://bugs.winehq.org, prosim napišite prijavo.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Zapri", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Sr.rc b/programs/winedbg/rsrc_Sr.rc index ec809ff..cb22711 100644 --- a/programs/winedbg/rsrc_Sr.rc +++ b/programs/winedbg/rsrc_Sr.rc @@ -40,6 +40,7 @@ BEGIN овог програма.\n\n\ Ако овај проблем није присутан под Windows-ом и још увек није \ пријављен, пријавите га на http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Затвори", IDOK, 205, 151, 60, 16, WS_TABSTOP END @@ -59,5 +60,6 @@ BEGIN ovog programa.\n\n\ Ako ovaj problem nije prisutan pod Windows-om i još uvek nije \ prijavljen, prijavite ga na http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Zatvori", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Sv.rc b/programs/winedbg/rsrc_Sv.rc index 10a5f8f..5312e0a 100644 --- a/programs/winedbg/rsrc_Sv.rc +++ b/programs/winedbg/rsrc_Sv.rc @@ -39,5 +39,6 @@ BEGIN detta program.\n\n\ Om problemet inte uppstår i Windows och ännu inte har rapporterats \ så kan du rapportera det på http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Stäng", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/rsrc_Uk.rc b/programs/winedbg/rsrc_Uk.rc index d2e053e..c469882 100644 --- a/programs/winedbg/rsrc_Uk.rc +++ b/programs/winedbg/rsrc_Uk.rc @@ -40,5 +40,6 @@ BEGIN запуску цієї програми.\n\n\ Якщо ця проблема не присутня під Windows і ще не була зареєстрована, \ ви можете повідомити про неї на http://bugs.winehq.org.",IDC_STATIC_TXT2,27,60,224,100 + PUSHBUTTON "&Save Report", ID_SAVEREPORT, 140, 151, 60, 16 DEFPUSHBUTTON "Закрити", IDOK, 205, 151, 60, 16, WS_TABSTOP END diff --git a/programs/winedbg/winedbg.c b/programs/winedbg/winedbg.c index a3a9f16..0a08109 100644 --- a/programs/winedbg/winedbg.c +++ b/programs/winedbg/winedbg.c @@ -88,12 +88,12 @@ struct dbg_thread* dbg_curr_thread = NULL; DWORD_PTR dbg_curr_tid = 0; DWORD_PTR dbg_curr_pid = 0; CONTEXT dbg_context; +HANDLE dbg_houtput; BOOL dbg_interactiveP = FALSE; static struct list dbg_process_list = LIST_INIT(dbg_process_list); struct dbg_internal_var dbg_internal_vars[DBG_IV_LAST]; -static HANDLE dbg_houtput; static void dbg_outputA(const char* buffer, int len) { @@ -675,7 +675,9 @@ int main(int argc, char** argv) dbg_houtput = GetStdHandle(STD_ERROR_HANDLE); switch (dbg_active_auto(argc, argv)) { - case start_ok: return 0; + case start_ok: + CloseHandle(dbg_houtput); + return 0; case start_error_parse: return dbg_winedbg_usage(FALSE); case start_error_init: return -1; } diff --git a/programs/winedbg/winedbg.rc b/programs/winedbg/winedbg.rc index 97740a6..1fac3d1 100644 --- a/programs/winedbg/winedbg.rc +++ b/programs/winedbg/winedbg.rc @@ -35,4 +35,7 @@ BEGIN IDS_AUTO_CAPTION "Wine program crash" IDS_INVALID_PARAMS "Internal errors - invalid parameters received" IDS_UNIDENTIFIED "(unidentified)" + + IDS_TEXT_FILES "Text files (*.txt)" + IDS_ALL_FILES "All files (*.*)" END