Forum Replies Created
-
AuthorPosts
-
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.
support
KeymasterThe hang could be caused by an issue we recently discovered and fixed. Please try this build: http://sysprogs.com/files/tmp/VisualGDB-5.3.7.1759.msi
If the problem persists, please try checking the gdb log for the last commands issued by VisualGDB (you can enable diagnostic gdb logging via the Advanced GDB Settings page of VisualGDB Project Properties).
support
KeymasterHi,
Static libraries are just archives containing multiple .o files. As their creation does not involve linking (i.e. combining multiple .o files into a single image), no .map file can be generated for them.
support
KeymasterCould you confirm that running the same gdb commands manually (in a gdb instance started from command line) works? If yes, please share the full gdb log (can be enabled on the Advanced GDB Settings page of VisualGDB Project Properties) and we will investigate.
August 29, 2017 at 04:36 in reply to: Problem with Segger_RTT_printf functionI cannot get the SEGGER_RTT_printf() func #12205support
KeymasterHi,
Good to know it works. If you encounter further issues, feel free to start another topic.
support
KeymasterHi,
VisualGDB takes the list of supported devices from the MCU.CSV file in the Segger Software directory.
It looks like the nRF52840_xxAA device is supported, but not listed there. We will contact Segger support for clarification. As a workaround, please try adding an entry to the CSV file manually so that VisualGDB can recognize it.
support
KeymasterHi,
This could be caused by a bug somewhere in the code (e.g. uninitialized variable or missing ‘volatile’ keyword) that only takes effect when the code is optimized. We would advise locating the code responsible for setting the hardware registers and stepping through it in disassembly mode to understand what is going on.
support
KeymasterHi,
Looks like you are using an older v5.3 Preview build. Please try updating to the latest Preview 7.
-
AuthorPosts