www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.ide - Visual D error messages not useful

reply FunkyD <MrFunky YourDaddy.com> writes:
Win32\Debug DMD\TestApp.exe not up to date: command line changed
------ Build started: Project: TestApp, Configuration: Debug DMD 
Win32 ------
Building Win32\Debug DMD\TestApp.exe...
         1 file(s) copied.
Building Win32\Debug DMD\TestApp.exe failed!
Details saved as 
"file://C:\TestApp\TestApp\Win32\Debug%20DMD\TestApp.buildlog.html"
Build time: 9 s
Solution build stopped.
Build has been canceled.

I have no idea why my app won't compile. Same stuff in x64 mode. 
It used to compile but it's been a while since I've tried and 
have updated dmd and visual d several times since. Nothing in the 
log

In the html file:

if %errorlevel% neq 0 goto reportError
...
:reportError
echo Building Win32\Debug DMD\TestApp.exe failed!

Which is a useless error message. Can we not get an error message 
that actually helps and also maybe the line number which of the 
html file that has the error?


Suggestions:

1. Replace the error goto's with more useful info such as passing 
the line of the batch file(or some unique id to find it) and also 
the last line that erred(the line above the if statement usually).

2. Possibly first check paths that are used by the compilation 
process and all the exe's used to make sure they exist. Do this 
first before compiling. I'm thinking maybe something changed with 
the windows libraries but I have no idea because the buildlog is 
large and has many of those error goto's that any one could have 
been the problem.


I'm pretty sure you generate the build batch file so you could 
easily automate adding better checking like this(unique id or 
line number) along with printing out the command line that failed 
or whatever fails. Also it should be easy to add a few `if 
exists` type of checks for the various paths used in 
building(both windows stuff and dmd/visual d). Normally these 
checks should pass fine but in some cases they won't and it would 
be helpful to have that info.


Maybe even have a verbose mode that provides more info?
May 12 2020
parent reply Rainer Schuetze <r.sagitario gmx.de> writes:
On 12/05/2020 18:33, FunkyD wrote:
 Win32\Debug DMD\TestApp.exe not up to date: command line changed
 ------ Build started: Project: TestApp, Configuration: Debug DMD Win32
 ------
 Building Win32\Debug DMD\TestApp.exe...
         1 file(s) copied.
I haven't found any invocation of "copy" in the batches generated by Visual D, is that the output of a custom build step?
 Building Win32\Debug DMD\TestApp.exe failed!
 Details saved as
 "file://C:\TestApp\TestApp\Win32\Debug%20DMD\TestApp.buildlog.html"
 Build time: 9 s
 Solution build stopped.
 Build has been canceled.
 
 I have no idea why my app won't compile. Same stuff in x64 mode. It used
 to compile but it's been a while since I've tried and have updated dmd
 and visual d several times since. Nothing in the log
 
 In the html file:
 
 if %errorlevel% neq 0 goto reportError
All usages of this statement follow an invocation of some program that is expected to print its own message on failure. Other similar cases add a message about what is probably wrong.
 ...
 :reportError
 echo Building Win32\Debug DMD\TestApp.exe failed!
 
 Which is a useless error message. Can we not get an error message that
 actually helps and also maybe the line number which of the html file
 that has the error?
 
The html file is just a capture of the output pane.
 
 Suggestions:
 
 1. Replace the error goto's with more useful info such as passing the
 line of the batch file(or some unique id to find it) and also the last
 line that erred(the line above the if statement usually).
 
 2. Possibly first check paths that are used by the compilation process
 and all the exe's used to make sure they exist. Do this first before
 compiling. I'm thinking maybe something changed with the windows
 libraries but I have no idea because the buildlog is large and has many
 of those error goto's that any one could have been the problem.
 
Indeed there might be cases where the invoked executable is not found by the system, and the cmd interpreter just reports "command not found" or similar without telling what comamnd is invoked. Retrying that now, it seems that has changed, maybe with recent Windows versions.
 
 I'm pretty sure you generate the build batch file so you could easily
 automate adding better checking like this(unique id or line number)
 along with printing out the command line that failed or whatever fails.
 Also it should be easy to add a few `if exists` type of checks for the
 various paths used in building(both windows stuff and dmd/visual d).
 Normally these checks should pass fine but in some cases they won't and
 it would be helpful to have that info.
 
 
 Maybe even have a verbose mode that provides more info?
You can run the generated batch (e.g. Debug\TestApp.build.cmd) from the command line (from the folder of the project). This will echo the executed commands to the console. Maybe an option to show this output in the output window would help.
May 13 2020
parent FunkyD <MrFunky YourDaddy.com> writes:
On Thursday, 14 May 2020 at 06:37:46 UTC, Rainer Schuetze wrote:
 On 12/05/2020 18:33, FunkyD wrote:
 Win32\Debug DMD\TestApp.exe not up to date: command line 
 changed
 ------ Build started: Project: TestApp, Configuration: Debug 
 DMD Win32
 ------
 Building Win32\Debug DMD\TestApp.exe...
         1 file(s) copied.
