關于調試循環、遞歸的一點技巧

前幾天在網上看到一篇文章,一位老兄說他有一次調試程序,一個循環跟蹤到七十多趟(循環了七十多趟)才找到問題,累得他要死。

今天我調試自己的遞歸同樣遇到了這樣的問題,大概在反復調用自己n多次時出現了問題,可VC 只能一步步的來,怎么辦?我想了幾個辦法,可以解決這個“調試難”的問題。

(會用__DEBUG__宏的同志可以不看第一步)

1、在你要調試的函數的文件的適當位置加入宏:

#ifdef __DEBUG__
...
#endif

所謂適當位置就是要打印訊息的地方,宏(巨集)當中一般都寫些類似printf的語句,把函數中的內容打印出來。然后再在這個文件頭上定義__DEBUG__宏。編譯運行,這時會打印出很多函數運行時的訊息,根據這些訊息一般就可以知道在循環或者是遞歸了多少次後出現了問題;

2、定義一個局部變量i作計數器,每次循環時i都++,遞歸需要把i定義成全局變量,同樣每次遞歸調用i都++;然后寫一句話:

if(i ==  XXX)
{
    printf(
"問題所在! "
);
}

其中的XXX就是循環/遞歸條用的次數,再在這個printf上設置斷點,看明白了吧~

這時啟動調試會自動停止在問題所在的循環趟數上,再一步步跟蹤,就好辦多了。

其實很多時候并不一定非要知道是循環/遞歸調用在多少趟使出的問題,只要你能定位問題的特征,就能很快的到達那里。比如我知道我的函數中有的int變量var1 ,我發現當var1 == 100時程序出問題了,那么我就在函數里加上

if(var1 == 100 )
{
    printf(
"問題處! "
);
}

再在這里設上斷點就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值