Inspecting STL containers in Visual Studio debuggi

2020-01-30 08:28发布

If I have a std::vector or std::map variable, and I want to see the contents, it's a big pain to see the nth element while debugging. Is there a plugin, or some trick to making it easier to watch STL container variables while debugging (VS2003/2005/2008)?

10条回答
干净又极端
2楼-- · 2020-01-30 08:51

For vectors, this thread on the msdn forums has a code snippet for setting a watch on a vector index that might help.

查看更多
Explosion°爆炸
3楼-- · 2020-01-30 08:52

You could create a custom visualiser Check this out: http://www.virtualdub.org/blog/pivot/entry.php?id=120

查看更多
\"骚年 ilove
4楼-- · 2020-01-30 08:53

Visual Studio 2008, at least for me, displays the contents of STL containers in the standard mouseover contents box.

查看更多
手持菜刀,她持情操
5楼-- · 2020-01-30 08:53

Above discussed method [((v)._Myfirst)[index]] will work only for specific container(std::vector) not for all possible STL containers. For example if you want to see the content of std::deque then you have to look for some other method to browse through the content in std::deque.

Maybe you can try the following similar setting to solve your issue

[I tested this setting only for Visual Studio 2010 Professional version installed with Microsoft Visual studio 2010 Service pack 1]

Step 1: Uninstall the Microsoft Visual studio 2010 Service pack 1 - for my project work I don't really need the Service pack 1 so uninstalling service pack 1 will not cause any issue for my case.

Step 2: Restart your system.

Step 3: This step is not necessary if you are not getting Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt'. Otherwise browse through

Project Property -> Linker (General) -> Change Enable Incremental Linking to No (/INCREMENTAL:NO)

查看更多
来,给爷笑一个
6楼-- · 2020-01-30 08:55

In vs 2015, I could not get any of these working
so, i wrote a bit of code

1: I had vector of vector of long long elements

std::vector<std::string> vs(M_coins + 1);
for (unsigned long long i = 0; i <= M_coins; i++) {
    std::for_each(memo[i].begin(), memo[i].end(), [i, &vs](long long &n) {
        vs[i].append(std::to_string(n));
        });
}
// now vs is ready for use as vs[0], vs[1].. so on, for your debugger

basically what i did was converted vector into string. i had vector of vector so i had string vector to fill.

2: if you have just a vector of long long elements, then just convert as below:

std::vector<std::string> s;
std::for_each(v1.begin(), v1.end(), [&s](long long &n) {
    s.append(std::to_string(n));
    });
// now s is ready for use, for your debugger

hope it helped.

查看更多
Viruses.
7楼-- · 2020-01-30 08:58

If you want to watch more than one element at the same time, you can append a comma and the number of elements as so:

(v._Myfirst)[startIndex], count

However, note that count must be a constant, it cannot be the result of another expression.

查看更多
登录 后发表回答