Xml parsing exception on relative path with Eclipse gdb DSF debug - c++

I'm using Eclipse Mars, with gdb 7.2.
While trying to debug a C++ application in Eclipse gdb DSF, I'm getting a parse exception. But I don't get the parse exception when I run the same program with gdb outside of Eclipse.
The exception states: "Fatal error during XML Parsing: unable to open primary document entity /path/to/file.xml"
But the actual path in xml is a relative path: "../../../../path/to/file.xml".
The C++ application is reading in the XML and trying to open this file.
It's as if the ../..'s are just getting chopped off, and that's why the error states essentially "I don't know about a /path/to/file.xml"
I imagine that something is wrong with my gdb setup in Eclipse, but I'm not sure what. I've tried many different things, none of which seem to work.
I imagine that this has something to do with relative paths not being recognized by gdb, or the working path being different in Eclipse vs gdb.
Does anyone have an idea what is wrong?

You need to make sure the Working Directory matches the location of the executable in the File System.
https://sourceware.org/gdb/onlinedocs/gdb/Working-Directory.html

Actually, this was a simple issue: It turns out that my Working Directory(in Debug Configurations under the Arguments tab) had to be set to the full path of the location of my executable.
I also had to set the path of my executable to the full File System path of the executable.
It works as expected now.

Related

QtCreator: How to make builderrors from cmake->ninja show in issues panel in "Makefile project"

I use qtcreator and have imported my project with New->Import Existing Project (this is the kind of project i need help with).
When compiling and having errors, the error messages shows up in the "Compile Output"-panel like so:
In file included from ../../src/tasklist.cpp:1:
../../src/tasklist.h:74:9: error: expected member name or ';' after declaration specifiers
But because file paths is specified relative to the build path and not to the root path, qtcreator fails to parse the messages and put annotations in code and in the "Issues"-panel. This slows work considerably compared to having the errors marked out by the editor.
How do I make qtcreator recognize the paths in the error message?
I'm running ubuntu, but the problem exists also when i compile with ninja in windows.
I have tried to write a custom error matcher, that picks up the pattern in the editor view, but it does not seem to run, when building. The build is also set to the directory where the compiler messages assumes that you originate from.
I've currently got it working with the following custom error message capture pattern:
(.*):(\d+):\d+: error: (.*)
My build folder is in a custom location, so I believe it's handling the file paths correctly.
If the parser doesn't seem to be running at all, then I don't think the file paths are the problem. For example, if I change my custom parser so the filename and line number are swapped, the parser still runs, but when I double-click the issue in the "Issues" panel, it says something like "File not found: 5". So, if the file paths are the only problem, it should still parse into issues.

How to use Instruments Time Profiler with Executable

I'm trying to use Mac Instruments Time Profiler to optimize my code for building a MandelBox. I found how to make my executable my target process, but when the program runs, it gives me an error in the Console window saying it cannot find the .txt file associated with the program.
Do I need to tell the profiler where to look to find the file? The text file is already in the same directory as the executable. Any thoughts? Thanks.
This problem is not unique to Instruments. The same thing would presumably happen if your current working directory was something other than the location of your program. For example, if you were to do cd / ; /path/to/yourprogram.
You either need to make your program find its own location and then find its text file as a sibling in the containing directory or take the path of the text file as an argument. Or, you will always have to set the working directory to your program's location before invoking it.
That last approach is an immediate workaround for the problem with Instruments. On the panel where you choose the target executable, you can also configure various parameters, such as arguments, environment variables, and the working directory. Set the working directory to the directory that contains the text file and it should work.

Not able to set breakpoints in gdb

My C++ project folder structure is as shown below.
I am trying to debug the program using gdb in my linux machine. My main function is in g2o.cpp which is inside g2o_cli folder. I am able to put breakpoints in the files in this folder by
break g2o.cpp:<line_number>
But I am not able to put breakpoints in the files in other folders, for example, a file optimizer.cpp in the 'core' folder. I tried giving the absolute path from my home directory
break ~/HOME/g2o/core/optimizer.cpp:<line_number>
but it is giving an error
No source file named ~/HOME/g2o/core/optimizer.cpp
I also tried ../../core/optimizer.cpp instead of the absolute path. Still it did not work.
I saw a similar question here. But none of the possible reasons mentioned in the answer is applicable in my case. The file optimizer.cpp is not a shared library and the entire project was compiled using cmake.
How does gdb take folder paths? How can I give the relative folder path?
A dirty hack you can use on x86 is to use int3. Just use the statement asm volatile ("int 3"); in the code where you want the breakpoint.

C++ profiler which shows the call path of specific part of program

I'm wondering if there is a way to see the call path of specific part in c++ program. I'm working in open source code where it contains of many libraries. I tries to follow the code from the path I end up in a template. So if there such a library or profiler to show the call path for just specific part of the code?
Thanks!
Compile application with full debug info, issue a fatal exception in place of interest and do the stack backtracking to console with full call path - source file names and line numbers (if available). Profilers will not be able to do that themselves if there is not enough debug information

Codeblocks cannot create output directory

I'm using Code::Blocks 12.11 in Widnows XP. I've been learning C++, so I haven't been working on any specific projects, just individual files. I'm trying to debug one of these files, but found from this question that I needed to be in a project in order to debug. So, I created a project for all of my C++ practice files. Now, when I try to debug (or run) the program, Code::Blocks gives me this error: "Can't create output directory bin\Debug.
When I remove the file from the project it still gives me this error. What can I do to try to fix this so that the program can run and debug?
Additional information:
In Settings>Compiler>Global Compiler Settings>Compiler Settings>Compiler Flags, I have enabled "Produce debugging symbols [-g]". This is something that a lot of other resources I've checked have mentioned.
Also, under Debug>Active Debuggers, I've tried using both debuggers, both of which produce the same error message.
Why don't you try to remove the entire project directory, create an empty project and then place the source files one by one into the project. Beware if you have a main() method in each of your source files.
Well, a friend of mine was getting the same error. So I decided to check it out.
I my case, the error was because of the account user name.
When I checked, the output directory while creating the file and the one in the error being shown, were different.
When I checked, I created an user account name with "$aaa$", and I got the same error.
and I noticed that the error was because of the "$" sign. (Probably).
So, I guess the problem is with the user name. Try changing the user name to something simple.