• <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>
            穩(wěn)定盈利的期貨交易方法-量化趨勢交易

            alantop -專業(yè)量化投資者

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

            調(diào)試程序的一種方法:

            用了一下dbwin很方便。

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

            我用vc6, 所以下載 3.0

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

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

            調(diào)試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 閱讀(1306) 評論(4)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: 調(diào)試程序的一種方法:  回復  更多評論   

            這個還不是最方便的

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

            # re: 調(diào)試程序的一種方法:  回復  更多評論   

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

            # re: 調(diào)試程序的一種方法:  回復  更多評論   

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

            # re: 調(diào)試程序的一種方法:  回復  更多評論   

            不曉得有不有試過 XTRACE
            可以在release 下查看輸出的
            2006-05-15 16:06 | 代李
            AA级片免费看视频久久| 午夜欧美精品久久久久久久| 伊人久久大香线焦AV综合影院| 亚洲日韩中文无码久久| 亚洲香蕉网久久综合影视| 国产美女久久精品香蕉69| 久久精品综合一区二区三区| 国产成人精品综合久久久久| 国产精品无码久久久久久| 国产日韩欧美久久| 久久久久久精品成人免费图片| 久久婷婷国产麻豆91天堂| 中文字幕乱码人妻无码久久| 久久亚洲精品视频| 久久热这里只有精品在线观看| 久久精品免费一区二区三区| 日产精品久久久久久久性色| 久久久久这里只有精品 | 91精品国产色综合久久| 久久人妻少妇嫩草AV蜜桃| 99久久国产热无码精品免费久久久久 | 无码精品久久久天天影视| 久久99精品久久久久久秒播| 九九久久自然熟的香蕉图片| 久久午夜福利电影| 久久久久综合网久久| 亚洲乱码中文字幕久久孕妇黑人| 国产精品成人久久久久久久| 97久久精品无码一区二区| 无码人妻精品一区二区三区久久久| 久久精品亚洲乱码伦伦中文| 久久中文娱乐网| 久久99国产精品久久久| 久久精品www人人爽人人| 久久精品国产亚洲AV电影| 久久精品中文字幕一区| 久久久久波多野结衣高潮| 国内精品久久久久影院老司| 午夜天堂精品久久久久| 亚洲精品乱码久久久久久久久久久久| 欧美与黑人午夜性猛交久久久|