Visual C++ 2019 デバッグの最中にポインター先の文字列値を変更する方法

Visual C/C++

Visual Studio Cで作成したプログラムのデバッグ中に配列の値は変更したり、変数の値を変えてして分岐先を実行中に決めることができます。しかし、pointerで指定された文字列についてはウォッチウィンドウでも1文字目しか見せてくれないため、変更できないのではないかと思われがちです。しかし、イミディエイトウィンドウを使えばpointerが指している文字列のすべてを参照して変更することができますので以下にその方法を説明したいと思います。

サンプルソースの準備

以下のよう20000個のchar型の配列を持つword変数とポインタであるdata変数を準備します。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]) {
    char word[20000];
    char *data;
    strcpy(word,"CDEFGHI");
    data = word;
    printf("%s\n", data);
    return 0;
}

ウォッチウィンドウ

配列は以下のよう各要素が参照可能でマウス右クリックのコンテキストメニュー「値の編集」を押して変更も可能です。

しかし、pointerは以下のよう要素が参照できないため、値の編集ができません。

イミディエイトウィンドウ

pointerが指している文字列の値を変更ためには以下のようイミディエイトウィンドウを開きます。

次のイミディエイトウィンドウの内容は、Visual C++ 2019でデバッグ中にポインター先の文字列値を変更する方法を示しています。

最初のコマンド “?data” は、ポインター変数 “data” の値を表示します。このポインターは、メモリ上の文字列データへの参照を保持しています。

次の行 “?data[2]=’a’” は、ポインター “data” が指す文字列の3番目の要素を ‘a’ に変更します。この操作は、文字列の指定された位置に新しい文字を代入することで行われます。結果として、文字列 “CDEFGHI” の3番目の文字 ‘D’ が ‘a’ に変わります。

その後、再度 “?data” を実行すると、変更が反映された文字列 “CDaFGHI” を表示します。ポインター “data” が指すメモリ上の文字列が変更されたため、変更が表示されます。

同様に、”?data[3]=’3′” は、ポインター “data” が指す文字列の4番目の要素を ‘3’ に変更します。文字列 “CDaFGHI” の4番目の文字 ‘F’ が ‘3’ に変わります。

最後に、再度 “?data” を実行すると、変更が反映された文字列 “CDa3GHI” を表示します。

したがって、上記のコマンドを使用することで、Visual C++ 2019のデバッグ中にポインター先の文字列値を変更することができます。

以下のよう16行まで実行するとDOSコマンド窓にデバッグ途中に変更された”CDa3GHI”が表示されることを確認できます。

まとめ

デバッグ中にウォッチウィンドウイミディエイトウィンドウを使い、自由自在に配列、ポインターの文字列を変更することできると設計通りにプログラムが動作しているかを短時間でテストしたり、バグがどの条件で発生しているかを早めに見つけることができます。実行結果やデバッグログだけで問題を推測するより上記の方法も一緒に活用して8時間かかるプログラミング、テストの仕事を1時間で終わらせ十分な休息をとるように心掛けましょう。

タイトルとURLをコピーしました