TRACE Visual C++
邊執行程式,邊即時觀察其 輸出。許多早已發現件不幸的事實:
4。x 之洠в小 BWIN ,生活的步眨虼藖y了,寫程式的生命有些狼狽不堪。
DBWIN TRACE Visual C++ TRACE
洠в小 。 〕颤N獨角戲? 的 字串輸出必須在整合環境
的除錯視窗看到。TRACE 巨集只在除錯模式的程式碼才能生效,而 Visual C++ 竟
還要求程式必須在整合環境的除錯器內執行,內含的 TRACE 巨集才有效。這太過份了。
我只不過想在撸穲鐾纥c射擊撸颍麄儏s要我扛尊 155 加農砲來。不少朋友都對這
種情況相當不滿。
Paul DiLascia
Microsoft Systems Journal MSJ TRACE
( )的兩篇文章,彌補了 的這點小小遺憾:
第篇文章出現在 MSJ 1995。10 的 C/C++ 專欄,第篇文章出現在 MSJ 1996。01 的
C/C++ 專欄。兩篇都出自 Paul DiLascia 之手,這位先生在 C++ / MFC 享有盛名,著有
Windows++ 書。
Paul DiLascia 發明了種方法,讓你的 TRACE 巨集輸出到個視窗(他把它命名為
Tracewin 視窗),這個視窗就像 Visual C++ 1。5 的 DBWIN 樣,可以收集來自八方的
TRACE 字串,可以把內容清除,或存檔,或做其他任何文字編輯的處理。你的程式只
要是除錯模式就行。至於除錯器,把它丟開,至少在這個時刻。
我將在這篇文章敘述 Paul DiLascia 的構想和作法,並引用部份程式碼。完整程式碼可
MSJ ftp site ftp。microsoft。 MSDN Microsoft Developer"s
以從 的 ( )免費載,也可以從 (
Network )光碟片獲得。
此法富有巧思,可以豐富我們的 MFC 技術經驗。所有榮耀都屬於作者 Paul DiLascia 。
922
…………………………………………………………Page 985……………………………………………………………
附錄D 以MFC 重建DBWIN
我呢,我只是向大家推耍K介紹這兩篇文章、這個、這個好工具,並且儘量豐富稍嫌
簡陋的兩篇原文。當文章使用第稱來描述 Tracewin 的程式設計理念時,那個「我」
代表的是 Paul DiLascia 而不是侯俊傑。
擒偾芡酢?br />
要把 TRACE 的輸出字串導向,得先明白 TRACE 巨集到底是怎麼回事。TRACE 事實
Win32 API OutputDebugString hooking Win32 API
呼叫了 函式 。好,可能你會想到以類似
的作法,把 OutputDebugString 函式導到你的某個函式來,再予取予求。這種方法在
Windows NT Windows NT copy…on…write 裕А?br />
不能湊效,因為 的 分頁機制( )使得我
OutputDebugString OutputDebugString
旦修改了 ,我就擁有了份屬於自己的 副本。
我可以高高興興盡情使用這副本(渾然不覺),但其他程式呼叫的卻仍然是那未經
雕琢的,身處KRNL386 模組的 OutputDebugString 。這樣就洠в惺颤N大用處啦!
copy…on…write Matt Pietrck Windows 95 System Programming SECRETS
裕В核^ 機制, 的
第5章(#290 頁)解釋得相當好。我大略說明它的意義。
當作業系統極儘可能共享程式碼,對除錯器會帶來什麼影響?如果除錯器寫入斷點
指令的那個 code page 是被兩個行程共享的話,就會有潛在問睿R溃e器只對
個行程除錯,另個行程即使碰到斷點,也不應該受影響。
高級作業系統對付此問睿姆椒ㄊ撬^的 〃copy on write〃 機制:記憶體管理器使用 CPU
的分頁機制,儘可能將記憶體共享出來,而在必要的時候又將某些 RAM page 眩u
份。
instance code pages
假設某個程式的兩個個體( )都正在執行,共享相同的 (都是唯讀性
伲F渲庫冻e狀態,使用者告訴除錯器在程式某處放個斷點
breakpoint page fault code page
( )。當除錯器企圖寫入斷點指令,會樱l個 (因為 擁
有唯讀屬性)。作業系統看到這個page fault ,首先斷定是除錯器企圖讀記憶體內容,
這是合法的。然而,隨後寫入到共享記憶體的動作就不被允許了。系統於是會先將受
影響的各頁拷貝份,並改變被除錯者的 page table ,使映射關係轉變到這份拷貝版。
旦記憶體被拷貝並被映射,系統就可以讓寫入動作過關了。寫入動作只影響拷貝內容,
923
…………………………………………………………Page 986……………………………………………………………
第五篇 附錄
不影響原先內容。
Copy on write 機制的最大好處就是儘可能讓記憶體獲得共享效益。只有在必要時刻,系
統才會對共享記憶體做出新的拷貝。
MFC TRACE afxDump
在 程式,所有的詳嘀噶罨蚓藜òā 。┦聦嵍剂鹘泜€名為
的物件之,那是個 CDumpContext 物件。所有的詳鄤幼鞫歼M入
CDumpContext::OutputString 成員函式,然後才進入全域函式 AfxOutputDebugString ,把
字串送往除錯器。
攔截除錯器是很困難的啦,但是你知道,字串也可以被送往檔案。如果我們能夠把送往
檔案的字串攔截來,大功就完成了半。這個通往檔案的奧秘在哪裡呢?看看 MFC 的
圖一 m_pFile m_pFile
原始碼( )。啊哈,我們發現,如果 有所指定,字串就流往檔案。
是個 CFile 物件(圖二)。
// in MFC 4。x DUMPCONT。CPP
#0001 void CDumpContext::OutputString(LPCTSTR lpsz)
#0002 {
#0003 #ifdef _DEBUG
小说推荐
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 最新章:第295章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- 深入浅出
- 《深入浅出》作者:白小骨晋江VIP20140610完结+1番外非V章节总点击数:67370 总书评数:209 当前被收藏数:764 文章积分:11,386,657文案:每个前男友都是女人掉过的坑,从何典阳这个坑里往外爬的梁温暖一脸血表示,何典阳他这个深坑实在太坑爹。何典阳:我是坑?梁温暖…别看我,我
- 最新章:第74章
- 深入浅出[娱乐圈]
- 文案【忠犬影帝攻X傲娇明星受,1V1轻松甜文,前期互相试探,38章在一起后甜甜甜,两人都有细微的变化和成长~这也是我用心构思攻受感情发展的文,但数据有点太惨了,没入V可以全文免费看,还是想求点收藏呀,数据好看点吧,让我开心一下(笑哭.jpg)流量偶像白漾和影帝顾瑜祁关系很僵,传言两人出道时不合而互相
- 最新章:第59章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 最新章:第27章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章