https://bugs.kde.org/show_bug.cgi?id=486541
Bug ID: 486541 Summary: Embedded null character and subsequent characters in a watched QString are not displayed while debugging Classification: Applications Product: kdevelop Version: 5.14.240480 Platform: Manjaro OS: Linux Status: REPORTED Severity: normal Priority: NOR Component: CPP Debugger Assignee: kdevelop-bugs-n...@kde.org Reporter: igor...@gmail.com CC: niko.s...@gmail.com Target Milestone: --- STEPS TO REPRODUCE 1. Debug the following (Qt 5) code: ``` QString str = "abcdef"; // (1) str[3] = 0; // (2) ``` 2. Look at the value of `str` before and after the line (2) in Variables tool view and in the debugger tooltip for the variable `str`. 3. Run the GDB command `print str` in GDB tool view before and after the line (2). OBSERVED RESULT 2. The value of `str` is "abcdef" before the line (2) and "abc" after it - both in Variables tool view and in the debugger tooltip. 3. GDB tool view displays `$1 = "abcdef"` before the line (2) and `$2 = "abc\000ef"` after it. Incidentally, the same value is displayed while debugging with GDB in terminal outside of KDevelop but using KDevelop's pretty printers. EXPECTED RESULT The value of `str` is something like "abc\0ef" in Variables tool view, debugger tooltip and GDB tool view. "\000" in GDB tool view is indisputably better than truncating the string, but I think "\0" would be a clearer representation of the null character, at least to C++ developers. ADDITIONAL INFORMATION The bug is present as early as in MIDebugger::readyReadStandardOutput(), where the values of `reply` received from GDB are: 1 (before the line (2)): "35^done,name=\"var0\",numchild=\"0\",value=\"\\\"abcdef\\\"\",type=\"QString\",displayhint=\"string\",dynamic=\"1\",has_more=\"0\"" 2 (after the line (2)): "35^done,name=\"var3\",numchild=\"0\",value=\"\\\"abc\\\"\",type=\"QString\",displayhint=\"string\",dynamic=\"1\",has_more=\"0\"" 3 (GDB tool view after the line (2)): "~\"$1 = \\\"abc\\\\000ef\\\"\\n\"" For some reason, GDB returns only 3 characters "abc" for variable display, but the entire string "abc\000ef" as the reply to the manual GDB print command. After the truncated string value "abc" is read in MIDebugger::readyReadStandardOutput(), it eventually ends up in MIParser::parseStringLiteral() and then is displayed in the UI. The same issue affects QByteArray in almost identical fashion and with practically the same results (except for minor differences because of divergent pretty-printing formats of KDevelop's QStringPrinter and QByteArrayPrinter). -- You are receiving this mail because: You are watching all bug changes.