2015-11-10 9 views
11

私の問題は基本的にVisual Studio(Windows 10マシンの2015 Community Edition)を使用してデバッグするときに、変数上にマウスを置くか、私が変数に保存されている実際のデータは表示されません。デバッガは、文字列変数を表示するときにnpos = 4294967295を表示します

これは私が文字列とベクトルの両方で見た問題です。文字列の場合は、npos = 4294967295

と表示されます。ドロップダウン矢印をクリックし続けると、最終的にその変数に保存される実際の文字列になります。変数の内部構造を掘り下げた後でなければ、std::_String_alloc_Mypair_Myvalなどと同じです。ベクトルと同じです。

誰もこの問題を経験したことがありますか、それを修正する方法を知っていますか?

+0

あなたはこれのスクリーンショットを表示しますか? 'std :: string :: size_type'が保持できるmaxである' npos'という静的メンバを 'std :: string'は持っています。 – NathanOliver

+0

VSには、標準的なデータ構造を視覚化する方法を記述するXML形式のファイルが付属しています。どういうわけか、これらはあなたのために働いていません。私はこれが他の誰かのマシンで起こっているのを見たことがありますが、解決方法は決して決まっていません。 – melak47

+0

視覚化しようとする変数が現在のスコープ内にあることを確かめていますか?それ以外の場合、初期化されていない変数は正常です。 – peroket

答えて

0

4294967295は、すべて1ビットの32ビットワードである0xffffffffです。ほとんどのマシンでは、それはまたであり、通常はstr::npos定数です。

ところでg++ -Wall -gでコードをコンパイルするのにGCCを試しましたか?次に、デバッグにgdbを使用します。

+2

私は初めての読んだときとまったく同じように質問のポイントを逃しました。問題は、std :: string :: nposが4294967295である理由を尋ねることではありません。質問は、Visual Studioがカーソルが保持されている特定の文字列の値を表示するのではなく、 'std :: string :: npos'の値を表示する理由を尋ねています以上。 std :: stringには静的メンバ 'npos'を含む複数のメンバがありますので、デバッガは文字列の"値 "を表示するために特別な知識が必要です。 – JSF

7

私は同じ問題を抱えていました。私は管理EXEを使用するソリューションの一部であるアンマネージド(ネイティブ)C++ DLLをデバッグしていると仮定しますか?私の場合は、PInvokesがアンマネージC++ DLLで機能するC#WPF EXEがあります。私の場合で働いていた

「修正」:

FIX 1:チェックを外しデバッガ上の設定で「使用は、互換モードを管理する」: あなたはツール/オプション/デバッグ/一般でこれを行うことができます。あなたが最初にあなたのプロセスを開始することができます 部分回避策として、「管理互換モード」が何であるかのいくつかの議論についてはhttps://stackoverflow.com/a/33462362/5556801を、そしてあなたは、通常、それがオフする理由は、以下を参照してください:参照してくださいhttp://blogs.msdn.com/b/visualstudioalm/archive/2013/10/16/switching-to-managed-compatibility-mode-in-visual-studio-2013.aspx

「FIX」2デバッガ(Ctrl + F5)を使用せずに、VS2015デバッガをプロセス(デバッグ/アタッチトゥプロセス)にアタッチしますが、「アタッチ先/選択...」ボタンでのみ「ネイティブコード」を選択します。ネイティブC++ DLLのブレークポイントがヒットしたら、std :: string変数にカーソルを置くと、VS2015はそのデータメンバーを含め、期待どおりの完全な内容を表示します。このネイティブコードのみの回避策の欠点は、管理されたコード(C#またはCppCliなど)を同時にデバッグできなくなることです。

+0

修正1は私の時間の節約のためにVS2015で私のために働いた! – Kajal

1

プロジェクトプロパティで、 デバッグ - >デバッガタイプ - >ネイティブのみを選択します。私の場合、それは混在していました

関連する問題