adplus使用提问

WecanHuang 2009-11-09 02:29:12
如何使用adplus的hang mode生成minidump文件
我试了下
无论我加上MiniOnSecond、NoDumpOnFirst参数
还是一起加上
都会生成full dump
而这个full dump又非常大
不利于维护
我只想知道栈信息
mini dump足矣
有人知道怎么做吗
...全文
139 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
好的
谢谢

你的名字不是写着“写轮兔”吗
MoXiaoRab 2009-11-09
  • 打赏
  • 举报
回复
我不是兔子。。。

你看好我的代码,不是崩溃了才生成,而是在你想生成的时候生成
_JeffreyWu 2009-11-09
  • 打赏
  • 举报
回复
MARK ,学习了.
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
谢谢兔子
你说的是崩溃事后调试
而我想要的是进行时调试
因为有时候没有出现崩溃
但是发现程序有问题
MoXiaoRab 2009-11-09
  • 打赏
  • 举报
回复
还有种BT的方法


void CreateMiniDump(struct _EXCEPTION_POINTERS* ExceptionInfo)
{
HMODULE hModule = ::LoadLibrary(".\\dbghelp.dll");
if( NULL == hModule )
return;
MiniDumpWriteDump_PTR pfnMiniDumpWriteDump = (MiniDumpWriteDump_PTR)GetProcAddress(hModule, "MiniDumpWriteDump");
if( NULL == pfnMiniDumpWriteDump )
{
FreeLibrary(hModule);
return;
}
char szFile[MAX_PATH+1] = {0};
_snprintf(szFile, MAX_PATH, ".\\cc_%u.dmp", time(NULL));
HANDLE hFile = CreateFile(szFile, GENERIC_ALL, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
if( INVALID_HANDLE_VALUE == hFile )
{
FreeLibrary(hModule);
return;
}
MINIDUMP_EXCEPTION_INFORMATION mei;
mei.ThreadId = GetCurrentThreadId();
mei.ClientPointers = TRUE;
mei.ExceptionPointers = ExceptionInfo;

// (*pfnMiniDumpWriteDump)(GetCurrentProcess(), GetCurrentProcessId(), hFile,
// MiniDumpWithFullMemory,
// &mei, NULL, NULL);
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hFile,
MiniDumpWithFullMemory,
&mei, NULL, NULL);
CloseHandle(hFile);
FreeLibrary(hModule);
}
struct _EXCEPTION_POINTERS gEx;
DWORD FilterFunction(struct _EXCEPTION_POINTERS* ex)
{
memcpy(&gEx,ex,sizeof(_EXCEPTION_POINTERS));
return 1;
}
void Dmp()
{
__try
{

// try block
throw 12;

}
__except ( FilterFunction(GetExceptionInformation()) )
{
// exception handler block
CreateMiniDump(&gEx);

}
}


adplus没用过
MoXiaoRab 2009-11-09
  • 打赏
  • 举报
回复
google breakpad 试试

Example


#include <cstdio>
#include "client/windows/handler/exception_handler.h"

namespace {

static bool callback(const wchar_t *dump_path, const wchar_t *id,
void *context, EXCEPTION_POINTERS *exinfo,
MDRawAssertionInfo *assertion,
bool succeeded) {
if (succeeded) {
printf("dump guid is %ws\n", id);
} else {
printf("dump failed\n");
}
fflush(stdout);

return succeeded;
}

static void CrashFunction() {
int *i = reinterpret_cast<int*>(0x45);
*i = 5; // crash!
}

} // namespace

int main(int argc, char **argv) {
google_breakpad::ExceptionHandler eh(
L".", NULL, callback, NULL,
google_breakpad::ExceptionHandler::HANDLER_ALL);
CrashFunction();
printf("did not crash?\n");
return 0;
}
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
兔子好
我不是想在程序出错的时候生成dump啊
我希望在任何时候都能生成
这样adplus就比医生有优势了
MoXiaoRab 2009-11-09
  • 打赏
  • 举报
回复
干嘛用adplus,用系统自带的华生医生就好了。drwtsn32.exe -i将注册为默认的调试器就行了,当程序出错时自动生成Dump
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
没人顶????
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
另外
为什么我回自己的帖都要重新输入账号密码?
如果是我的问题
怎么解决?
如果是csdn的问题
强烈鄙视下
WecanHuang 2009-11-09
  • 打赏
  • 举报
回复
在线等
分不够可以加

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