Changeset View
Changeset View
Standalone View
Standalone View
debugjob.cpp
Show First 20 Lines • Show All 201 Lines • ▼ Show 20 Line(s) | 201 | { | |||
---|---|---|---|---|---|
202 | qCDebug(KDEV_PHP_DEBUGGER) << "launching?" << m_proc; | 202 | qCDebug(KDEV_PHP_DEBUGGER) << "launching?" << m_proc; | ||
203 | if (m_proc) { | 203 | if (m_proc) { | ||
204 | QString err; | 204 | QString err; | ||
205 | if (!m_session->listenForConnection(err)) { | 205 | if (!m_session->listenForConnection(err)) { | ||
206 | qCWarning(KDEV_PHP_DEBUGGER) << "listening for connection failed"; | 206 | qCWarning(KDEV_PHP_DEBUGGER) << "listening for connection failed"; | ||
207 | setError(-1); | 207 | setError(-1); | ||
208 | setErrorText(err); | 208 | setErrorText(err); | ||
209 | emitResult(); | 209 | emitResult(); | ||
210 | m_session->stopDebugger(); | ||||
210 | return; | 211 | return; | ||
211 | } | 212 | } | ||
212 | 213 | | |||
213 | startOutput(); | 214 | startOutput(); | ||
214 | qCDebug(KDEV_PHP_DEBUGGER) << "starting" << m_proc->program().join(" "); | 215 | qCDebug(KDEV_PHP_DEBUGGER) << "starting" << m_proc->program().join(" "); | ||
215 | appendLine(i18n("Starting: %1", m_proc->program().join(" "))); | 216 | appendLine(i18n("Starting: %1", m_proc->program().join(" "))); | ||
216 | m_proc->start(); | 217 | m_proc->start(); | ||
217 | } else | 218 | } else | ||
218 | { | 219 | { | ||
219 | qCWarning(KDEV_PHP_DEBUGGER) << "No process, something went wrong when creating the job"; | 220 | qCWarning(KDEV_PHP_DEBUGGER) << "No process, something went wrong when creating the job"; | ||
220 | // No process means we've returned early on from the constructor, some bad error happened | 221 | // No process means we've returned early on from the constructor, some bad error happened | ||
221 | emitResult(); | 222 | emitResult(); | ||
223 | m_session->stopDebugger(); | ||||
222 | } | 224 | } | ||
223 | } | 225 | } | ||
224 | 226 | | |||
225 | KProcess* XDebugJob::process() const | 227 | KProcess* XDebugJob::process() const | ||
226 | { | 228 | { | ||
227 | return m_proc; | 229 | return m_proc; | ||
228 | } | 230 | } | ||
229 | 231 | | |||
Show All 17 Lines | 242 | { | |||
247 | } else | 249 | } else | ||
248 | if (error() == KJob::KilledJobError) { | 250 | if (error() == KJob::KilledJobError) { | ||
249 | appendLine(i18n("*** Process aborted ***")); | 251 | appendLine(i18n("*** Process aborted ***")); | ||
250 | } else { | 252 | } else { | ||
251 | appendLine(i18n("*** Crashed with return code: %1 ***", QString::number(exitCode))); | 253 | appendLine(i18n("*** Crashed with return code: %1 ***", QString::number(exitCode))); | ||
252 | } | 254 | } | ||
253 | qCDebug(KDEV_PHP_DEBUGGER) << "Process done"; | 255 | qCDebug(KDEV_PHP_DEBUGGER) << "Process done"; | ||
254 | emitResult(); | 256 | emitResult(); | ||
255 | | ||||
256 | if (m_session && m_session->connection()) { | | |||
257 | m_session->connection()->setState(DebugSession::EndedState); | | |||
258 | } | | |||
259 | } | 257 | } | ||
260 | 258 | | |||
261 | void XDebugJob::processError(QProcess::ProcessError error) | 259 | void XDebugJob::processError(QProcess::ProcessError error) | ||
262 | { | 260 | { | ||
263 | if (error == QProcess::FailedToStart) { | 261 | if (error == QProcess::FailedToStart) { | ||
264 | setError(-1); | 262 | setError(-1); | ||
265 | QString errmsg = i18n("Could not start program '%1'. Make sure that the " | 263 | QString errmsg = i18n("Could not start program '%1'. Make sure that the " | ||
266 | "path is specified correctly.", m_proc->property("executable").toString()); | 264 | "path is specified correctly.", m_proc->property("executable").toString()); | ||
267 | setErrorText(errmsg); | 265 | setErrorText(errmsg); | ||
266 | m_session->stopDebugger(); | ||||
268 | emitResult(); | 267 | emitResult(); | ||
269 | } | 268 | } | ||
270 | qCDebug(KDEV_PHP_DEBUGGER) << "Process error"; | 269 | qCDebug(KDEV_PHP_DEBUGGER) << "Process error"; | ||
271 | | ||||
272 | if (m_session && m_session->connection()) { | | |||
273 | m_session->connection()->setState(DebugSession::EndedState); | | |||
274 | } | | |||
275 | else if(m_session) | | |||
276 | { | | |||
277 | m_session->stateChanged(DebugSession::EndedState); | | |||
278 | m_session->stopDebugger(); | | |||
279 | } | | |||
280 | } | 270 | } | ||
281 | 271 | | |||
282 | void XDebugJob::appendLine(const QString& l) | 272 | void XDebugJob::appendLine(const QString& l) | ||
283 | { | 273 | { | ||
284 | if (KDevelop::OutputModel* m = model()) { | 274 | if (KDevelop::OutputModel* m = model()) { | ||
285 | m->appendLine(l); | 275 | m->appendLine(l); | ||
286 | } | 276 | } | ||
287 | } | 277 | } | ||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Line(s) | 316 | { | |||
331 | } | 321 | } | ||
332 | 322 | | |||
333 | QString err; | 323 | QString err; | ||
334 | if (!m_session->listenForConnection(err)) { | 324 | if (!m_session->listenForConnection(err)) { | ||
335 | qCWarning(KDEV_PHP_DEBUGGER) << "listening for connection failed"; | 325 | qCWarning(KDEV_PHP_DEBUGGER) << "listening for connection failed"; | ||
336 | setError(-1); | 326 | setError(-1); | ||
337 | setErrorText(err); | 327 | setErrorText(err); | ||
338 | emitResult(); | 328 | emitResult(); | ||
329 | m_session->stopDebugger(); | ||||
339 | return; | 330 | return; | ||
340 | } | 331 | } | ||
341 | 332 | | |||
342 | QUrl url = m_url; | 333 | QUrl url = m_url; | ||
343 | url.setQuery("XDEBUG_SESSION_START=kdev"); | 334 | url.setQuery("XDEBUG_SESSION_START=kdev"); | ||
344 | if (m_browser.isEmpty()) { | | |||
345 | if (!QDesktopServices::openUrl(url)) { | | |||
346 | qCWarning(KDEV_PHP_DEBUGGER) << "openUrl failed, something went wrong when creating the job"; | | |||
347 | emitResult(); | | |||
348 | } | | |||
349 | } else { | | |||
350 | KProcess proc(this); | | |||
351 | 335 | | |||
352 | proc.setProgram(QStringList() << m_browser << url.url()); | 336 | launchBrowser(url); | ||
353 | if( !proc.startDetached() ) | | |||
354 | { | | |||
355 | processFailedToStart(); | | |||
356 | } | | |||
357 | } | | |||
358 | } | 337 | } | ||
359 | 338 | | |||
360 | 339 | | |||
361 | void XDebugBrowserJob::processFailedToStart() | 340 | void XDebugBrowserJob::processFailedToStart() | ||
362 | { | 341 | { | ||
363 | qCWarning(KDEV_PHP_DEBUGGER) << "Cannot start application" << m_browser; | 342 | qCWarning(KDEV_PHP_DEBUGGER) << "Cannot start application" << m_browser; | ||
364 | setError(-1); | 343 | setError(-1); | ||
365 | QString errmsg = i18n("Could not start program '%1'. Make sure that the " | 344 | QString errmsg = i18n("Could not start program '%1'. Make sure that the " | ||
366 | "path is specified correctly.", m_browser); | 345 | "path is specified correctly.", m_browser); | ||
367 | setErrorText(errmsg); | 346 | setErrorText(errmsg); | ||
368 | emitResult(); | 347 | emitResult(); | ||
369 | qCDebug(KDEV_PHP_DEBUGGER) << "Process error"; | 348 | qCDebug(KDEV_PHP_DEBUGGER) << "Process error"; | ||
370 | 349 | m_session->stopDebugger(); | |||
371 | if (m_session && m_session->connection()) { | | |||
372 | m_session->connection()->setState(DebugSession::EndedState); | | |||
373 | } | 350 | } | ||
374 | else if(m_session) | 351 | | ||
352 | | ||||
353 | void XDebugBrowserJob::launchBrowser(QUrl &url) | ||||
375 | { | 354 | { | ||
376 | m_session->stateChanged(DebugSession::EndedState); | 355 | if (m_browser.isEmpty()) { | ||
356 | if (!QDesktopServices::openUrl(url)) { | ||||
357 | qCWarning(KDEV_PHP_DEBUGGER) << "openUrl failed, something went wrong when creating the job"; | ||||
358 | emitResult(); | ||||
377 | m_session->stopDebugger(); | 359 | m_session->stopDebugger(); | ||
378 | } | 360 | } | ||
361 | } else { | ||||
362 | KProcess proc(this); | ||||
363 | | ||||
364 | proc.setProgram(QStringList() << m_browser << url.url()); | ||||
365 | if( !proc.startDetached() ) | ||||
366 | { | ||||
367 | processFailedToStart(); | ||||
368 | } | ||||
369 | } | ||||
379 | } | 370 | } | ||
380 | 371 | | |||
381 | bool XDebugBrowserJob::doKill() | 372 | bool XDebugBrowserJob::doKill() | ||
382 | { | 373 | { | ||
383 | qCDebug(KDEV_PHP_DEBUGGER); | 374 | qCDebug(KDEV_PHP_DEBUGGER); | ||
384 | m_session->stopDebugger(); | 375 | m_session->stopDebugger(); | ||
385 | QUrl url = m_url; | 376 | QUrl url = m_url; | ||
386 | url.setQuery("XDEBUG_SESSION_STOP_NO_EXEC=kdev"); | 377 | url.setQuery("XDEBUG_SESSION_STOP_NO_EXEC=kdev"); | ||
387 | QDesktopServices::openUrl(url); | 378 | launchBrowser(url); | ||
388 | return true; | 379 | return true; | ||
389 | } | 380 | } | ||
390 | 381 | | |||
391 | void XDebugBrowserJob::sessionFinished() | 382 | void XDebugBrowserJob::sessionFinished() | ||
392 | { | 383 | { | ||
393 | emitResult(); | 384 | emitResult(); | ||
394 | } | 385 | } | ||
395 | 386 | | |||
396 | } | 387 | } |