forked from mia/Aegisub
Added stack walker
Originally committed to SVN as r92.
This commit is contained in:
parent
e41b6f9988
commit
88df752e48
4 changed files with 81 additions and 27 deletions
|
@ -19,26 +19,27 @@ Please visit http://aegisub.net to download latest version
|
||||||
- Implemented FexTracker, for automatically tracking positions on the video and placing text accordingly (Tentacle)
|
- Implemented FexTracker, for automatically tracking positions on the video and placing text accordingly (Tentacle)
|
||||||
- Drag-and-drop files onto the program no longer causes the subs to be unloaded every time, even if no subs were dropped (jfs)
|
- Drag-and-drop files onto the program no longer causes the subs to be unloaded every time, even if no subs were dropped (jfs)
|
||||||
- 1,1+2 recombining lines where 1 is a substring of 2 no longer causes incorrect behavior. 1+2,2 similarly fixed. This fix also gives more sanity-checking in the recombining (jfs)
|
- 1,1+2 recombining lines where 1 is a substring of 2 no longer causes incorrect behavior. 1+2,2 similarly fixed. This fix also gives more sanity-checking in the recombining (jfs)
|
||||||
- Replaced the subtitles grid with a custom control, which should hopefully behave and look better (AMZ)
|
- Replaced the subtitles grid with a custom control, which should hopefully behave and look better. (AMZ)
|
||||||
- Currently active line is now highlighted with a border in the grid (AMZ)
|
- Currently active line is now highlighted with a border in the grid. (AMZ)
|
||||||
- The subtitles grid can no longer receive focus (AMZ)
|
- The subtitles grid can no longer receive focus. (AMZ)
|
||||||
- Toolbar will now properly disable the Jump To buttons if more than one line is selected (AMZ)
|
- Toolbar will now properly disable the Jump To buttons if more than one line is selected. (AMZ)
|
||||||
- Fixed the toolbar "grey area" glitch (was actually a wxWidgets issue) (AMZ)
|
- Fixed the toolbar "grey area" glitch (was actually a wxWidgets issue). (AMZ)
|
||||||
- Default video zoom can now be set in config.dat and is defaulted to 100% (AMZ)
|
- Default video zoom can now be set in config.dat and is defaulted to 100%. (AMZ)
|
||||||
- Fixed crash in Translation and Styling assistants, when you attempted to move past end of file, and then play (AMZ)
|
- Fixed crash in Translation and Styling assistants, when you attempted to move past end of file, and then play. (AMZ)
|
||||||
- Fixed linked commit of times, so it will only commit both times if the other was changed (to prevent damage when editing multiple lines) (AMZ)
|
- Fixed linked commit of times, so it will only commit both times if the other was changed (to prevent damage when editing multiple lines). (AMZ)
|
||||||
- Fixed bug related to tag cycling, which would reset grid, move video and force a refresh of everything (slow, and could undo uncommited changes) (AMZ)
|
- Fixed bug related to tag cycling, which would reset grid, move video and force a refresh of everything (slow, and could undo uncommited changes). (AMZ)
|
||||||
- Fixed some bugs related to inserting overrides via the buttons over the edit box (AMZ)
|
- Fixed some bugs related to inserting overrides via the buttons over the edit box. (AMZ)
|
||||||
- Implemented Redo (AMZ)
|
- Implemented Redo. (AMZ)
|
||||||
- Fonts collector will now default collection to same folder as script (Set to "?script" on config.dat) (AMZ)
|
- Fonts collector will now default collection to same folder as script (Set to "?script" on config.dat). (AMZ)
|
||||||
- Alt+Left/Right on the video seek bar will now seek by increments of 10 frames (increment is customizeable in config.dat) (AMZ)
|
- Alt+Left/Right on the video seek bar will now seek by increments of 10 frames (increment is customizeable in config.dat). (AMZ)
|
||||||
- Added a simple audio resync method for video playback (AMZ)
|
- Added a simple audio resync method afor video playback. (AMZ)
|
||||||
- Audio timing will now apply to all selected lines, as well as active line (AMZ)
|
- Audio timing will now apply to all selected lines, as well as active line. (AMZ)
|
||||||
- Rows colliding with the currently active one will now be highlighted in grid (AMZ)
|
- Rows colliding with the currently active one will now be highlighted in grid. (AMZ)
|
||||||
- Selected comments are now highlighted in a different color (AMZ)
|
- Selected comments are now highlighted in a different color. (AMZ)
|
||||||
- Added a volume slider bar to audio mode (AMZ)
|
- Added a volume slider bar to audio mode. (AMZ)
|
||||||
- Fixed behavior of deleting and joining lines on subtitles grid (AMZ)
|
- Fixed behavior of deleting and joining lines on subtitles grid. (AMZ)
|
||||||
- Fixed some internal workings, which should make Aegisub use considerably less RAM (especially for large Karaoke files, 3x less RAM usage measured) (AMZ)
|
- Fixed some internal workings, which should make Aegisub use considerably less RAM (especially for large Karaoke files, 3x less RAM usage measured). (AMZ)
|
||||||
|
- Aegisub will now dump the stack to stack.txt when it crashes with a fatal exception, which might or might not work. (AMZ)
|
||||||
|
|
||||||
|
|
||||||
= 1.09 beta - 2006.01.16 ===========================
|
= 1.09 beta - 2006.01.16 ===========================
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
// Includes
|
// Includes
|
||||||
#include "dialog_hotkeys.h"
|
#include "dialog_hotkeys.h"
|
||||||
#include "frame_main.h"
|
#include "frame_main.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
|
||||||
///////////////
|
///////////////
|
||||||
|
|
|
@ -77,9 +77,9 @@ bool AegisubApp::OnInit() {
|
||||||
|
|
||||||
// App name
|
// App name
|
||||||
SetAppName(_T("Aegisub"));
|
SetAppName(_T("Aegisub"));
|
||||||
#ifndef _DEBUG
|
//#ifndef _DEBUG
|
||||||
wxHandleFatalExceptions(true);
|
wxHandleFatalExceptions(true);
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
// Set config file
|
// Set config file
|
||||||
GetFullPath(argv[0]);
|
GetFullPath(argv[0]);
|
||||||
|
@ -133,13 +133,16 @@ bool AegisubApp::OnInit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifndef _DEBUG
|
//#ifndef _DEBUG
|
||||||
///////////////////////
|
///////////////////////
|
||||||
// Unhandled exception
|
// Unhandled exception
|
||||||
void AegisubApp::OnUnhandledException() {
|
void AegisubApp::OnUnhandledException() {
|
||||||
|
// Attempt to recover file
|
||||||
wxFileName orig(AssFile::top->filename);
|
wxFileName orig(AssFile::top->filename);
|
||||||
wxString filename = folderName + orig.GetName() + _T(".RECOVER.ass");
|
wxString filename = folderName + orig.GetName() + _T(".RECOVER.ass");
|
||||||
AssFile::top->Save(filename,false,false);
|
AssFile::top->Save(filename,false,false);
|
||||||
|
|
||||||
|
// Inform user of crash
|
||||||
wxMessageBox(_T("Aegisub has encountered an unhandled exception error and will terminate now. The subtitles you were working on were saved to \"") + filename + _T("\", but they might be corrupt."), _T("Unhandled exception"), wxOK | wxICON_ERROR, NULL);
|
wxMessageBox(_T("Aegisub has encountered an unhandled exception error and will terminate now. The subtitles you were working on were saved to \"") + filename + _T("\", but they might be corrupt."), _T("Unhandled exception"), wxOK | wxICON_ERROR, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,12 +150,46 @@ void AegisubApp::OnUnhandledException() {
|
||||||
///////////////////
|
///////////////////
|
||||||
// Fatal exception
|
// Fatal exception
|
||||||
void AegisubApp::OnFatalException() {
|
void AegisubApp::OnFatalException() {
|
||||||
|
// Attempt to recover file
|
||||||
wxFileName orig(AssFile::top->filename);
|
wxFileName orig(AssFile::top->filename);
|
||||||
wxString filename = folderName + orig.GetName() + _T(".RECOVER.ass");
|
wxString filename = folderName + orig.GetName() + _T(".RECOVER.ass");
|
||||||
AssFile::top->Save(filename,false,false);
|
AssFile::top->Save(filename,false,false);
|
||||||
wxMessageBox(_T("Aegisub has encountered a fatal error and will terminate now. The subtitles you were working on were saved to \"") + filename + _T("\", but they have a considerable chance of being corrupt."), _T("Fatal error"), wxOK | wxICON_ERROR, NULL);
|
|
||||||
|
// Stack walk
|
||||||
|
StackWalker walker;
|
||||||
|
walker.WalkFromException();
|
||||||
|
|
||||||
|
// Inform user of crash
|
||||||
|
wxMessageBox(_T("Aegisub has encountered a fatal error and will terminate now. The subtitles you were working on were saved to \"") + filename + _T("\", but they might be corrupt."), _T("Fatal error"), wxOK | wxICON_ERROR, NULL);
|
||||||
|
}
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Stack walker
|
||||||
|
void StackWalker::OnStackFrame(const wxStackFrame &frame) {
|
||||||
|
wxString dst = wxString::Format(_T("%03i - 0x%08X: "),frame.GetLevel(),frame.GetAddress()) + frame.GetName() + _T(" on ") + frame.GetFileName() + wxString::Format(_T(":%i"),frame.GetLine());
|
||||||
|
char temp[2048];
|
||||||
|
if (file.is_open()) {
|
||||||
|
strcpy(temp,dst.mb_str());
|
||||||
|
file << temp << std::endl;
|
||||||
|
}
|
||||||
|
else wxLogMessage(dst);
|
||||||
|
}
|
||||||
|
|
||||||
|
StackWalker::StackWalker() {
|
||||||
|
file.open(wxString(AegisubApp::folderName + _T("/stack.txt")).mb_str(),std::ios::out | std::ios::app);
|
||||||
|
if (file.is_open()) {
|
||||||
|
file << std::endl << "Begining stack dump:\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StackWalker::~StackWalker() {
|
||||||
|
if (file.is_open()) {
|
||||||
|
file << "End of stack dump.\n\n";
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////
|
//////////////////
|
||||||
|
|
19
core/main.h
19
core/main.h
|
@ -41,6 +41,8 @@
|
||||||
///////////////////
|
///////////////////
|
||||||
// Include headers
|
// Include headers
|
||||||
#include <wx/wxprec.h>
|
#include <wx/wxprec.h>
|
||||||
|
#include <wx/stackwalk.h>
|
||||||
|
#include <fstream>
|
||||||
#include "aegisublocale.h"
|
#include "aegisublocale.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,14 +73,27 @@ public:
|
||||||
bool OnInit();
|
bool OnInit();
|
||||||
int OnRun();
|
int OnRun();
|
||||||
|
|
||||||
#ifndef _DEBUG
|
//#ifndef _DEBUG
|
||||||
void OnUnhandledException();
|
void OnUnhandledException();
|
||||||
void OnFatalException();
|
void OnFatalException();
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
//int OnRun();
|
//int OnRun();
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
////////////////
|
||||||
|
// Stack walker
|
||||||
|
class StackWalker: public wxStackWalker {
|
||||||
|
private:
|
||||||
|
std::ofstream file;
|
||||||
|
|
||||||
|
public:
|
||||||
|
StackWalker();
|
||||||
|
~StackWalker();
|
||||||
|
void OnStackFrame(const wxStackFrame& frame);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue