| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: debugrpt.h
- // Purpose: interface of wxDebugReport*
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxDebugReportPreview
- This class presents the debug report to the user and allows him to veto
- report entirely or remove some parts of it. Although not mandatory, using
- this class is strongly recommended as data included in the debug report
- might contain sensitive private information and the user should be notified
- about it as well as having a possibility to examine the data which had been
- gathered to check whether this is effectively the case and discard the
- debug report if it is.
- wxDebugReportPreview is an abstract base class, currently the only concrete
- class deriving from it is wxDebugReportPreviewStd.
- @library{wxqa}
- @category{debugging}
- */
- class wxDebugReportPreview
- {
- public:
- /**
- Default constructor.
- */
- wxDebugReportPreview();
- /**
- Destructor is trivial as well but should be virtual for a base class.
- */
- virtual ~wxDebugReportPreview();
- /**
- Present the report to the user and allow him to modify it by removing
- some or all of the files and, potentially, adding some notes.
- @return @true if the report should be processed or @false if the user
- chose to cancel report generation or removed all files from
- it.
- */
- virtual bool Show(wxDebugReport& dbgrpt) const = 0;
- };
- /**
- @class wxDebugReportCompress
- wxDebugReportCompress is a wxDebugReport which compresses all the files in
- this debug report into a single ZIP file in its wxDebugReport::Process()
- function.
- @library{wxqa}
- @category{debugging}
- */
- class wxDebugReportCompress : public wxDebugReport
- {
- public:
- /**
- Default constructor does nothing special.
- */
- wxDebugReportCompress();
- /**
- Set the directory where the debug report should be generated.
- By default, the debug report is generated under user temporary files
- directory. This is usually fine if it is meant to be processed in some
- way (e.g. automatically uploaded to a remote server) but if the user is
- asked to manually upload or send the report, it may be more convenient
- to generate it in e.g. the users home directory and this function
- allows to do this.
- Notice that it should be called before wxDebugReport::Process() or it
- has no effect.
- @param dir
- The full path to an existing directory where the debug report file
- should be generated.
- @since 2.9.1
- */
- void SetCompressedFileDirectory(const wxString& dir);
- /**
- Set the base name of the generated debug report file.
- This function is similar to SetCompressedFileDirectory() but allows to
- change the base name of the file. Notice that the file extension will
- always be @c .zip.
- By default, a unique name constructed from wxApp::GetAppName(), the
- current process id and the current date and time is used.
- @param name
- The base name (i.e. without extension) of the file.
- @since 2.9.1
- */
- void SetCompressedFileBaseName(const wxString& name);
- /**
- Returns the full path of the compressed file (empty if creation
- failed).
- */
- const wxString& GetCompressedFileName() const;
- };
- /**
- @class wxDebugReport
- wxDebugReport is used to generate a debug report, containing information
- about the program current state. It is usually used from
- wxApp::OnFatalException() as shown in the @ref page_samples_debugrpt.
- A wxDebugReport object contains one or more files. A few of them can be
- created by the class itself but more can be created from the outside and
- then added to the report. Also note that several virtual functions may be
- overridden to further customize the class behaviour.
- Once a report is fully assembled, it can simply be left in the temporary
- directory so that the user can email it to the developers (in which case
- you should still use wxDebugReportCompress to compress it in a single file)
- or uploaded to a Web server using wxDebugReportUpload (setting up the Web
- server to accept uploads is your responsibility, of course). Other
- handlers, for example for automatically emailing the report, can be defined
- as well but are not currently included in wxWidgets.
- A typical usage example:
- @code
- wxDebugReport report;
- wxDebugReportPreviewStd preview;
- report.AddCurrentContext(); // could also use AddAll()
- report.AddCurrentDump(); // to do both at once
- if ( preview.Show(report) )
- report.Process();
- @endcode
- @library{wxqa}
- @category{debugging}
- */
- class wxDebugReport
- {
- public:
- /**
- This enum is used for functions that report either the current state or
- the state during the last (fatal) exception.
- */
- enum Context {
- Context_Current,
- Context_Exception
- };
- /**
- The constructor creates a temporary directory where the files that will
- be included in the report are created. Use IsOk() to check for errors.
- */
- wxDebugReport();
- /**
- The destructor normally destroys the temporary directory created in the
- constructor with all the files it contains. Call Reset() to prevent
- this from happening.
- */
- virtual ~wxDebugReport();
- /**
- Adds all available information to the report. Currently this includes a
- text (XML) file describing the process context and, under Win32, a
- minidump file.
- */
- void AddAll(Context context = Context_Exception);
- /**
- Add an XML file containing the current or exception context and the
- stack trace.
- */
- virtual bool AddContext(Context ctx);
- /**
- The same as calling AddContext(Context_Current).
- */
- bool AddCurrentContext();
- /**
- The same as calling AddDump(Context_Current).
- */
- bool AddCurrentDump();
- /**
- Adds the minidump file to the debug report.
- Minidumps are only available under recent Win32 versions
- (@c dbghlp32.dll can be installed under older systems to make minidumps
- available).
- */
- virtual bool AddDump(Context ctx);
- /**
- The same as calling AddContext(Context_Exception).
- */
- bool AddExceptionContext();
- /**
- The same as calling AddDump(Context_Exception).
- */
- bool AddExceptionDump();
- /**
- Add another file to the report. If @a filename is an absolute path, it
- is copied to a file in the debug report directory with the same name.
- Otherwise the file will be searched in the temporary directory returned
- by GetDirectory().
-
- The argument @a description only exists to be displayed to the user in
- the report summary shown by wxDebugReportPreview.
- @see GetDirectory(), AddText()
- */
- virtual void AddFile(const wxString& filename, const wxString& description);
- /**
- This is a convenient wrapper around AddFile(). It creates the file with
- the given @a name and writes @a text to it, then adds the file to the
- report. The @a filename shouldn't contain the path.
- @return @true if file could be added successfully, @false if an IO
- error occurred.
- */
- bool AddText(const wxString& filename, const wxString& text,
- const wxString& description);
- /**
- This method should be used to construct the full name of the files
- which you wish to add to the report using AddFile().
- @return The name of the temporary directory used for the files in this
- report.
- */
- const wxString& GetDirectory() const;
- /**
- Retrieves the name (relative to GetDirectory()) and the description of
- the file with the given index. If @a n is greater than or equal to the
- number of files, then @false is returned.
- */
- bool GetFile(size_t n, wxString* name, wxString* desc) const;
- /**
- Gets the current number files in this report.
- */
- size_t GetFilesCount() const;
- /**
- Gets the name used as a base name for various files, by default
- wxApp::GetAppName() is used.
- */
- virtual wxString GetReportName() const;
- /**
- Returns @true if the object was successfully initialized. If this
- method returns @false the report can't be used.
- */
- bool IsOk() const;
- /**
- Processes this report: the base class simply notifies the user that the
- report has been generated. This is usually not enough -- instead you
- should override this method to do something more useful to you.
- */
- bool Process();
- /**
- Removes the file from report: this is used by wxDebugReportPreview to
- allow the user to remove files potentially containing private
- information from the report.
- */
- void RemoveFile(const wxString& name);
- /**
- Resets the directory name we use. The object can't be used any more
- after this as it becomes uninitialized and invalid.
- */
- void Reset();
- protected:
- /**
- This function may be overridden to add arbitrary custom context to the
- XML context file created by AddContext(). By default, it does nothing.
- */
- virtual void DoAddCustomContext(wxXmlNode* nodeRoot);
- /**
- This function may be overridden to modify the contents of the exception
- tag in the XML context file.
- */
- virtual bool DoAddExceptionInfo(wxXmlNode* nodeContext);
- /**
- This function may be overridden to modify the contents of the modules
- tag in the XML context file.
- */
- virtual bool DoAddLoadedModules(wxXmlNode* nodeModules);
- /**
- This function may be overridden to modify the contents of the system
- tag in the XML context file.
- */
- virtual bool DoAddSystemInfo(wxXmlNode* nodeSystemInfo);
- };
- /**
- @class wxDebugReportPreviewStd
- wxDebugReportPreviewStd is a standard debug report preview window. It
- displays a dialog allowing the user to examine the contents of a debug
- report, remove files from and add notes to it.
- @library{wxqa}
- @category{debugging}
- */
- class wxDebugReportPreviewStd : public wxDebugReportPreview
- {
- public:
- /**
- Trivial default constructor.
- */
- wxDebugReportPreviewStd();
- /**
- Shows the dialog.
- @see wxDebugReportPreview::Show()
- */
- bool Show(wxDebugReport& dbgrpt) const;
- };
- /**
- @class wxDebugReportUpload
- This class is used to upload a compressed file using HTTP POST request. As
- this class derives from wxDebugReportCompress, before upload the report is
- compressed in a single ZIP file.
- @library{wxqa}
- @category{debugging}
- */
- class wxDebugReportUpload : public wxDebugReportCompress
- {
- public:
- /**
- This class will upload the compressed file created by its base class to
- an HTML multipart/form-data form at the specified address. The @a url
- is the upload page address, @a input is the name of the @c "type=file"
- control on the form used for the file name and @a action is the value
- of the form action field. The report is uploaded using the @e curl
- program which should be available, the @e curl parameter may be used to
- specify the full path to it.
- */
- wxDebugReportUpload(const wxString& url, const wxString& input,
- const wxString& action,
- const wxString& curl = "curl");
- protected:
- /**
- This function may be overridden in a derived class to show the output
- from curl: this may be an HTML page or anything else that the server
- returned. Value returned by this function becomes the return value of
- wxDebugReport::Process().
- */
- virtual bool OnServerReply(const wxArrayString& reply);
- };
|