Forum Replies Created
-
AuthorPosts
-
support
KeymasterHi,
It looks like VisualGDB sent the “flushregs” command before the last “evaluate-expression” was complete:
^done,value=”0” -data-evaluate-expression “\$s30″ ^done,value=”0” -data-evaluate-expression “\$s31″ -interpreter-exec console flushregs -gdb-set $r0=0x1 ~”The target is not responding to GDB commands.\nStop debugging it? ” ~”(y or n) [answered Y; input not from terminal]\n” =thread-group-exited,id=”i1″ ^error,msg=”Disconnected from target.” -gdb-set $r1=0x20003448 ~”Register cache flushed.\n”
Did you have to cancel the “-data-evaluate-expression” command via the “GDB Command Taking Too Long” window? If not, it could be caused by some strange race condition and we can add soem extra logging on VisualGDB side to help you diagnose this.
support
KeymasterHi,
Please ensure you are using Clang-based IntelliSense. It supports GCC-specific code much better than the regular VS IntelliSense.
support
KeymasterHi,
We usually add official support for ESP-IDF versions within 1-2 months from their official final release date. As ESP-IDF 3.0 is not officially released yet, it’s hard to say when this will happen.
As the ESP-IDF is changing very rapidly, we have considerably simplified support for importing the projects build by ESP-IDF itself. Please see this tutorial for a detailed example of importing ESP-IDF projects.
support
KeymasterHi,
This looks like some sort of a networking problem. Please ensure that your computer has Internet connection and try resetting your DNS cache.
support
KeymasterHi,
Strange, normally the MCU.CSV file should not affect the J-Link stub (you can try removing the line from it after you edited the VisualGDB settings to be 100% sure).
Can you also confirm that the problem happens when you launch the segger gdb stub manually and connect gdb from command line? You can use the following gdb commands to test it:
gdb <elf file> target remote :3333 load continue
support
KeymasterHi,
Thanks, we have tried building and running your project on our nRF52840 board and it worked out-of-the-box.
Please check if you are using the same SDK version with IAR. If not, the latest Nordic SDK might be incompatible with the preview board and would only work with the final version of it.
support
KeymasterHi,
Thanks, this could be related to Visual Studio trying to asynchronously request the frame list while the registers are still being updated. Please try this build: http://sysprogs.com/files/tmp/VisualGDB-5.3.7.1763.msi
We have also added a setting under Tools->Options->VisualGDB->Embedded->Other that allows disabling parallelization of register setting commands.
If you want to use function tracing with your custom RTOS, you would need to modify the profiler framework so that it can store the instrumented call stack information for each thread separately. This mechanism is not documented, so our best advice would be see how this is supported for FreeRTOS and add similar code for handling your RTOS.
support
KeymasterHi,
OK, please try this build: http://sysprogs.com/files/tmp/VisualGDB-5.3.7.1762.msi
We have added a new field called VSPropertyObject to the ExpressionValue class. You can set it to your own implementation of IDebugProperty3. VisualGDB will forward calls to GetCustomViewerCount(), GetCustomViewerList(), CreateObjectID() and DestroyObjectID() to this object.
support
KeymasterHi,
There is no documentation on the internal real-time watch protocol (as it’s a fairly rare customization), however our profiler framework includes sources for all target-side code involved in real-time watches, so it’s relatively easy to reverse-engineer it.
We would recommend starting with creatinga test project similar to the one shown in the blog post. Then add several instances of ScalarRealTimeWatch and ensure they work.
When you add a ScalarRealTimeWatch object to the real-time watch window, VisualGDB detects its type and sets the “enabled” field. Then it expects the real-time watch data stream to contain packets of the following structure:
<scalar real-time watch updated>: <variable address> <new value>
You can emulate this by creating your own implementation of ScalarRealTimeWatch linked to a global variable in your program. Once enabled is set it should configure the ITM registers to trigger when the linked variable is modified and your client-side code should read the ITM messages and translate them into the real-time watch protocol (note that you will need to report the address of the watch object, not the original variable).
BTW, if you’re willing to publish the sources for the plugin under a permissive license, we will be happy to fork it on our Github repo, include it into the VisualGDB distribution and support/maintain it officially.
support
KeymasterHi,
Yes, our OpenOCD fork includes support for FLASH programming plugins. Please follow this tutorial for details.
support
KeymasterHi,
Looks like you are using an older preview build of VisualGDB 5.3.
Please update to the latest 5.3 Preview 7.
support
KeymasterHi,
VisualGDB is licensed per seat (a computer/user combination). Hence one license will allow using VisualGDB on one computer by one user. After the initial year the license will continue working, however you will no longer be eligible for technical support and you won’t be able to update to VisualGDB versions released after the year ran out. Alternatively you can always renew your license (currently the renewal price is 50% of the regular price).
support
KeymasterHi,
We have just retested it with the nRF52840 (PCA10056) and could not reproduce any issues. Do you get this error with all projects (including the basic “Blinking LED”) or only with some specific projects?
support
KeymasterGood to know it works.
With the free option, VS supports custom viewers for watches via the GetCustomViewerList() method. We can easily modify the VisualGDB engine to return an array of DEBUG_CUSTOM_VIEWER structures provided directly by your visualizer. You would then need to figure out how to connect this with the VS internals and let VS load the actual visualizer.
If you want us to figure this out instead and provide you with a simple WPF-based interface for custom viewers, we can do that for a small fee (please contact sales via the support form to get a quote).
support
KeymasterThanks, we’ll keep this in mind when designing our stack analyzer.
The custom real-time transport mechanism is not documented (and is currently only used in our internal tests), so we’ll provide an overview here. First of all, please use this build as it publishes all necessary interfaces properly: http://sysprogs.com/files/tmp/VisualGDB-5.3.7.1760.msi
Then you would need to create a new .Net library in C#, reference the VisualGDBExtensibility.dll assembly and add the following class there:
public class ExtensionFactory : IVisualGDBExtensionFactory { public IVisualGDBBuildExtension CreateBuildExtension(IVisualGDBProjectContext project) => null; public IVisualGDBDebugExtension CreateDebugExtension(IVisualGDBProjectContext project) => new Extension(); public IVisualGDBDesignExtension CreateDesignExtension(IVisualGDBProjectContext project) => null; class DataSource : ICustomRealTimeWatchDataSource { private SerialPortStream _Stream; public event ThreadStart ResetDetected; public event RealTimeWatchDataReceived DataReceived; public void RunFromWorkerThread() { _Stream = new SerialPortStream("COM16"); byte[] data = new byte[65536]; for (; ; ) { int done = _Stream.Read(data, 0, data.Length); DataReceived?.Invoke(data, 0, done); } } public void Stop() => _Stream?.Dispose(); } class Extension : IVisualGDBEmbeddedDebugExtension { public ICustomRealTimeWatchDataSource RealTimeWatchDataSource { get; } = new DataSource(); public void AdjustToolCommandLine(DebugTool debugTool, ref string executable, ref string arguments, ref string workingDirectory) { } public void Dispose() { } public void OnGDBSessionStarting(IGDBSession gdbSession, ref bool bypassNormalStartupCommands) { } } }
Replace the RunFromWorkerThread() method with what makes sense for your implementation. Then add a <ProjectExtension> element to the .vgdbsettings file (under VisualGDBProjectSettings2) pointing to your plugin DLL.
In your application replace the implementation for the SysprogsProfiler_WriteData() function with your own one that will channel the pdcRealTimeAnalysisStream stream over your custom channel. Note that SysprogsProfiler_WriteData() is called with the interrupts disabled, so it should not rely on any interrupt handlers.
As long as the data passed to DataReceived exactly matches what was sent by the profiler framework via calls to SysprogsProfiler_WriteData(), VisualGDB will parse it correctly and the real-time watch GUI (including any custom events used to report your variables) will work.
-
AuthorPosts