I have written a handy class that allows to use the DbgHelp.dll MiniDumpWriteDump function in Borland C++ Builder 5 environment. Feel free to use it:
//DLL wrapper class
#define CALLING_CONVENTION __stdcall
class CDbgHelpDLL
{
public:
CDbgHelpDLL()
{
m_hDLL = ::LoadLibraryA("dbghelp.dll");
if(NULL != m_hDLL)
{
//CodeSite API
DLLMiniDumpWriteDump = (BOOL (CALLING_CONVENTION *)
(HANDLE,
DWORD,
HANDLE,
MINIDUMP_TYPE,
CONST PMINIDUMP_EXCEPTION_INFORMATION,
CONST PMINIDUMP_USER_STREAM_INFORMATION,
CONST PMINIDUMP_CALLBACK_INFORMATION))
::GetProcAddress(m_hDLL, "MiniDumpWriteDump");
}
else
{
DLLMiniDumpWriteDump = NULL;
}
}
~CDbgHelpDLL()
{
if(NULL != m_hDLL)
{
::FreeLibrary(m_hDLL);
m_hDLL = NULL;
}
}
BOOL MiniDumpWriteDump(
HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
PMINIDUMP_CALLBACK_INFORMATION CallbackParam
)
{
if (DLLMiniDumpWriteDump){
return DLLMiniDumpWriteDump( hProcess,
ProcessId,
hFile,
DumpType,
ExceptionParam,
UserStreamParam,
CallbackParam);
}
else
{
return FALSE;
}
}
private:
HINSTANCE m_hDLL;
//DLL functions
BOOL (CALLING_CONVENTION *DLLMiniDumpWriteDump)( HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
CONST PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
CONST PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
};
In order to compile with dbghelp.h from ms, you need to "patch" it:
before // for those without specstrings.h add:
//CBuilder
#ifdef __BORLANDC__
using namespace System;
#endif
Change this:
#ifdef __BORLANDC__
enum hdEnums {
#else
typedef enum {
#endif
hdBase = 0, // root directory for dbghelp
hdSym, // where symbols are stored
hdSrc, // where source is stored
hdMax // end marker
};
and this:
#ifdef __BORLANDC__
enum sfEnums {
#else
typedef enum {
#endif
sfImage = 0,
sfDbg,
sfPdb,
sfMpd,
sfMax
};
and here we go ...
Happy crash dumping with borland ;-)
Thursday, November 17, 2005
Using DbgHelp.dll MiniDumpWriteDump function with Borland C++ Builder 5
Wednesday, November 16, 2005
Using WinDbg with Borland
I'm using this tool and I must say it's great! Of course you just get the info that is there in the map file. Therefore no info about local variables. But with a bit knowledge, you can oracle those from the stack memory :-)
Ms-dbg brings microsoft-compatible debugging to Borland. With "map2dbg" you can convert from a borland MAP file to a ms DBG file. This lets you use standard debugging tools like DrWatson and imagehlp.dll. For instance, in "calldemo" we use it to generate a callstack of the current program. Helpful for debugging clients a thousand miles away.
Source:
http://www.wischik.com/lu/programmer/
Application debugging in a production environment (Hans De Smaele)
Very, very cool article:
http://www.microsoft.com/belux/nl/msdn/community/articles/feb05_applicationdebugging.mspx
Application debugging in a production environment
February 2005
- Debugging and instrumenting scripts
- Using tools to do first analysis (FileMon, RegMon, Dependency Walker, ...)
- A step-by-step guide for using the WinDbg debugger
- Symbol and symbol servers
- Calling conventions
- Stack tracing and related subjects
- Debugging of "free builds"
- Creation and debugging of "dump files"
- Working with ILDASM and ILASM
- Other useful WinDbg extensions
- Remote debugging
- Debug scenarios
Tuesday, November 15, 2005
Debugging Tools for Windows - Overview
The root page from MS:
http://www.microsoft.com/whdc/devtools/debugging/default.mspx