在vc中,debug模式下,可以有很多的方式进行调试,最常用的当然是设置断点,然后查看变量的值或者加watch,
但在很多情况下,debug的时候是正确的,但release的时候确是错误,所以有时候我们需要在release模式下加调试
信息。一般可以自己写个类,然后用写文件的方式。这当然也是个好方法。
今天在看一些文章的时候看到了用debugview.exe进行调试(www.sysinternals.com),这个是个好东西,但看来看去
不知道怎么用这个玩样,它既不是load exe文件,像rose里面的一样,也看不出和我们自己要运行的exe有什么联系,
后来找了些文章,才看明白了。
debugview.exe是用来显示debug信息的,而这个debug信息就是由我们自己的application所发出的。我们可以看msdn上
的关于debug的那些函数,一个比较有用的函数是OutputDebugString(LPCTSTR msg)。用这个函数,我们就可以把
调试信息往外发出,而debugview.exe就可以接收到。
这其实是windows的一个机制,说起来也是很简单的东西,其实他们之间的交互就是一个4K 大小的share memory,
|
object name |
object type
|
|---|---|
|
DBWinMutex
|
Mutex
|
|
DBWIN_BUFFER
|
Section (shared memory)
|
|
DBWIN_BUFFER_READY
|
Event
|
|
DBWIN_DATA_READY
|
Event
|
通讯的过程也就靠了上面的一个锁,两个事件。数据存在dbwin_buffer中。结构如下:
struct dbwin_buffer {
DWORD dwProcessId;
char data[4096-sizeof(DWORD)];
};
share memory的机制大家都知道,这里也就不多说了。
但有了这么个机制,相信对大家调试程序会有较大的帮助,或许鄙人孤陋,那就贻笑大方了。hehe
浙公网安备 33010602011771号