Inspecting STL containers in Visual Studio debugging

前端 未结 10 1346
旧巷少年郎
旧巷少年郎 2020-12-05 06:52

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 p

相关标签:
10条回答
  • 2020-12-05 07:17

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

    0 讨论(0)
  • 2020-12-05 07:17

    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)

    0 讨论(0)
  • 2020-12-05 07:25

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

    0 讨论(0)
  • 2020-12-05 07:26

    In VS2005 and VS 2008 you can see the contents of STL containers. The rules for getting at the data are in autoexp.dat "c:\Program Files\Microsoft Visual Studio 9\Common7\Packages\Debugger\autoexp.dat".

    AutoExp.dat is meant to be customized. However, the STL defs are under a section called [Visualizer]. If you can figure out the language used in that section, more power to you, however I'd recommend just leaving that part alone.

    Autoexp.dat existed in VS2003, but there was no support for STL containers ([Visualizer] didn't exist). In VS2003 you have to manually navigate the underlying data representation.

    By modifying autoexp.dat it is possible to add rules for navigating the data representation of your own types so they are easier to debug. If you do this, you should only add to the stuff under [AutoExp]. Be careful and keep a back up of this file before you modify it.

    0 讨论(0)
  • 2020-12-05 07:29

    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.

    0 讨论(0)
  • 2020-12-05 07:30

    You can also right-click any value in your watch, and choose 'add watch'. This can be useful if you only need to look at one element of a map or set.

    It also leads to the solution that christopher_f posted for vectors - ((v)._Myfirst)[index]

    0 讨论(0)
提交回复
热议问题