#include "wx/app.h"
#include "wx/log.h"
#include "wx/intl.h"
+ #include "wx/utils.h"
#endif // WX_PRECOMP
#if wxUSE_DEBUGREPORT
#if wxUSE_ZIPSTREAM
#include "wx/wfstream.h"
#include "wx/zipstrm.h"
+ #include "wx/ptr_scpd.h"
#endif // wxUSE_ZIPSTREAM
-#if wxUSE_STACKWALKER
+WX_CHECK_BUILD_OPTIONS("wxQA")
// ----------------------------------------------------------------------------
// XmlStackWalker: stack walker specialization which dumps stack in XML
// ----------------------------------------------------------------------------
+#if wxUSE_STACKWALKER
+
class XmlStackWalker : public wxStackWalker
{
public:
wxDebugReport::wxDebugReport()
{
// get a temporary directory name
- wxString appname(wxTheApp ? wxTheApp->GetAppName() : _T("wx"));
+ wxString appname = GetReportName();
// we can't use CreateTempFileName() because it creates a file, not a
// directory, so do our best to create a unique name ourselves
if ( !m_dir.empty() )
{
- if ( wxRmDir(m_dir) != 0 )
+ // Temp fix: what should this be? eVC++ doesn't like wxRmDir
+#ifdef __WXWINCE__
+ if ( wxRmdir(m_dir.fn_str()) != 0 )
+#else
+ if ( wxRmDir(m_dir.fn_str()) != 0 )
+#endif
{
wxLogSysError(_("Failed to clean up debug report directory \"%s\""),
m_dir.c_str());
wxString wxDebugReport::GetReportName() const
{
- return wxString(wxTheApp ? wxTheApp->GetAppName() : _T("wx"));
+ if(wxTheApp)
+ return wxTheApp->GetAppName();
+
+ return _T("wx");
}
void wxDebugReport::AddFile(const wxString& name, const wxString& description)
#if wxUSE_CRASHREPORT
AddDump(context);
#endif // wxUSE_CRASHREPORT
+
+#if !wxUSE_STACKWALKER && !wxUSE_CRASHREPORT
+ wxUnusedVar(context);
+#endif
}
// ----------------------------------------------------------------------------
if ( !path.empty() )
nodeModule->AddProperty(_T("path"), path);
- void *addr;
- size_t len;
+ void *addr = NULL;
+ size_t len = 0;
if ( info.GetAddress(&addr, &len) )
{
HexProperty(nodeModule, _T("address"), (unsigned long)addr);
wxXmlNode *nodeRoot = new wxXmlNode(wxXML_ELEMENT_NODE, _T("report"));
xmldoc.SetRoot(nodeRoot);
nodeRoot->AddProperty(_T("version"), _T("1.0"));
- nodeRoot->AddProperty(_T("kind"), ctx == Context_Curent ? _T("user")
- : _T("exception"));
+ nodeRoot->AddProperty(_T("kind"), ctx == Context_Current ? _T("user")
+ : _T("exception"));
// add system information
wxXmlNode *nodeSystemInfo = new wxXmlNode(wxXML_ELEMENT_NODE, _T("system"));
{
sw.WalkFromException();
}
- else // Context_Curent
+ else // Context_Current
{
sw.Walk();
}
#if wxUSE_ZIPSTREAM
+wxDECLARE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+wxDEFINE_SCOPED_PTR(wxZipOutputStream, wxDbgZipOutputStreamPtr)
+
// ----------------------------------------------------------------------------
// wxDebugReportCompress
// ----------------------------------------------------------------------------
// create the streams
wxFileName fn(GetDirectory(), GetReportName(), _T("zip"));
wxFFileOutputStream os(fn.GetFullPath(), _T("wb"));
- wxZipOutputStream zos(os, 9);
+ wxDbgZipOutputStreamPtr zos(new wxZipOutputStream(os, 9));
// add all files to the ZIP one
wxString name, desc;
wxZipEntry *ze = new wxZipEntry(name);
ze->SetComment(desc);
- if ( !zos.PutNextEntry(ze) )
+ if ( !zos->PutNextEntry(ze) )
return false;
- wxFFileInputStream is(wxFileName(fn.GetPath(), name).GetFullPath());
- if ( !is.IsOk() || !zos.Write(is).IsOk() )
+ wxFileName filename(fn.GetPath(), name);
+ wxFFileInputStream is(filename.GetFullPath());
+ if ( !is.IsOk() || !zos->Write(is).IsOk() )
return false;
}
- if ( !zos.Close() )
+ if ( !zos->Close() )
return false;
m_zipfile = fn.GetFullPath();