Tutorial: C++ debugging

This tutorial uses the TextFinder example to illustrate how to debug Qt C++ applications in the Debug mode.

TextFinder reads a text file into QString and then displays it with QTextEdit. To look at the TextFinder class and see the stored data:

  1. In textfinder.cpp, click between the line number and the window border on the line where we change the cursor position to set a breakpoint.

    Setting a breakpoint in the editor

  2. Go to Debug > Start Debugging > Start Debugging of Startup Project or select F5.
  3. To view information about the breakpoint, go to the Breakpoints view.

    Viewing breakpoint details in the Breakpoints view

  4. To remove a breakpoint, right-click it and select Delete Breakpoint.
  5. To view the base classes and data members of the TextFinder class, go to the Locals view.

    Viewing the base classes and data members of a class

Modify the on_findButton_clicked() function to move back to the start of the document and continue searching once the cursor hits the end of the document. Add the following code snippet:

 void TextFinder::on_findButton_clicked()
 {
     QString searchString = ui->lineEdit->text();

     QTextDocument *document = ui->textEdit->document();
     QTextCursor cursor = ui->textEdit->textCursor();
     cursor = document->find(searchString, cursor,
         QTextDocument::FindWholeWords);
     ui->textEdit->setTextCursor(cursor);

     bool found = cursor.isNull();

     if (!found && previouslyFound) {
         int ret = QMessageBox::question(this, tr("End of Document"),
         tr("I have reached the end of the document. Would you like "
         "me to start searching from the beginning of the document?"),
         QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);

         if (ret == QMessageBox::Yes) {
             cursor = document->find(searchString,
                 QTextDocument::FindWholeWords);
             ui->textEdit->setTextCursor(cursor);
         } else
             return;
     }
     previouslyFound = found;
 }

If you compile and run the above code, however, the application does not work correctly due to a logic error. To locate this logic error, step through the code using the following buttons: (Stop Debugger), (Step Over), (Step Into), and (Step Out).

See also Tutorial: Qt Widgets application, Debugging, Debuggers, and Debugger.