<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>No exceptions must ever pass the API boundary. Please file a bug report.</p>
<div><br>
</div>
<div><br>
</div>
Christian<br>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> QBS <qbs-bounces+christian.kandeler=theqtcompany.com@qt-project.org> on behalf of Thomas Epting <thomas.epting.stryker@gmail.com><br>
<b>Sent:</b> Saturday, March 26, 2016 12:31 PM<br>
<b>To:</b> qbs@qt-project.org<br>
<b>Subject:</b> [QBS] QtCreator crashes in case of any error in setupRunEnvironment</font>
<div> </div>
</div>
<div>
<div dir="ltr">In case there is any non-syntactical problem with a module's setupRunEnvironment script, QtCreator crashes immediately. As a trivial example, use a module that has a setupRunEnvironment script like this:<br>
<br>
<span style="color:rgb(192,192,192)"></span>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">    </span><span style="color:rgb(128,0,0)">setupRunEnvironment</span>:<span style="color:rgb(192,192,192)"> </span>{</pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">        </span>spark</pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">    </span>}</pre>
<pre style="margin:0px; text-indent:0px"><br></pre>
The reason for the crash is that qbs::RunEnvironment::runEnvironment throws a qbs::ErrorInfo exception ("Error while setting up run environment: ReferenceError: Can't find variable: spark") that is never catched in QtCreator.<br>
<br>
As a quick fix, I added a try/catch block in QbsRunConfiguration::addToBaseEnvironment:<br>
<br>
<span style="color:rgb(192,192,192)"></span>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">        </span><span style="color:rgb(0,0,255)">try</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">{</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">            </span>procEnv<span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">=</span><span style="color:rgb(192,192,192)"> </span>qbsRunEnv<span style="color:rgb(0,0,0)">.</span>runEnvironment<span style="color:rgb(0,0,0)">();</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">            </span><span style="color:rgb(0,0,255)">if</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">(!</span>procEnv<span style="color:rgb(0,0,0)">.</span>isEmpty<span style="color:rgb(0,0,0)">())</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">{</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">                </span><span style="color:rgb(0,0,0)">env</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">=</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(128,0,128)">Utils</span><span style="color:rgb(0,0,0)">::</span><span style="color:rgb(128,0,128)">Environment</span><span style="color:rgb(0,0,0)">();</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">                </span><span style="color:rgb(0,0,255)">foreach</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">(</span><span style="color:rgb(0,0,255)">const</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(128,0,128)">QString</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">&</span><span style="color:rgb(0,0,0)">key</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(192,192,192)"> </span>procEnv<span style="color:rgb(0,0,0)">.</span>keys<span style="color:rgb(0,0,0)">())</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">                    </span><span style="color:rgb(0,0,0)">env</span><span style="color:rgb(0,0,0)">.</span><span style="color:rgb(0,85,255)">set</span><span style="color:rgb(0,0,0)">(</span><span style="color:rgb(0,0,0)">key</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(192,192,192)"> </span>procEnv<span style="color:rgb(0,0,0)">.</span>value<span style="color:rgb(0,0,0)">(</span><span style="color:rgb(0,0,0)">key</span><span style="color:rgb(0,0,0)">));</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">            </span><span style="color:rgb(0,0,0)">}</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">        </span><span style="color:rgb(0,0,0)">}</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,255)">catch</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">(</span><span style="color:rgb(0,0,255)">const</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(128,0,128)">qbs</span><span style="color:rgb(0,0,0)">::</span><span style="color:rgb(128,0,128)">ErrorInfo</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">&</span><span style="color:rgb(0,0,0)">errInfo</span><span style="color:rgb(0,0,0)">)</span><span style="color:rgb(192,192,192)"> </span><span style="color:rgb(0,0,0)">{</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">            </span><span style="color:rgb(128,0,128)">QbsManager</span><span style="color:rgb(0,0,0)">::</span><span style="color:rgb(0,85,255)">logSink</span><span style="color:rgb(0,0,0)">()-></span><span style="color:rgb(0,85,255)">printWarning</span><span style="color:rgb(0,0,0)">(</span><span style="color:rgb(0,0,0)">errInfo</span><span style="color:rgb(0,0,0)">);</span></pre>
<pre style="margin:0px; text-indent:0px"><span style="color:rgb(192,192,192)">        </span><span style="color:rgb(0,0,0)">}</span></pre>
<pre style="margin:0px; text-indent:0px"><br></pre>
But I'm unsure if that's the way it's meant to be. It looks like all other Qbs exceptions are catched within Qbs itself and sent to the log sink. So this could either be treated as a bug in QtCreator or in Qbs.<br>
<br>
<div>Any advice on how to deal with exceptions at the public API of Qbs?<br>
<br>
</div>
<div>Thanks,<br>
</div>
<div>Thomas<br>
<br>
</div>
</div>
</div>
</div>
</div>
</body>
</html>