Forum Replies Created
-
AuthorPosts
-
support
KeymasterHi,
Sorry, it is hard to guess what is going on without knowing further details. Please try reproducing this on a smaller project and sending it to us so that we could examine it.
If the problem only happens on a larger project, please try comparing the settings between the 2 projects:
- .vgdbsettings files
- .vcxproj files (e.g. manually defined macros)
- sets of included headers
support
KeymasterHi,
Sorry for the confusion. We will try to explain how VisualGDB manages IntelliSense headers.
When you create your first project built on a remote Linux machine, VisualGDB creates a local Windows cache of the related header directories, so IntelliSense can parse them automatically. If you later install more packages to your Linux system, the headers installed by them won’t automatically be downloaded, leading in the error you are describing: the code would build, but IntelliSense would not find headers.
This could be fixed by letting VisualGDB rebuild the header directory cache. The exact wording of the command depends on your VisualGDB version and the project type, but the option is located on the IntelliSense Directories page of VisualGDB Project Properties (e.g. ‘Reload all directories’). If you are not sure, please attach a screenshot of that page and we will help you find the correct settings.
support
KeymasterThanks for trying it and sorry for the inconvenience. VisualGDB might be picking up the setting that causes this from the regular VC++ formatting settings.
Please try exporting them via Tools->Import and Export Settings -> Options->Text Editor->C/C++ and attach them here (or send them via our support page) so that we could try reproducing it on our side.
Another option would be to try exporting all settings and then resetting them. If this helps, please try exporting the settings after reset and comparing the produced files. This should show which settings were different and what setting was causing this.
support
KeymasterHi,
Please try synchronizing the header directories (via IntelliSense Settings page of VisualGDB Project Properties). This will ensure VisualGDB has access to the latest versions of all headers.
You can also try creating an advanced CMake project (requires VisualGDB 5.3) that will access the remote filesystem directly over SSH; this will eliminate the need to synchronize any headers or source files.
support
KeymasterHi,
You could work around this with a relatively simple hack: create a file called cplusplus.h in your project directory with the following contents:
#pragma once #ifdef __cplusplus #undef __cplusplus #define __cplusplus <value> #endif
then add the following code to your .vcxproj file:
<ItemDefinitionGroup Condition="'$(DesignTimeBuild)' == 'true'"> <ClCompile> <ForcedIncludeFiles>%(ClCompiler.ForcedIncludeFiles);cplusplus.h</ForcedIncludeFiles> </ClCompile> </ItemDefinitionGroup>
This will override the __cplusplus value used by IntelliSense, but won’t affect the actual build.
BTW, feel free to let us know the reasons you don’t like Clang IntelliSense. We are constantly improving it and adding new usability features, so we always appreciate feedback on making it even better.
support
KeymasterHi,
We understand your frustration with this, however it’s hard to guess what is going on based on the scarce puzzle pieces you provide. The behavior you are describing would be consistent with the ‘unix’ macro simply not being defined (which is the expected behavior for certain types of projects).
We would love to help you, but in order to do that, we need to understand your scenario and what you are trying to accomplish. So please provide the following information so that we can help you:
- The exact steps to create the project (project type/toolchain/etc)
- The steps to reproduce the problem, including the expected outcome and the observed outcome
- A screenshot of the entire VS window showing the problem (often minor details like file names or the navigation bar provide important clues).
E.g. in our experiments the #ifdef unix looks like this:
The macro is not defined (and should not be for this project type), so the code inside #ifdef is grayed out and the code inside #ifndef is working as expected.
-
This reply was modified 7 years, 11 months ago by
support.
Attachments:
You must be logged in to view attached files.support
KeymasterHi,
We understand your frustration and agree that this is important, so we will try to give more context on this.
There are 2 popular low-level debug tools for modern ARM devices: OpenOCD and Segger J-Link.
- OpenOCD is free and works with many inexpensive debug probes like ST-Link, however it has some glitches and is not as user-friendly.
- Segger J-Link software requires a more expensive J-Link probe, but its low-level gdb stub is fully supported by the probe manufacturer, explicitly tested with many devices and is generally much more reliable.
With VisualGDB we don’t aim to replace any of those 2 low-level methods. Instead we build on top of them, focusing on usability features like easy project configuration, profiler, real-time watch, live variables, etc. We also provide easy setup GUI for OpenOCD that automatically detects and configures common setups, but this approach still inherits various glitches for advanced scenarios like the one you are encountering. We could address it by making a “bulletproof” fork of OpenOCD, however making it as reliable as J-Link would raise the product costs accordingly. Instead of doing that, we maintain out-of-the-box support for both debug methods and let our users choose between more reliable J-Link and free OpenOCD.
Hopefully this explains.
Thanks.
support
KeymasterHi,
No problem, we have submitted a ticket to the OpenOCD bugtracker: https://sourceforge.net/p/openocd/tickets/165/
support
KeymasterHi,
We have managed to reproduce the problem with the Eigen natvis file. It is caused by VisualGDB not supporting the $Tx syntax and the multi-dimensional ArrayItems.
We have added support for the $Tx syntax to the upcoming maintenance release, however we currently don’t have any plans for supporting multi-dimensional arrays. As a workaround we would advise creating a basic visualizer using our managed visualizer API described here. It allows using arbitrary logic for analyzing visualized expressions and would support multi-dimensional arrays as well.
support
KeymasterHi,
VS IntelliSense has its own logic for defining __cplusplus that is hard to control from the VisualGDB level. You could try overriding it by adding the following code to some common shared header:
#ifdef _MSC_VER #define __cplusplus <value> #endif
However this may cause strange IntelliSense errors as the VC++ IntelliSense is not 100% compatible with GCC-specific extensions. We generally recommend using Clang IntelliSense as it is specifically designed for better compatibility with GCC extensions.
support
KeymasterHi,
We actually have a detailed tutorial showing how to import 3rd-party Linux projects build with command line: https://visualgdb.com/tutorials/linux/import/ (it features an older VisualGDB version though).
Please try following it and let us know if you encounter any problems.
support
KeymasterHi,
This indeed looks strange. Please try saving and deleting the following registry key:
Computer\HKEY_CURRENT_USER\Software\Sysprogs\VisualGDB\Settings\CppEngine
It should reset VisualGDB settings related to code formatting & indentations.
support
KeymasterHi,
OK, there are actually 3 different preprocessor macros related to the standard:
- __cplusplus
- __cpp_attributes
- __STDC_ISO_10646__
Please double-check that you are actually comparing the values of the same macro between the actual IntelliSense, IntelliSense.props and the gcc output. Also if you are using the Visual C++ IntelliSense (not Clang), it will set its own value of __cplusplus and modifying it would break IntelliSense (as it would include code paths using features that are not implemented by the VC++ IntelliSense).
Please also attach a screenshot showing the incorrect IntelliSense behavior, so we could check if it could be caused by anything else.
support
KeymasterHi,
This could happen if the gdb stub you are using did not report the registers correctly or if VisualGDB did not parse them properly (our plugin for Segger J-Link had a bug with the registers, but it got fixed years ago). Please let us know which gdb stub you are using and also attach:
- A screenshot of the registers window with the right-click menu
- Your VisualGDB version and build number
- The full GDB log from the debug session as described here
Thanks.
support
KeymasterHi,
Please try running the following command manually in the GDB session window:
dump binary memory <file> <start address> <end address>
-
AuthorPosts