九月
13
2011

visual studio 視覺化動態陣列 visualize dynamic array

如果你常用Matlab寫矩陣運算,一定對這個變數瀏覽工具不陌生,這真是太美好了,可以一眼望盡矩陣內所有的數值,如果你有更大的螢幕,甚至可以想像如Nash一樣在數字海中找到真理

但是這些美夢到visual studio中卻應聲破裂,散亂成16進位的記憶體亂碼,本文就是要帶領你回到美好的debug時光,重拾回可以"看見"的資料

首先,我們要來看一小段讓人苦惱的C++程式碼,我們宣告了一個動態的整數陣列,維度是128,並且隨機的為他們分配的預設值

int dimension = 128;
int *d = new int [dimension];
for (int i=0; i < dimension; i++)
    d[i] = rand()%200000;

但是要怎麼一眼望盡呢?我們把滑鼠移到d這個指標上,得到一個記憶體位置,然後再按一下旁邊的+號,不出所料的,只得到第一個值。這並非我們一眼望盡的美夢

聰明的你一定馬上想到printf

for (int i=0; i < dimension; i++)
    printf("%d ", d[i]);

這麼做馬上會遇到一個問題,就是CMD視窗的行數限制會造成你閱讀困難,再來就是如果我需要debug多個變數,就必須要複製這段程式碼到各個角落,屆時你的程式碼中就會充滿細碎的test program,既骯髒又影響效能。偉大的M$怎麼可能沒有發現這個讓所有程式設計師苦惱許久的問題?尤其是在貴死人的visual studio上?

我們在中斷點上偵錯時,按下CTRL+ALT+I,開啟即時運算視窗,輸入"d,128",你就會看到一整串的訊息,然後問,跟我printf有什麼不一樣= =? 最起碼你從2行變2個字了嘛~而且沒有弄髒你的程式碼不是嗎?

現在教你另一招,同樣在中斷點上偵錯時,按下ALT+6,開啟記憶體視窗,在位置欄位輸入你的指標位置,如上是"0x004d9158",或是在按下右邊的"自動重新評估"後,在位置輸入"d"

這根本比前面更糟了不是嗎!!整個變成16進位的亂碼! 且慢,這時我們需要一點常識,int是32 bit的資料結構,也就是佔有4 byte的大小,並且我們宣告的int是帶符號的,所以我們按下右鍵,選擇"4個位元組整數"、"帶正負號顯示"

這時的結果已經相當接近matlab的顯示模式了,但是在column欄位上我們需要把一行定義成128個欄位,比較符合我們陣列的概念,把資料行由自動改為128就可以了。
當然你可以類推,若是double形態就選擇以64位元浮點數,是unsigned就選不帶正負號即可

Written by in: 電腦三兩事 |

無迴響 »

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com