多年不玩Win32编程了,问一个自制调试工具的问题

bluebohe 2008-06-18 12:09:05
主程序A
A程序的调试工具B
程序A中有一个函数debug_callStack(),用来输出本程序相关的调试信息

我先运行程序B,然后用B运行A
当A死机的时候,在B中调用A的debug_callStack()函数,查看A死机时刻的输出信息

调试工具B应该如何实现?
...全文
190 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2008-06-19
  • 打赏
  • 举报
回复
不知道大家有没有这样用过,VC调试程序时,程序死机,我们可以在VC监视栏运行一个程序内部的一个函数
KeSummer 2008-06-19
  • 打赏
  • 举报
回复
应该让A程序主动把调试信息发送出来,而不是让B程序被动采集。。

1:首先要知道A死机(LZ的意思应该是程序死掉吧),用SetUnhandledExceptionFilter可以捕获异常错误。
2:在UnhandledExceptionFilter里面调用debug_callStack,这时候,随便使用什么进程通信方式,把数据发送给进程B

如果A是B以调试方式启动的话,那么当A死掉的时候,调试器(B进程)可以捕获到,这时必须起一个远程线程去调用那个函数。
yjgx007 2008-06-19
  • 打赏
  • 举报
回复
如果是异常, 比较好捕获.
homesos 2008-06-19
  • 打赏
  • 举报
回复
MiniDumpWriteDump Function
Writes user-mode minidump information to the specified file.
http://msdn.microsoft.com/en-us/library/ms680360.aspx
rageliu 2008-06-19
  • 打赏
  • 举报
回复
进入程序领空是可以调用它的函数,不过未尝试过程序死机的情况
rageliu 2008-06-18
  • 打赏
  • 举报
回复
由b启动a,和外挂方式差不多,hook等进入a的进程空间后通过汇编代码调用

__asm
{
pushad ;保存现场环境
push... ;压参
call... ;debug_callStack地址
pop... ;恢复堆栈
}

注意debug_callStack的调用方式,如果是类的非静态成员函数,也就是__thiscall,可能还需要通过ecx传递this指针
sking2008 2008-06-18
  • 打赏
  • 举报
回复
不清楚~~~~~~~~帮顶!
cnzdgs 2008-06-18
  • 打赏
  • 举报
回复
没理解清楚debug_callStack的含义。
可以用CreateRemoteThread创建一个远程线程来调用。
菜牛 2008-06-18
  • 打赏
  • 举报
回复
怎么判断A死机?死机能否响应?从A导出函数还是接口?
闪破风浪 2008-06-18
  • 打赏
  • 举报
回复
高手都不行,那我只能不懂帮顶了
hyblusea 2008-06-18
  • 打赏
  • 举报
回复
好难....学习了....
老夏Max 2008-06-18
  • 打赏
  • 举报
回复
A死机的概念是什么?
izardMan 2008-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 scq2099yt 的回复:]
高手都不行,那我只能不懂帮顶了
[/Quote]
龙凤呈祥焱 2008-06-18
  • 打赏
  • 举报
回复
如果用WINDBG可以办到,
那就高度WINDOWS的调试API来完成就可以了.
WINDBG的用户层调试部分都是调用这些API来完成的.
内核部分当然不是....
  • 打赏
  • 举报
回复
A进程不退出的话,用WinDbg可以获得到
jyh_baoding 2008-06-18
  • 打赏
  • 举报
回复
这样的信息只能自己写,用监视进程监视应用进程的内存变化!!!
ouyh12345 2008-06-18
  • 打赏
  • 举报
回复
开源工具CrashRpt,能捕捉崩溃,记录现场,并给个机会给崩溃的程序来处理一些东西
在codeproject上
homesos 2008-06-18
  • 打赏
  • 举报
回复
程序A已经死了
能做这些事情吗?如接受其它程序的调用或主动发信息给其它程序。

所谓的死是僵死还是异常宕机?应该跟win32debug一样吧?
zhoujianhei 2008-06-18
  • 打赏
  • 举报
回复
程序A
应该有一块区域记录调试信息。

程序B
读取A的调试信息并显示,而不是调用A的函数。A已经死了相应的可以认为它(debug_callStack)不是安全的。
加载更多回复(3)

16,472

社区成员

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

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

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