I haven't found any invocation of "copy" in the batches generated by Visual D, is that the output of a custom build step?
Yes, but it is just a copy, it doesn't fail and has nothing to do with the problems below.
 Building Win32\Debug DMD\TestApp.exe failed!
 Details saved as
 "file://C:\TestApp\TestApp\Win32\Debug%20DMD\TestApp.buildlog.html"
 Build time: 9 s
 Solution build stopped.
 Build has been canceled.
 
 I have no idea why my app won't compile. Same stuff in x64 
 mode. It used to compile but it's been a while since I've 
 tried and have updated dmd and visual d several times since. 
 Nothing in the log
 
 In the html file:
 
 if %errorlevel% neq 0 goto reportError
All usages of this statement follow an invocation of some program that is expected to print its own message on failure.
The problem is if those programs are missing then no error is reported or if they don't report errors. As I said, I have no idea which reportError is being called. If you were to generate a simple verbose stepping so that at the very least one would get something like: Error 3: which would be empty but I would be able to go to the 3rd error and look at the line above it to see what is going on: ... if %errorlevel% neq 0 ( echo error 3 goto reportError)
 Other similar cases add a message about what is probably wrong.
I copied exactly the error output and as you can see nothing is telling me what is wrong. I literally have zero idea what it could be. I copy a file but that clearly is not failing. You could also add some text to partition off the build steps. ----- Custom Prebuild commands ---- ...Whatever... ----------------------------------- ----- Compiling ---- ...Whatever... ----------------------------------- etc...
 ...
 :reportError
 echo Building Win32\Debug DMD\TestApp.exe failed!
 
 Which is a useless error message. Can we not get an error 
 message that actually helps and also maybe the line number 
 which of the html file that has the error?
 
The html file is just a capture of the output pane.
Surely not, the html file is a batch file. It looks like the TestApp.build.cmd file. The output pane is what I copied and pasted in the OP. It is very uninformative. I'm suggesting that you modify the generation of the .build.cmd file to print better error diagnostics and tracking.
 
 Suggestions:
 
 1. Replace the error goto's with more useful info such as 
 passing the
 line of the batch file(or some unique id to find it) and also 
 the last
 line that erred(the line above the if statement usually).
 
 2. Possibly first check paths that are used by the compilation 
 process and all the exe's used to make sure they exist. Do 
 this first before compiling. I'm thinking maybe something 
 changed with the windows libraries but I have no idea because 
 the buildlog is large and has many of those error goto's that 
 any one could have been the problem.
 
Indeed there might be cases where the invoked executable is not found by the system, and the cmd interpreter just reports "command not found" or similar without telling what comamnd is invoked. Retrying that now, it seems that has changed, maybe with recent Windows versions.
Not sure, I sorta always have this problem with visual D when I don't use it for a while and come back and get some error and then have to track down what changed. Usually it seems to be an issue with DMD or windows SDK changes. (cause usually I had to update the SDK or I update DMD since a new version came out)
 
 I'm pretty sure you generate the build batch file so you could 
 easily automate adding better checking like this(unique id or 
 line number) along with printing out the command line that 
 failed or whatever fails. Also it should be easy to add a few 
 `if exists` type of checks for the various paths used in 
 building(both windows stuff and dmd/visual d). Normally these 
 checks should pass fine but in some cases they won't and it 
 would be helpful to have that info.
 
 
 Maybe even have a verbose mode that provides more info?
You can run the generated batch (e.g. Debug\TestApp.build.cmd) from the command line (from the folder of the project). This will echo the executed commands to the console. Maybe an option to show this output in the output window would help.
Yes, it might, but I'd still like a little better error handling because it still might be a lot to sift through otherwise. I think making sure all paths contain the appropriate files required would be of great benefit so that when SDK's change or whatever it catches them and prints a meaningful error message. It should be quite simple to do. You could have a verbose output flag that adds all this or always add the error checks and then verbosity could print out the full output. It can't hurt to have extra validity checks and some "line numbering" for the errors so when things don't output we at least have some connection. ------------- When I run the cmd I do get an error from the pipedmd command: std.file.FileException std\file.d(4602): x64\Debug DMD: The system cannot find the path specified. also I see a lot of The system cannot find the path specified. but it seems I have to run it in the base dir... because the paths are relative to it.... ----- Ok, so now when I run it at the pipedmd I get a dmd windows crash. I have no idea why. ------------ So, it seems dmd.exe is crashing(possibly a compiler fault which is a regression). Pipedmd isn't catching that it is crashing in any meaningful way but just errors out. So basically I'm stuck with an app that won't compile because dmd seems to be faulting and I have no info why. (Used to dmd would print some diagnostic errors)
May 15 2020