• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            穩定盈利的期貨交易方法-量化趨勢交易

            alantop -專業量化投資者

            愛好:量化投資,逆向工程,滲透
            隨筆 - 595, 文章 - 0, 評論 - 921, 引用 - 0
            數據加載中……

            調試程序的一種方法:

            用了一下dbwin很方便。

            下載的地方: http://dilascia.com/TraceWin.htm

            我用vc6, 所以下載 3.0

            用的時候非常方便,在使用的文件前#include "TraceWin.h"

            這樣,后afxDump和Trace的字符串,都輸入到TraceWin.exe這個程序中了。

            調試ole, c/s的程序非常方便。



            后面附上源碼:

            ////////////////////////////////////////////////////////////////
            //?TraceWin?Copyright?1995-1999?Paul?DiLascia
            //?If?this?program?works,?it?was?written?by?Paul?DiLascia.
            //?If?not,?I?don't?know?who?wrote?it.
            //
            //?NOTE:?If?you're?using?PixieLib,?you?don't?need?to?include?this?file.
            //?It's?already?included?by?the?library.
            //
            //?***************************************************************************
            //?TraceWin?is?a?tool?that?displays?MFC?diagnostic?(afxDump,?TRACE)?output
            //?in?the?window?of?the?TraceWin?applet.
            //
            //?To?use?TraceWin,?you?must?#include?this?file?somewhere?in?your?main?program
            //?file?(typically?where?you?implement?your?CWinApp).?Since?this?file?contains
            //?code,?you?should?#include?it?in?only?once--i.e.?NOT?in?StdAfx.h--or?you'll
            //?get?multiply-defined?symbol?errors?in?the?linker.?This?file?contains?an
            //?auto-initializing?static?variable?that?works?in?most?cases;?but?you?may?miss
            //?some?TRACE?output?from?constructors?of?static?objects.?If?so,?you?can
            //?manually?call?PxlTraceInit?before?your?first?TRACE?call.
            //
            //?To?see?the?output,?you?also?need?the?TraceWin?applet,?TraceWin.exe,?which
            //?you?can?download?http://pobox.com/~dilascia
            //
            //?***************************************************************************
            //
            #ifdef?_DEBUG

            //?Window?class?name?used?by?the?main?window?of?the?TRACEWIN?applet.
            #define?TRACEWND_CLASSNAME?_T("TraceWin?TRACE?Window")
            #define?OLDTRACEWND_CLASSNAME?_T("MfxTraceWindow")?//?backwards?compat

            //?ID?sent?as?COPYDATASRUCT::dwData?to?identify?the?WM_COPYDATA?message
            //?as?coming?from?an?app?using?TraceWin.
            #define?ID_COPYDATA_TRACEMSG?MAKELONG(MAKEWORD('t','w'),MAKEWORD('i','n'))

            //////////////////
            //?CFileTrace?is?a?CFile?that?"writes"?to?the?trace?window
            //
            class?CFileTrace?:?public?CFile?{
            ????DECLARE_DYNAMIC(CFileTrace)
            ????CFileTrace()?
            {?m_strFileName?=?_T("Mfx?File?Tracer");?}
            ????
            static?BOOL?autoInit;
            ????
            virtual?void?Write(const?void*?lpBuf,?UINT?nCount);
            public:
            ????
            static??BOOL?Init();????
            }
            ;
            IMPLEMENT_DYNAMIC(CFileTrace,?CFile)

            //////////////////
            //?Override?to?write?to?TraceWin?applet?instead?of?file.
            //
            void?CFileTrace::Write(const?void*?lpBuf,?UINT?nCount)
            {
            ????
            if?(!afxTraceEnabled)
            ????????
            return;????//?MFC?tracing?not?enabled

            ????HWND?hTraceWnd?
            =?::FindWindow(TRACEWND_CLASSNAME,?NULL);
            ????
            if?(hTraceWnd==NULL)
            ????????hTraceWnd?
            =?::FindWindow(OLDTRACEWND_CLASSNAME,?NULL);
            ????
            if?(hTraceWnd)?{
            ????????
            //?Found?Trace?window:?send?string?with?WM_COPYDATA
            ????????
            //?Must?copy?to?make?me?the?owner?of?the?string;?otherwise
            ????????
            //?barfs?when?called?from?MFC?with?traceMultiApp?on
            ????????
            //
            ????????static?char?mybuf[1024];

            #ifdef?_UNICODE
            ????????BOOL?bDefCharUsed;
            ????????::WideCharToMultiByte(CP_ACP,
            0,LPCWSTR(lpBuf),
            ????????????
            -1,?mybuf,?1024,?NULL,?&bDefCharUsed);
            #else
            ????????memcpy(mybuf,?lpBuf,?nCount);
            #endif

            ????????COPYDATASTRUCT?cds;
            ????????cds.dwData?
            =?ID_COPYDATA_TRACEMSG;
            ????????cds.cbData?
            =?nCount;
            ????????cds.lpData?
            =?mybuf;
            ????????CWinApp
            *?pApp?=?AfxGetApp();
            ????????HWND?hWnd?
            =?pApp???pApp->m_pMainWnd->GetSafeHwnd()?:?NULL;
            ????????::SendMessage(hTraceWnd,?WM_COPYDATA,?(WPARAM)hWnd,?(LPARAM)
            &cds);
            ????}

            ????
            //?Also?do?normal?debug?thing
            ????::OutputDebugString((LPCTSTR)lpBuf);
            }


            /////////////////
            //?Initialize?tracing.?Replace?global?afxDump.m_pFile?with?CFileTrace?object.
            //?In?VC?5.0,?you?shouldn't?need?to?call?this,?since?it's?called?from?an
            //?auto-initializing?static?object?autoInit?below.?But?if?you?don't?see
            //?any?TRACE?output?in?the?TraceWin?window,?you?should?try?calling
            //?PxlTraceInit?any?time?before?your?first?TRACE?message.
            //
            BOOL?CFileTrace::Init()
            {
            ????
            if?(afxDump.m_pFile==NULL)?{
            ????????
            //?Initialize?tracing:?replace?afxDump.m_pFile?w/my?own?CFile?object
            ????????
            //
            ????????
            //?It's?important?to?allocate?with?"new"?here,?not?a?static?object,
            ????????
            //?because?CFileTrace?is?virtual--i.e.,?called?through?a?pointer?in
            ????????
            //?the?object's?vtbl--and?the?compiler?will?zero?out?the?virtual
            ????????
            //?function?table?with?a?NOP?function?when?a?static?object
            ????????
            //?goes?out?of?scope.?But?I?want?my?CFileTrace?to?stay?around?to
            ????????
            //?display?memory?leak?diagnostics?even?after?all?static?objects
            ????????
            //?have?been?destructed.?So?I?allocate?the?object?with?new?and
            ????????
            //?never?delete?it.?I?don't?want?this?allocation?to?itself?generate
            ????????
            //?a?reported?memory?leak,?so?I?turn?off?memory?tracking?before?I
            ????????
            //?allocate,?then?on?again?after.
            ????????
            //
            ????????BOOL?bEnable?=?AfxEnableMemoryTracking(FALSE);
            ????????afxDump.m_pFile?
            =?new?CFileTrace;
            ????????AfxEnableMemoryTracking(bEnable);
            ????????
            return?TRUE;
            ????}

            ????
            return?FALSE;
            }


            //////////////////
            //?This?object?does?nothing?but?call?CFileTrace::Init,?so?all?you?have?to
            //?do?is?#include?this?file.?Because?afxDump?is?defined?in?a?module?with
            //
            //?#pragma?init_seg(lib)
            //
            //?afxDump?gets?initialized?before?the?"user"?segment?which?is?where?your
            //?app?(and?autoInit)?is?by?default.?If?you?need?to?use?init_seg(lib),
            //?or?you?have?other?objects?whose?constructors?call?TRACE?that?get
            //?initialized?before?CFileTrace::bInitialized,?you?will?have?to?call
            //?CFileTrace::Init?yourself,?before?your?first?TRACE?statement.
            //
            BOOL?CFileTrace::autoInit?=?CFileTrace::Init();

            //?This?symbol?defined?so?you?can?call?it?and?have?it
            //?compile?to?nothing?in?non-debug?build
            #define?PxlTraceInit()?CFileTrace::Init();

            #else

            #define?PxlTraceInit()

            #endif?//?_DEBUG

            posted on 2006-05-07 15:57 AlanTop 閱讀(1309) 評論(4)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: 調試程序的一種方法:  回復  更多評論   

            這個還不是最方便的

            最簡單的方法是使用DebugView,不用改代碼,就可以直接看到調試輸出了
            2006-05-08 09:11 | 小明

            # re: 調試程序的一種方法:  回復  更多評論   

            小明,說得不錯,我一般還要對OutputDebugString進行一些封裝,并增加一個調試宏,這樣在Release版本中,就沒有任何的輸出了,很方便!
            2006-05-08 22:40 | vgoo

            # re: 調試程序的一種方法:  回復  更多評論   

            方法很多,寫到一個console窗口里面也是可以的。
            quake的做法是自己寫了一個os無關的console類,無論在windows上還是linux,mac都可以出trace
            2006-05-10 12:38 |

            # re: 調試程序的一種方法:  回復  更多評論   

            不曉得有不有試過 XTRACE
            可以在release 下查看輸出的
            2006-05-15 16:06 | 代李
            久久精品国产AV一区二区三区| 久久亚洲AV成人无码电影| 伊人久久大香线蕉亚洲| 久久人人爽人人爽人人AV| 久久精品免费一区二区三区| 国产精品久久久天天影视香蕉| 久久久精品国产亚洲成人满18免费网站| 久久久无码一区二区三区| 久久99国产综合精品| 性高湖久久久久久久久AAAAA| 久久精品国产99国产精品亚洲| 无码伊人66久久大杳蕉网站谷歌 | 久久se精品一区精品二区| 国产精品久久久久国产A级| 久久国产精品免费| 精品无码久久久久久尤物| 久久夜色精品国产www| 久久se精品一区二区| 青草国产精品久久久久久| 久久99国产精品久久99小说| 久久亚洲国产午夜精品理论片| 超级碰碰碰碰97久久久久| 国产成人久久激情91| 免费精品国产日韩热久久| 久久国产香蕉一区精品| 99久久无色码中文字幕| 无码人妻久久一区二区三区免费| 欧美一级久久久久久久大| 久久国产精品久久国产精品| 国产成人精品久久| 国产精品久久久久久久久软件 | 伊人久久大香线蕉综合影院首页| 久久久精品一区二区三区| 久久99这里只有精品国产| 久久精品这里只有精99品| 久久99精品久久久久久不卡| 久久国产精品偷99| 亚洲欧洲精品成人久久曰影片| 亚洲国产一成久久精品国产成人综合| 大蕉久久伊人中文字幕| 91精品无码久久久久久五月天|