1 /* Python pretty-printing 2 3 Copyright (C) 2008-2020 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include "objfiles.h" 22 #include "symtab.h" 23 #include "language.h" 24 #include "valprint.h" 25 #include "extension-priv.h" 26 #include "python.h" 27 #include "python-internal.h" 28 #include "cli/cli-style.h" 29 30 /* Return type of print_string_repr. */ 31 32 enum string_repr_result 33 { 34 /* The string method returned None. */ 35 string_repr_none, 36 /* The string method had an error. */ 37 string_repr_error, 38 /* Everything ok. */ 39 string_repr_ok 40 }; 41 42 /* Helper function for find_pretty_printer which iterates over a list, 43 calls each function and inspects output. This will return a 44 printer object if one recognizes VALUE. If no printer is found, it 45 will return None. On error, it will set the Python error and 46 return NULL. */ 47 48 static gdbpy_ref<> 49 search_pp_list (PyObject *list, PyObject *value) 50 { 51 Py_ssize_t pp_list_size, list_index; 52 53 pp_list_size = PyList_Size (list); 54 for (list_index = 0; list_index < pp_list_size; list_index++) 55 { 56 PyObject *function = PyList_GetItem (list, list_index); 57 if (! function) 58 return NULL; 59 60 /* Skip if disabled. */ 61 if (PyObject_HasAttr (function, gdbpy_enabled_cst)) 62 { 63 gdbpy_ref<> attr (PyObject_GetAttr (function, gdbpy_enabled_cst)); 64 int cmp; 65 66 if (attr == NULL) 67 return NULL; 68 cmp = PyObject_IsTrue (attr.get ()); 69 if (cmp == -1) 70 return NULL; 71 72 if (!cmp) 73 continue; 74 } 75 76 gdbpy_ref<> printer (PyObject_CallFunctionObjArgs (function, value, 77 NULL)); 78 if (printer == NULL) 79 return NULL; 80 else if (printer != Py_None) 81 return printer; 82 } 83 84 return gdbpy_ref<>::new_reference (Py_None); 85 } 86 87 /* Subroutine of find_pretty_printer to simplify it. 88 Look for a pretty-printer to print VALUE in all objfiles. 89 The result is NULL if there's an error and the search should be terminated. 90 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found. 91 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */ 92 93 static PyObject * 94 find_pretty_printer_from_objfiles (PyObject *value) 95 { 96 for (objfile *obj : current_program_space->objfiles ()) 97 { 98 gdbpy_ref<> objf = objfile_to_objfile_object (obj); 99 if (objf == NULL) 100 { 101 /* Ignore the error and continue. */ 102 PyErr_Clear (); 103 continue; 104 } 105 106 gdbpy_ref<> pp_list (objfpy_get_printers (objf.get (), NULL)); 107 gdbpy_ref<> function (search_pp_list (pp_list.get (), value)); 108 109 /* If there is an error in any objfile list, abort the search and exit. */ 110 if (function == NULL) 111 return NULL; 112 113 if (function != Py_None) 114 return function.release (); 115 } 116 117 Py_RETURN_NONE; 118 } 119 120 /* Subroutine of find_pretty_printer to simplify it. 121 Look for a pretty-printer to print VALUE in the current program space. 122 The result is NULL if there's an error and the search should be terminated. 123 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found. 124 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */ 125 126 static gdbpy_ref<> 127 find_pretty_printer_from_progspace (PyObject *value) 128 { 129 gdbpy_ref<> obj = pspace_to_pspace_object (current_program_space); 130 131 if (obj == NULL) 132 return NULL; 133 gdbpy_ref<> pp_list (pspy_get_printers (obj.get (), NULL)); 134 return search_pp_list (pp_list.get (), value); 135 } 136 137 /* Subroutine of find_pretty_printer to simplify it. 138 Look for a pretty-printer to print VALUE in the gdb module. 139 The result is NULL if there's an error and the search should be terminated. 140 The result is Py_None, suitably inc-ref'd, if no pretty-printer was found. 141 Otherwise the result is the pretty-printer function, suitably inc-ref'd. */ 142 143 static gdbpy_ref<> 144 find_pretty_printer_from_gdb (PyObject *value) 145 { 146 /* Fetch the global pretty printer list. */ 147 if (gdb_python_module == NULL 148 || ! PyObject_HasAttrString (gdb_python_module, "pretty_printers")) 149 return gdbpy_ref<>::new_reference (Py_None); 150 gdbpy_ref<> pp_list (PyObject_GetAttrString (gdb_python_module, 151 "pretty_printers")); 152 if (pp_list == NULL || ! PyList_Check (pp_list.get ())) 153 return gdbpy_ref<>::new_reference (Py_None); 154 155 return search_pp_list (pp_list.get (), value); 156 } 157 158 /* Find the pretty-printing constructor function for VALUE. If no 159 pretty-printer exists, return None. If one exists, return a new 160 reference. On error, set the Python error and return NULL. */ 161 162 static gdbpy_ref<> 163 find_pretty_printer (PyObject *value) 164 { 165 /* Look at the pretty-printer list for each objfile 166 in the current program-space. */ 167 gdbpy_ref<> function (find_pretty_printer_from_objfiles (value)); 168 if (function == NULL || function != Py_None) 169 return function; 170 171 /* Look at the pretty-printer list for the current program-space. */ 172 function = find_pretty_printer_from_progspace (value); 173 if (function == NULL || function != Py_None) 174 return function; 175 176 /* Look at the pretty-printer list in the gdb module. */ 177 return find_pretty_printer_from_gdb (value); 178 } 179 180 /* Pretty-print a single value, via the printer object PRINTER. 181 If the function returns a string, a PyObject containing the string 182 is returned. If the function returns Py_NONE that means the pretty 183 printer returned the Python None as a value. Otherwise, if the 184 function returns a value, *OUT_VALUE is set to the value, and NULL 185 is returned. On error, *OUT_VALUE is set to NULL, NULL is 186 returned, with a python exception set. */ 187 188 static gdbpy_ref<> 189 pretty_print_one_value (PyObject *printer, struct value **out_value) 190 { 191 gdbpy_ref<> result; 192 193 *out_value = NULL; 194 try 195 { 196 if (!PyObject_HasAttr (printer, gdbpy_to_string_cst)) 197 result = gdbpy_ref<>::new_reference (Py_None); 198 else 199 { 200 result.reset (PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst, 201 NULL)); 202 if (result != NULL) 203 { 204 if (! gdbpy_is_string (result.get ()) 205 && ! gdbpy_is_lazy_string (result.get ()) 206 && result != Py_None) 207 { 208 *out_value = convert_value_from_python (result.get ()); 209 if (PyErr_Occurred ()) 210 *out_value = NULL; 211 result = NULL; 212 } 213 } 214 } 215 } 216 catch (const gdb_exception &except) 217 { 218 } 219 220 return result; 221 } 222 223 /* Return the display hint for the object printer, PRINTER. Return 224 NULL if there is no display_hint method, or if the method did not 225 return a string. On error, print stack trace and return NULL. On 226 success, return an xmalloc()d string. */ 227 gdb::unique_xmalloc_ptr<char> 228 gdbpy_get_display_hint (PyObject *printer) 229 { 230 gdb::unique_xmalloc_ptr<char> result; 231 232 if (! PyObject_HasAttr (printer, gdbpy_display_hint_cst)) 233 return NULL; 234 235 gdbpy_ref<> hint (PyObject_CallMethodObjArgs (printer, gdbpy_display_hint_cst, 236 NULL)); 237 if (hint != NULL) 238 { 239 if (gdbpy_is_string (hint.get ())) 240 { 241 result = python_string_to_host_string (hint.get ()); 242 if (result == NULL) 243 gdbpy_print_stack (); 244 } 245 } 246 else 247 gdbpy_print_stack (); 248 249 return result; 250 } 251 252 /* A wrapper for gdbpy_print_stack that ignores MemoryError. */ 253 254 static void 255 print_stack_unless_memory_error (struct ui_file *stream) 256 { 257 if (PyErr_ExceptionMatches (gdbpy_gdb_memory_error)) 258 { 259 gdbpy_err_fetch fetched_error; 260 gdb::unique_xmalloc_ptr<char> msg = fetched_error.to_string (); 261 262 if (msg == NULL || *msg == '\0') 263 fprintf_styled (stream, metadata_style.style (), 264 _("<error reading variable>")); 265 else 266 fprintf_styled (stream, metadata_style.style (), 267 _("<error reading variable: %s>"), msg.get ()); 268 } 269 else 270 gdbpy_print_stack (); 271 } 272 273 /* Helper for gdbpy_apply_val_pretty_printer which calls to_string and 274 formats the result. */ 275 276 static enum string_repr_result 277 print_string_repr (PyObject *printer, const char *hint, 278 struct ui_file *stream, int recurse, 279 const struct value_print_options *options, 280 const struct language_defn *language, 281 struct gdbarch *gdbarch) 282 { 283 struct value *replacement = NULL; 284 enum string_repr_result result = string_repr_ok; 285 286 gdbpy_ref<> py_str = pretty_print_one_value (printer, &replacement); 287 if (py_str != NULL) 288 { 289 if (py_str == Py_None) 290 result = string_repr_none; 291 else if (gdbpy_is_lazy_string (py_str.get ())) 292 { 293 CORE_ADDR addr; 294 long length; 295 struct type *type; 296 gdb::unique_xmalloc_ptr<char> encoding; 297 struct value_print_options local_opts = *options; 298 299 gdbpy_extract_lazy_string (py_str.get (), &addr, &type, 300 &length, &encoding); 301 302 local_opts.addressprint = 0; 303 val_print_string (type, encoding.get (), addr, (int) length, 304 stream, &local_opts); 305 } 306 else 307 { 308 gdbpy_ref<> string 309 = python_string_to_target_python_string (py_str.get ()); 310 if (string != NULL) 311 { 312 char *output; 313 long length; 314 struct type *type; 315 316 output = PyBytes_AS_STRING (string.get ()); 317 length = PyBytes_GET_SIZE (string.get ()); 318 type = builtin_type (gdbarch)->builtin_char; 319 320 if (hint && !strcmp (hint, "string")) 321 LA_PRINT_STRING (stream, type, (gdb_byte *) output, 322 length, NULL, 0, options); 323 else 324 fputs_filtered (output, stream); 325 } 326 else 327 { 328 result = string_repr_error; 329 print_stack_unless_memory_error (stream); 330 } 331 } 332 } 333 else if (replacement) 334 { 335 struct value_print_options opts = *options; 336 337 opts.addressprint = 0; 338 common_val_print (replacement, stream, recurse, &opts, language); 339 } 340 else 341 { 342 result = string_repr_error; 343 print_stack_unless_memory_error (stream); 344 } 345 346 return result; 347 } 348 349 /* Helper for gdbpy_apply_val_pretty_printer that formats children of the 350 printer, if any exist. If is_py_none is true, then nothing has 351 been printed by to_string, and format output accordingly. */ 352 static void 353 print_children (PyObject *printer, const char *hint, 354 struct ui_file *stream, int recurse, 355 const struct value_print_options *options, 356 const struct language_defn *language, 357 int is_py_none) 358 { 359 int is_map, is_array, done_flag, pretty; 360 unsigned int i; 361 362 if (! PyObject_HasAttr (printer, gdbpy_children_cst)) 363 return; 364 365 /* If we are printing a map or an array, we want some special 366 formatting. */ 367 is_map = hint && ! strcmp (hint, "map"); 368 is_array = hint && ! strcmp (hint, "array"); 369 370 gdbpy_ref<> children (PyObject_CallMethodObjArgs (printer, gdbpy_children_cst, 371 NULL)); 372 if (children == NULL) 373 { 374 print_stack_unless_memory_error (stream); 375 return; 376 } 377 378 gdbpy_ref<> iter (PyObject_GetIter (children.get ())); 379 if (iter == NULL) 380 { 381 print_stack_unless_memory_error (stream); 382 return; 383 } 384 385 /* Use the prettyformat_arrays option if we are printing an array, 386 and the pretty option otherwise. */ 387 if (is_array) 388 pretty = options->prettyformat_arrays; 389 else 390 { 391 if (options->prettyformat == Val_prettyformat) 392 pretty = 1; 393 else 394 pretty = options->prettyformat_structs; 395 } 396 397 done_flag = 0; 398 for (i = 0; i < options->print_max; ++i) 399 { 400 PyObject *py_v; 401 const char *name; 402 403 gdbpy_ref<> item (PyIter_Next (iter.get ())); 404 if (item == NULL) 405 { 406 if (PyErr_Occurred ()) 407 print_stack_unless_memory_error (stream); 408 /* Set a flag so we can know whether we printed all the 409 available elements. */ 410 else 411 done_flag = 1; 412 break; 413 } 414 415 if (! PyTuple_Check (item.get ()) || PyTuple_Size (item.get ()) != 2) 416 { 417 PyErr_SetString (PyExc_TypeError, 418 _("Result of children iterator not a tuple" 419 " of two elements.")); 420 gdbpy_print_stack (); 421 continue; 422 } 423 if (! PyArg_ParseTuple (item.get (), "sO", &name, &py_v)) 424 { 425 /* The user won't necessarily get a stack trace here, so provide 426 more context. */ 427 if (gdbpy_print_python_errors_p ()) 428 fprintf_unfiltered (gdb_stderr, 429 _("Bad result from children iterator.\n")); 430 gdbpy_print_stack (); 431 continue; 432 } 433 434 /* Print initial "{". For other elements, there are three 435 cases: 436 1. Maps. Print a "," after each value element. 437 2. Arrays. Always print a ",". 438 3. Other. Always print a ",". */ 439 if (i == 0) 440 { 441 if (is_py_none) 442 fputs_filtered ("{", stream); 443 else 444 fputs_filtered (" = {", stream); 445 } 446 447 else if (! is_map || i % 2 == 0) 448 fputs_filtered (pretty ? "," : ", ", stream); 449 450 /* In summary mode, we just want to print "= {...}" if there is 451 a value. */ 452 if (options->summary) 453 { 454 /* This increment tricks the post-loop logic to print what 455 we want. */ 456 ++i; 457 /* Likewise. */ 458 pretty = 0; 459 break; 460 } 461 462 if (! is_map || i % 2 == 0) 463 { 464 if (pretty) 465 { 466 fputs_filtered ("\n", stream); 467 print_spaces_filtered (2 + 2 * recurse, stream); 468 } 469 else 470 wrap_here (n_spaces (2 + 2 *recurse)); 471 } 472 473 if (is_map && i % 2 == 0) 474 fputs_filtered ("[", stream); 475 else if (is_array) 476 { 477 /* We print the index, not whatever the child method 478 returned as the name. */ 479 if (options->print_array_indexes) 480 fprintf_filtered (stream, "[%d] = ", i); 481 } 482 else if (! is_map) 483 { 484 fputs_filtered (name, stream); 485 fputs_filtered (" = ", stream); 486 } 487 488 if (gdbpy_is_lazy_string (py_v)) 489 { 490 CORE_ADDR addr; 491 struct type *type; 492 long length; 493 gdb::unique_xmalloc_ptr<char> encoding; 494 struct value_print_options local_opts = *options; 495 496 gdbpy_extract_lazy_string (py_v, &addr, &type, &length, &encoding); 497 498 local_opts.addressprint = 0; 499 val_print_string (type, encoding.get (), addr, (int) length, stream, 500 &local_opts); 501 } 502 else if (gdbpy_is_string (py_v)) 503 { 504 gdb::unique_xmalloc_ptr<char> output; 505 506 output = python_string_to_host_string (py_v); 507 if (!output) 508 gdbpy_print_stack (); 509 else 510 fputs_filtered (output.get (), stream); 511 } 512 else 513 { 514 struct value *value = convert_value_from_python (py_v); 515 516 if (value == NULL) 517 { 518 gdbpy_print_stack (); 519 error (_("Error while executing Python code.")); 520 } 521 else 522 { 523 /* When printing the key of a map we allow one additional 524 level of depth. This means the key will print before the 525 value does. */ 526 struct value_print_options opt = *options; 527 if (is_map && i % 2 == 0 528 && opt.max_depth != -1 529 && opt.max_depth < INT_MAX) 530 ++opt.max_depth; 531 common_val_print (value, stream, recurse + 1, &opt, language); 532 } 533 } 534 535 if (is_map && i % 2 == 0) 536 fputs_filtered ("] = ", stream); 537 } 538 539 if (i) 540 { 541 if (!done_flag) 542 { 543 if (pretty) 544 { 545 fputs_filtered ("\n", stream); 546 print_spaces_filtered (2 + 2 * recurse, stream); 547 } 548 fputs_filtered ("...", stream); 549 } 550 if (pretty) 551 { 552 fputs_filtered ("\n", stream); 553 print_spaces_filtered (2 * recurse, stream); 554 } 555 fputs_filtered ("}", stream); 556 } 557 } 558 559 enum ext_lang_rc 560 gdbpy_apply_val_pretty_printer (const struct extension_language_defn *extlang, 561 struct value *value, 562 struct ui_file *stream, int recurse, 563 const struct value_print_options *options, 564 const struct language_defn *language) 565 { 566 struct type *type = value_type (value); 567 struct gdbarch *gdbarch = get_type_arch (type); 568 enum string_repr_result print_result; 569 570 if (value_lazy (value)) 571 value_fetch_lazy (value); 572 573 /* No pretty-printer support for unavailable values. */ 574 if (!value_bytes_available (value, 0, TYPE_LENGTH (type))) 575 return EXT_LANG_RC_NOP; 576 577 if (!gdb_python_initialized) 578 return EXT_LANG_RC_NOP; 579 580 gdbpy_enter enter_py (gdbarch, language); 581 582 gdbpy_ref<> val_obj (value_to_value_object_no_release (value)); 583 if (val_obj == NULL) 584 { 585 print_stack_unless_memory_error (stream); 586 return EXT_LANG_RC_ERROR; 587 } 588 589 /* Find the constructor. */ 590 gdbpy_ref<> printer (find_pretty_printer (val_obj.get ())); 591 if (printer == NULL) 592 { 593 print_stack_unless_memory_error (stream); 594 return EXT_LANG_RC_ERROR; 595 } 596 597 if (printer == Py_None) 598 return EXT_LANG_RC_NOP; 599 600 if (val_print_check_max_depth (stream, recurse, options, language)) 601 return EXT_LANG_RC_OK; 602 603 /* If we are printing a map, we want some special formatting. */ 604 gdb::unique_xmalloc_ptr<char> hint (gdbpy_get_display_hint (printer.get ())); 605 606 /* Print the section */ 607 print_result = print_string_repr (printer.get (), hint.get (), stream, 608 recurse, options, language, gdbarch); 609 if (print_result != string_repr_error) 610 print_children (printer.get (), hint.get (), stream, recurse, options, 611 language, print_result == string_repr_none); 612 613 if (PyErr_Occurred ()) 614 print_stack_unless_memory_error (stream); 615 return EXT_LANG_RC_OK; 616 } 617 618 619 /* Apply a pretty-printer for the varobj code. PRINTER_OBJ is the 620 print object. It must have a 'to_string' method (but this is 621 checked by varobj, not here) which takes no arguments and 622 returns a string. The printer will return a value and in the case 623 of a Python string being returned, this function will return a 624 PyObject containing the string. For any other type, *REPLACEMENT is 625 set to the replacement value and this function returns NULL. On 626 error, *REPLACEMENT is set to NULL and this function also returns 627 NULL. */ 628 gdbpy_ref<> 629 apply_varobj_pretty_printer (PyObject *printer_obj, 630 struct value **replacement, 631 struct ui_file *stream) 632 { 633 *replacement = NULL; 634 gdbpy_ref<> py_str = pretty_print_one_value (printer_obj, replacement); 635 636 if (*replacement == NULL && py_str == NULL) 637 print_stack_unless_memory_error (stream); 638 639 return py_str; 640 } 641 642 /* Find a pretty-printer object for the varobj module. Returns a new 643 reference to the object if successful; returns NULL if not. VALUE 644 is the value for which a printer tests to determine if it 645 can pretty-print the value. */ 646 gdbpy_ref<> 647 gdbpy_get_varobj_pretty_printer (struct value *value) 648 { 649 try 650 { 651 value = value_copy (value); 652 } 653 catch (const gdb_exception &except) 654 { 655 GDB_PY_HANDLE_EXCEPTION (except); 656 } 657 658 gdbpy_ref<> val_obj (value_to_value_object (value)); 659 if (val_obj == NULL) 660 return NULL; 661 662 return find_pretty_printer (val_obj.get ()); 663 } 664 665 /* A Python function which wraps find_pretty_printer and instantiates 666 the resulting class. This accepts a Value argument and returns a 667 pretty printer instance, or None. This function is useful as an 668 argument to the MI command -var-set-visualizer. */ 669 PyObject * 670 gdbpy_default_visualizer (PyObject *self, PyObject *args) 671 { 672 PyObject *val_obj; 673 struct value *value; 674 675 if (! PyArg_ParseTuple (args, "O", &val_obj)) 676 return NULL; 677 value = value_object_to_value (val_obj); 678 if (! value) 679 { 680 PyErr_SetString (PyExc_TypeError, 681 _("Argument must be a gdb.Value.")); 682 return NULL; 683 } 684 685 return find_pretty_printer (val_obj).release (); 686 } 687