1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 10765 10766 10767 10768 10769 10770 10771 10772 10773 10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 10802 10803 10804 10805 10806 10807 10808 10809 10810 10811 10812 10813 10814 10815 10816 10817 10818 10819 10820 10821 10822 10823 10824 10825 10826 10827 10828 10829 10830 10831 10832 10833 10834 10835 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 10850 10851 10852 10853 10854 10855 10856 10857 10858 10859 10860 10861 10862 10863 10864 10865 10866 10867 10868 10869 10870 10871 10872 10873 10874 10875 10876 10877 10878 10879 10880 10881 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 10920 10921 10922 10923 10924 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 10935 10936 10937 10938 10939 10940 10941 10942 10943 10944 10945 10946 10947 10948 10949 10950 10951 10952 10953 10954 10955 10956 10957 10958 10959 10960 10961 10962 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 10988 10989 10990 10991 10992 10993 10994 10995 10996 10997 10998 10999 11000 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11019 11020 11021 11022 11023 11024 11025 11026 11027 11028 11029 11030 11031 11032 11033 11034 11035 11036 11037 11038 11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 11087 11088 11089 11090 11091 11092 11093 11094 11095 11096 11097 11098 11099 11100 11101 11102 11103 11104 11105 11106 11107 11108 11109 11110 11111 11112 11113 11114 11115 11116 11117 11118 11119 11120 11121 11122 11123 11124 11125 11126 11127 11128 11129 11130 11131 11132 11133 11134 11135 11136 11137 11138 11139 11140 11141 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 11190 11191 11192 11193 11194 11195 11196 11197 11198 11199 11200 11201 11202 11203 11204 11205 11206 11207 11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 11218 11219 11220 11221 11222 11223 11224 11225 11226 11227 11228 11229 11230 11231 11232 11233 11234 11235 11236 11237 11238 11239 11240 11241 11242 11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 11286 11287 11288 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 11312 11313 11314 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 11338 11339 11340 11341 11342 11343 11344 11345 11346 11347 11348 11349 11350 11351 11352 11353 11354 11355 11356 11357 11358 11359 11360 11361 11362 11363 11364 11365 11366 11367 11368 11369 11370 11371 11372 11373 11374 11375 11376 11377 11378 11379 11380 11381 11382 11383 11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 11407 11408 11409 11410 11411 11412 11413 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 11439 11440 11441 11442 11443 11444 11445 11446 11447 11448 11449 11450 11451 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 11484 11485 11486 11487 11488 11489 11490 11491 11492 11493 11494 11495 11496 11497 11498 11499 11500 11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 11515 11516 11517 11518 11519 11520 11521 11522 11523 11524 11525 11526 11527 11528 11529 11530 11531 11532 11533 11534 11535 11536 11537 11538 11539 11540 11541 11542 11543 11544 11545 11546 11547 11548 11549 11550 11551 11552 11553 11554 11555 11556 11557 11558 11559 11560 11561 11562 11563 11564 11565 11566 11567 11568 11569 11570 11571 11572 11573 11574 11575 11576 11577 11578 11579 11580 11581 11582 11583 11584 11585 11586 11587 11588 11589 11590 11591 11592 11593 11594 11595 11596 11597 11598 11599 11600 11601 11602 11603 11604 11605 11606 11607 11608 11609 11610 11611 11612 11613 11614 11615 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 11634 11635 11636 11637 11638 11639 11640 11641 11642 11643 11644 11645 11646 11647 11648 11649 11650 11651 11652 11653 11654 11655 11656 11657 11658 11659 11660 11661 11662 11663 11664 11665 11666 11667 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 11700 11701 11702 11703 11704 11705 11706 11707 11708 11709 11710 11711 11712 11713 11714 11715 11716 11717 11718 11719 11720 11721 11722 11723 11724 11725 11726 11727 11728 11729 11730 11731 11732 11733 11734 11735 11736 11737 11738 11739 11740 11741 11742 11743 11744 11745 11746 11747 11748 11749 11750 11751 11752 11753 11754 11755 11756 11757 11758 11759 11760 11761 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 11787 11788 11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 11893 11894 11895 11896 11897 11898 11899 11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 11965 11966 11967 11968 11969 11970 11971 11972 11973 11974 11975 11976 11977 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 11998 11999 12000 12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 13224 13225 13226 13227 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 13280 13281 13282 13283 13284 13285 13286 13287 13288 13289 13290 13291 13292 13293 13294 13295 13296 13297 13298 13299 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 13320 13321 13322 13323 13324 13325 13326 13327 13328 13329 13330 13331 13332 13333 13334 13335 13336 13337 13338 13339 13340 13341 13342 13343 13344 13345 13346 13347 13348 13349 13350 13351 13352 13353 13354 13355 13356 13357 13358 13359 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 13377 13378 13379 13380 13381 13382 13383 13384 13385 13386 13387 13388 13389 13390 13391 13392 13393 13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 13408 13409 13410 13411 13412 13413 13414 13415 13416 13417 13418 13419 13420 13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 13435 13436 13437 13438 13439 13440 13441 13442 13443 13444 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 13614 13615 13616 13617 13618 13619 13620 13621 13622 13623 13624 13625 13626 13627 13628 13629 13630 13631 13632 13633 13634 13635 13636 13637 13638 13639 13640 13641 13642 13643 13644 13645 13646 13647 13648 13649 13650 13651 13652 13653 13654 13655 13656 13657 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 13690 13691 13692 13693 13694 13695 13696 13697 13698 13699 13700 13701 13702 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 13713 13714 13715 13716 13717 13718 13719 13720 13721 13722 13723 13724 13725 13726 13727 13728 13729 13730 13731 13732 13733 13734 13735 13736 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 13802 13803 13804 13805 13806 13807 13808 13809 13810 13811 13812 13813 13814 13815 13816 13817 13818 13819 13820 13821 13822 13823 13824 13825 13826 13827 13828 13829 13830 13831 13832 13833 13834 13835 13836 13837 13838 13839 13840 13841 13842 13843 13844 13845 13846 13847 13848 13849 13850 13851 13852 13853 13854 13855 13856 13857 13858 13859 13860 13861 13862 13863 13864 13865 13866 13867 13868 13869 13870 13871 13872 13873 13874 13875 13876 13877 13878 13879 13880 13881 13882 13883 13884 13885 13886 13887 13888 13889 13890 13891 13892 13893 13894 13895 13896 13897 13898 13899 13900 13901 13902 13903 13904 13905 13906 13907 13908 13909 13910 13911 13912 13913 13914 13915 13916 13917 13918 13919 13920 13921 13922 13923 13924 13925 13926 13927 13928 13929 13930 13931 13932 13933 13934 13935 13936 13937 13938 13939 13940 13941 13942 13943 13944 13945 13946 13947 13948 13949 13950 13951 13952 13953 13954 13955 13956 13957 13958 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 14547 14548 14549 14550 14551 14552 14553 14554 14555 14556 14557 14558 14559 14560 14561 14562 14563 14564 14565 14566 14567 14568 14569 14570 14571 14572 14573 14574 14575 14576 14577 14578 14579 14580 14581 14582 14583 14584 14585 14586 14587 14588 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 14604 14605 14606 14607 14608 14609 14610 14611 14612 14613 14614 14615 14616 14617 14618 14619 14620 14621 14622 14623 14624 14625 14626 14627 14628 14629 14630 14631 14632 14633 14634 14635 14636 14637 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14648 14649 14650 14651 14652 14653 14654 14655 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 14682 14683 14684 14685 14686 14687 14688 14689 14690 14691 14692 14693 14694 14695 14696 14697 14698 14699 14700 14701 14702 14703 14704 14705 14706 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 14737 14738 14739 14740 14741 14742 14743 14744 14745 14746 14747 14748 14749 14750 14751 14752 14753 14754 14755 14756 14757 14758 14759 14760 14761 14762 14763 14764 14765 14766 14767 14768 14769 14770 14771 14772 14773 14774 14775 14776 14777 14778 14779 14780 14781 14782 14783 14784 14785 14786 14787 14788 14789 14790 14791 14792 14793 14794 14795 14796 14797 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989
|
\input texinfo @c -*-texinfo-*-
@c Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,
@c 1999, 2000, 2001, 2002
@c Free Software Foundation, Inc.
@c
@c %**start of header
@c makeinfo ignores cmds prev to setfilename, so its arg cannot make use
@c of @set vars. However, you can override filename with makeinfo -o.
@setfilename gnatgdb.info
@c
@include gdb-cfg.texi
@c
@settitle Debugging with @value{GDBN}
@setchapternewpage odd
@c %**end of header
@iftex
@c @smallbook
@c @cropmarks
@end iftex
@finalout
@syncodeindex ky cp
@c readline appendices use @vindex, @findex and @ftable,
@c annotate.texi and gdbmi use @findex.
@syncodeindex vr cp
@syncodeindex fn cp
@c !!set GDB manual's edition---not the same as GDB version!
@set EDITION Fourth GNAT
@c !!set GDB manual's revision date
@set DATE July 2002
@c THIS MANUAL REQUIRES TEXINFO 4.0 OR LATER.
@c This is a dir.info fragment to support semi-automated addition of
@c manuals to an info tree.
@dircategory GNU Ada Tools
@direntry
* gnatgdb: (gnatgdb). The Ada-aware @sc{gnu} debugger.
@end direntry
@ifinfo
This file documents the @sc{gnu} debugger @value{GDBN}.
This is the @value{EDITION} Edition, @value{DATE},
of @cite{Debugging with @value{GDBN}: the @sc{gnu} Source-Level Debugger}
for @value{GDBN} Version @value{GDBVN}.
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998,@*
1999, 2000, 2001, 2002 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The Free Software Foundation's Back-Cover Text is: ``You have
freedom to copy and modify this GNU Manual, like GNU software. Copies
published by the Free Software Foundation raise funds for GNU
development.''
@end ifinfo
@titlepage
@title Debugging with @value{GDBN}
@subtitle The @sc{gnu} Source-Level Debugger
@sp 1
@subtitle @value{EDITION} Edition, for @value{GDBN} version @value{GDBVN}
@subtitle @value{DATE}
@author Richard Stallman, Roland Pesch, Stan Shebs, et al.
@page
@tex
{\parskip=0pt
\hfill (Send bugs and comments on @value{GDBN} to bug-gdb\@gnu.org.)\par
\hfill {\it Debugging with @value{GDBN}}\par
\hfill \TeX{}info \texinfoversion\par
}
@end tex
@vskip 0pt plus 1filll
Copyright @copyright{} 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
@sp 2
Published by the Free Software Foundation @*
59 Temple Place - Suite 330, @*
Boston, MA 02111-1307 USA @*
ISBN 1-882114-77-9 @*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The Free Software Foundation's Back-Cover Text is: ``You have
freedom to copy and modify this GNU Manual, like GNU software. Copies
published by the Free Software Foundation raise funds for GNU
development.''
@end titlepage
@page
@ifnottex
@node Top, Summary, (dir), (dir)
@top Debugging with @value{GDBN}
This file describes @value{GDBN}, the @sc{gnu} symbolic debugger.
This is the @value{EDITION} Edition, @value{DATE}, for @value{GDBN} Version
@value{GDBVN}.
Copyright (C) 1988-2002 Free Software Foundation, Inc.
@menu
* Summary:: Summary of @value{GDBN}
* Sample Session:: A sample @value{GDBN} session
* Invocation:: Getting in and out of @value{GDBN}
* Commands:: @value{GDBN} commands
* Running:: Running programs under @value{GDBN}
* Stopping:: Stopping and continuing
* Stack:: Examining the stack
* Source:: Examining source files
* Data:: Examining data
* Macros:: Preprocessor Macros
* Tracepoints:: Debugging remote targets non-intrusively
* Overlays:: Debugging programs that use overlays
* Languages:: Using @value{GDBN} with different languages
* Symbols:: Examining the symbol table
* Altering:: Altering execution
* GDB Files:: @value{GDBN} files
* Targets:: Specifying a debugging target
* Remote Debugging:: Debugging remote programs
* Configurations:: Configuration-specific information
* Controlling GDB:: Controlling @value{GDBN}
* Sequences:: Canned sequences of commands
* TUI:: @value{GDBN} Text User Interface
* Emacs:: Using @value{GDBN} under @sc{gnu} Emacs
* Annotations:: @value{GDBN}'s annotation interface.
* GDB/MI:: @value{GDBN}'s Machine Interface.
* GDB Bugs:: Reporting bugs in @value{GDBN}
* Formatting Documentation:: How to format and print @value{GDBN} documentation
* Command Line Editing:: Command Line Editing
* Using History Interactively:: Using History Interactively
* Installing GDB:: Installing GDB
* Maintenance Commands:: Maintenance Commands
* Remote Protocol:: GDB Remote Serial Protocol
* Copying:: GNU General Public License says
how you can copy and share GDB
* GNU Free Documentation License:: The license for this documentation
* Index:: Index
@end menu
@end ifnottex
@contents
@node Summary
@unnumbered Summary of @value{GDBN}
The purpose of a debugger such as @value{GDBN} is to allow you to see what is
going on ``inside'' another program while it executes---or what another
program was doing at the moment it crashed.
@value{GDBN} can do four main kinds of things (plus other things in support of
these) to help you catch bugs in the act:
@itemize @bullet
@item
Start your program, specifying anything that might affect its behavior.
@item
Make your program stop on specified conditions.
@item
Examine what has happened, when your program has stopped.
@item
Change things in your program, so you can experiment with correcting the
effects of one bug and go on to learn about another.
@end itemize
You can use @value{GDBN} to debug programs written in C and C++.
For more information, see @ref{Support,,Supported languages}.
For more information, see @ref{C,,C and C++}.
@c OBSOLETE @cindex Chill
@cindex Modula-2
Support for Modula-2
@c OBSOLETE and Chill
is partial. For information on Modula-2, see @ref{Modula-2,,Modula-2}.
@c OBSOLETE For information on Chill, see @ref{Chill}.
@cindex Pascal
Debugging Pascal programs which use sets, subranges, file variables, or
nested functions does not currently work. @value{GDBN} does not support
entering expressions, printing values, or similar features using Pascal
syntax.
@cindex Fortran
@value{GDBN} can be used to debug programs written in Fortran, although
it may be necessary to refer to some variables with a trailing
underscore.
@menu
* Free Software:: Freely redistributable software
* Contributors:: Contributors to GDB
@end menu
@node Free Software
@unnumberedsec Free software
@value{GDBN} is @dfn{free software}, protected by the @sc{gnu}
General Public License
(GPL). The GPL gives you the freedom to copy or adapt a licensed
program---but every person getting a copy also gets with it the
freedom to modify that copy (which means that they must get access to
the source code), and the freedom to distribute further copies.
Typical software companies use copyrights to limit your freedoms; the
Free Software Foundation uses the GPL to preserve these freedoms.
Fundamentally, the General Public License is a license which says that
you have these freedoms and that you cannot take these freedoms away
from anyone else.
@unnumberedsec Free Software Needs Free Documentation
The biggest deficiency in the free software community today is not in
the software---it is the lack of good free documentation that we can
include with the free software. Many of our most important
programs do not come with free reference manuals and free introductory
texts. Documentation is an essential part of any software package;
when an important free software package does not come with a free
manual and a free tutorial, that is a major gap. We have many such
gaps today.
Consider Perl, for instance. The tutorial manuals that people
normally use are non-free. How did this come about? Because the
authors of those manuals published them with restrictive terms---no
copying, no modification, source files not available---which exclude
them from the free software world.
That wasn't the first time this sort of thing happened, and it was far
from the last. Many times we have heard a GNU user eagerly describe a
manual that he is writing, his intended contribution to the community,
only to learn that he had ruined everything by signing a publication
contract to make it non-free.
Free documentation, like free software, is a matter of freedom, not
price. The problem with the non-free manual is not that publishers
charge a price for printed copies---that in itself is fine. (The Free
Software Foundation sells printed copies of manuals, too.) The
problem is the restrictions on the use of the manual. Free manuals
are available in source code form, and give you permission to copy and
modify. Non-free manuals do not allow this.
The criteria of freedom for a free manual are roughly the same as for
free software. Redistribution (including the normal kinds of
commercial redistribution) must be permitted, so that the manual can
accompany every copy of the program, both on-line and on paper.
Permission for modification of the technical content is crucial too.
When people modify the software, adding or changing features, if they
are conscientious they will change the manual too---so they can
provide accurate and clear documentation for the modified program. A
manual that leaves you no choice but to write a new manual to document
a changed version of the program is not really available to our
community.
Some kinds of limits on the way modification is handled are
acceptable. For example, requirements to preserve the original
author's copyright notice, the distribution terms, or the list of
authors, are ok. It is also no problem to require modified versions
to include notice that they were modified. Even entire sections that
may not be deleted or changed are acceptable, as long as they deal
with nontechnical topics (like this one). These kinds of restrictions
are acceptable because they don't obstruct the community's normal use
of the manual.
However, it must be possible to modify all the @emph{technical}
content of the manual, and then distribute the result in all the usual
media, through all the usual channels. Otherwise, the restrictions
obstruct the use of the manual, it is not free, and we need another
manual to replace it.
Please spread the word about this issue. Our community continues to
lose manuals to proprietary publishing. If we spread the word that
free software needs free reference manuals and free tutorials, perhaps
the next person who wants to contribute by writing documentation will
realize, before it is too late, that only free manuals contribute to
the free software community.
If you are writing documentation, please insist on publishing it under
the GNU Free Documentation License or another free documentation
license. Remember that this decision requires your approval---you
don't have to let the publisher decide. Some commercial publishers
will use a free license if you insist, but they will not propose the
option; it is up to you to raise the issue and say firmly that this is
what you want. If the publisher you are dealing with refuses, please
try other publishers. If you're not sure whether a proposed license
is free, write to @email{licensing@@gnu.org}.
You can encourage commercial publishers to sell more free, copylefted
manuals and tutorials by buying them, and particularly by buying
copies from the publishers that paid for their writing or for major
improvements. Meanwhile, try to avoid buying non-free documentation
at all. Check the distribution terms of a manual before you buy it,
and insist that whoever seeks your business must respect your freedom.
Check the history of the book, and try to reward the publishers that
have paid or pay the authors to work on it.
The Free Software Foundation maintains a list of free documentation
published by other publishers, at
@url{http://www.fsf.org/doc/other-free-books.html}.
@node Contributors
@unnumberedsec Contributors to @value{GDBN}
Richard Stallman was the original author of @value{GDBN}, and of many
other @sc{gnu} programs. Many others have contributed to its
development. This section attempts to credit major contributors. One
of the virtues of free software is that everyone is free to contribute
to it; with regret, we cannot actually acknowledge everyone here. The
file @file{ChangeLog} in the @value{GDBN} distribution approximates a
blow-by-blow account.
Changes much prior to version 2.0 are lost in the mists of time.
@quotation
@emph{Plea:} Additions to this section are particularly welcome. If you
or your friends (or enemies, to be evenhanded) have been unfairly
omitted from this list, we would like to add your names!
@end quotation
So that they may not regard their many labors as thankless, we
particularly thank those who shepherded @value{GDBN} through major
releases:
Andrew Cagney (releases 5.3, 5.2, 5.1 and 5.0);
Jim Blandy (release 4.18);
Jason Molenda (release 4.17);
Stan Shebs (release 4.14);
Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10, and 4.9);
Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5, and 4.4);
John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9);
Jim Kingdon (releases 3.5, 3.4, and 3.3);
and Randy Smith (releases 3.2, 3.1, and 3.0).
Richard Stallman, assisted at various times by Peter TerMaat, Chris
Hanson, and Richard Mlynarik, handled releases through 2.8.
Michael Tiemann is the author of most of the @sc{gnu} C@t{++} support
in @value{GDBN}, with significant additional contributions from Per
Bothner and Daniel Berlin. James Clark wrote the @sc{gnu} C@t{++}
demangler. Early work on C@t{++} was by Peter TerMaat (who also did
much general update work leading to release 3.0).
@value{GDBN} uses the BFD subroutine library to examine multiple
object-file formats; BFD was a joint project of David V.
Henkel-Wallace, Rich Pixley, Steve Chamberlain, and John Gilmore.
David Johnson wrote the original COFF support; Pace Willison did
the original support for encapsulated COFF.
Brent Benson of Harris Computer Systems contributed DWARF2 support.
Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
support.
Jean-Daniel Fekete contributed Sun 386i support.
Chris Hanson improved the HP9000 support.
Noboyuki Hikichi and Tomoyuki Hasei contributed Sony/News OS 3 support.
David Johnson contributed Encore Umax support.
Jyrki Kuoppala contributed Altos 3068 support.
Jeff Law contributed HP PA and SOM support.
Keith Packard contributed NS32K support.
Doug Rabson contributed Acorn Risc Machine support.
Bob Rusk contributed Harris Nighthawk CX-UX support.
Chris Smith contributed Convex support (and Fortran debugging).
Jonathan Stone contributed Pyramid support.
Michael Tiemann contributed SPARC support.
Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
Pace Willison contributed Intel 386 support.
Jay Vosburgh contributed Symmetry support.
Andreas Schwab contributed M68K @sc{gnu}/Linux support.
Rich Schaefer and Peter Schauer helped with support of SunOS shared
libraries.
Jay Fenlason and Roland McGrath ensured that @value{GDBN} and GAS agree
about several machine instruction sets.
Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped develop
remote debugging. Intel Corporation, Wind River Systems, AMD, and ARM
contributed remote debugging modules for the i960, VxWorks, A29K UDI,
and RDI targets, respectively.
Brian Fox is the author of the readline libraries providing
command-line editing and command history.
Andrew Beers of SUNY Buffalo wrote the language-switching code, the
Modula-2 support, and contributed the Languages chapter of this manual.
Fred Fish wrote most of the support for Unix System Vr4.
He also enhanced the command-completion support to cover C@t{++} overloaded
symbols.
Hitachi America, Ltd. sponsored the support for H8/300, H8/500, and
Super-H processors.
NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx processors.
Mitsubishi sponsored the support for D10V, D30V, and M32R/D processors.
Toshiba sponsored the support for the TX39 Mips processor.
Matsushita sponsored the support for the MN10200 and MN10300 processors.
Fujitsu sponsored the support for SPARClite and FR30 processors.
Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
watchpoints.
Michael Snyder added support for tracepoints.
Stu Grossman wrote gdbserver.
Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made
nearly innumerable bug fixes and cleanups throughout @value{GDBN}.
The following people at the Hewlett-Packard Company contributed
support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
(narrow mode), HP's implementation of kernel threads, HP's aC@t{++}
compiler, and the terminal user interface: Ben Krepp, Richard Title,
John Bishop, Susan Macchia, Kathy Mann, Satish Pai, India Paul, Steve
Rehrauer, and Elena Zannoni. Kim Haase provided HP-specific
information in this manual.
DJ Delorie ported @value{GDBN} to MS-DOS, for the DJGPP project.
Robert Hoehne made significant contributions to the DJGPP port.
Cygnus Solutions has sponsored @value{GDBN} maintenance and much of its
development since 1991. Cygnus engineers who have worked on @value{GDBN}
fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni. In
addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
Zuhn have made contributions both large and small.
Jim Blandy added support for preprocessor macros, while working for Red
Hat.
@node Sample Session
@chapter A Sample @value{GDBN} Session
You can use this manual at your leisure to read all about @value{GDBN}.
However, a handful of commands are enough to get started using the
debugger. This chapter illustrates those commands.
@iftex
In this sample session, we emphasize user input like this: @b{input},
to make it easier to pick out from the surrounding output.
@end iftex
@c FIXME: this example may not be appropriate for some configs, where
@c FIXME...primary interest is in remote use.
One of the preliminary versions of @sc{gnu} @code{m4} (a generic macro
processor) exhibits the following bug: sometimes, when we change its
quote strings from the default, the commands used to capture one macro
definition within another stop working. In the following short @code{m4}
session, we define a macro @code{foo} which expands to @code{0000}; we
then use the @code{m4} built-in @code{defn} to define @code{bar} as the
same thing. However, when we change the open quote string to
@code{<QUOTE>} and the close quote string to @code{<UNQUOTE>}, the same
procedure fails to define a new synonym @code{baz}:
@smallexample
$ @b{cd gnu/m4}
$ @b{./m4}
@b{define(foo,0000)}
@b{foo}
0000
@b{define(bar,defn(`foo'))}
@b{bar}
0000
@b{changequote(<QUOTE>,<UNQUOTE>)}
@b{define(baz,defn(<QUOTE>foo<UNQUOTE>))}
@b{baz}
@b{C-d}
m4: End of input: 0: fatal error: EOF in string
@end smallexample
@noindent
Let us use @value{GDBN} to try to see what is going on.
@smallexample
$ @b{@value{GDBP} m4}
@c FIXME: this falsifies the exact text played out, to permit smallbook
@c FIXME... format to come out better.
@value{GDBN} @value{GDBVN}
Copyright 2000 Free Software Foundation, Inc.
@value{GDBN} is free software and you are welcome to distribute copies
of it under certain conditions; type "show copying" to see
the conditions.
There is absolutely no warranty for @value{GDBN}; type "show warranty"
for details.
(@value{GDBP})
@end smallexample
@noindent
@value{GDBN} reads only enough symbol data to know where to find the
rest when needed; as a result, the first prompt comes up very quickly.
We now tell @value{GDBN} to use a narrower display width than usual, so
that examples fit in this manual.
@smallexample
(@value{GDBP}) @b{set width 70}
@end smallexample
@noindent
We need to see how the @code{m4} built-in @code{changequote} works.
Having looked at the source, we know the relevant subroutine is
@code{m4_changequote}, so we set a breakpoint there with the @value{GDBN}
@code{break} command.
@smallexample
(@value{GDBP}) @b{break m4_changequote}
Breakpoint 1 at 0x62f4: file builtin.c, line 879.
@end smallexample
@noindent
Using the @code{run} command, we start @code{m4} running under @value{GDBN}
control; as long as control does not reach the @code{m4_changequote}
subroutine, the program runs as usual:
@smallexample
(@value{GDBP}) @b{run}
Starting program: /work/Editorial/gdb/gnu/m4/m4
@b{define(foo,0000)}
@b{foo}
0000
@end smallexample
@noindent
To trigger the breakpoint, we call @code{changequote}. @value{GDBN}
suspends execution of @code{m4}, displaying information about the
context where it stops.
@smallexample
@b{changequote(<QUOTE>,<UNQUOTE>)}
Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
at builtin.c:879
879 if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
@end smallexample
@noindent
Now we use the command @code{n} (@code{next}) to advance execution to
the next line of the current function.
@smallexample
(@value{GDBP}) @b{n}
882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
: nil,
@end smallexample
@noindent
@code{set_quotes} looks like a promising subroutine. We can go into it
by using the command @code{s} (@code{step}) instead of @code{next}.
@code{step} goes to the next line to be executed in @emph{any}
subroutine, so it steps into @code{set_quotes}.
@smallexample
(@value{GDBP}) @b{s}
set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
at input.c:530
530 if (lquote != def_lquote)
@end smallexample
@noindent
The display that shows the subroutine where @code{m4} is now
suspended (and its arguments) is called a stack frame display. It
shows a summary of the stack. We can use the @code{backtrace}
command (which can also be spelled @code{bt}), to see where we are
in the stack as a whole: the @code{backtrace} command displays a
stack frame for each active subroutine.
@smallexample
(@value{GDBP}) @b{bt}
#0 set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
at input.c:530
#1 0x6344 in m4_changequote (argc=3, argv=0x33c70)
at builtin.c:882
#2 0x8174 in expand_macro (sym=0x33320) at macro.c:242
#3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
at macro.c:71
#4 0x79dc in expand_input () at macro.c:40
#5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195
@end smallexample
@noindent
We step through a few more lines to see what happens. The first two
times, we can use @samp{s}; the next two times we use @code{n} to avoid
falling into the @code{xstrdup} subroutine.
@smallexample
(@value{GDBP}) @b{s}
0x3b5c 532 if (rquote != def_rquote)
(@value{GDBP}) @b{s}
0x3b80 535 lquote = (lq == nil || *lq == '\0') ? \
def_lquote : xstrdup(lq);
(@value{GDBP}) @b{n}
536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
: xstrdup(rq);
(@value{GDBP}) @b{n}
538 len_lquote = strlen(rquote);
@end smallexample
@noindent
The last line displayed looks a little odd; we can examine the variables
@code{lquote} and @code{rquote} to see if they are in fact the new left
and right quotes we specified. We use the command @code{p}
(@code{print}) to see their values.
@smallexample
(@value{GDBP}) @b{p lquote}
$1 = 0x35d40 "<QUOTE>"
(@value{GDBP}) @b{p rquote}
$2 = 0x35d50 "<UNQUOTE>"
@end smallexample
@noindent
@code{lquote} and @code{rquote} are indeed the new left and right quotes.
To look at some context, we can display ten lines of source
surrounding the current line with the @code{l} (@code{list}) command.
@smallexample
(@value{GDBP}) @b{l}
533 xfree(rquote);
534
535 lquote = (lq == nil || *lq == '\0') ? def_lquote\
: xstrdup (lq);
536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
: xstrdup (rq);
537
538 len_lquote = strlen(rquote);
539 len_rquote = strlen(lquote);
540 @}
541
542 void
@end smallexample
@noindent
Let us step past the two lines that set @code{len_lquote} and
@code{len_rquote}, and then examine the values of those variables.
@smallexample
(@value{GDBP}) @b{n}
539 len_rquote = strlen(lquote);
(@value{GDBP}) @b{n}
540 @}
(@value{GDBP}) @b{p len_lquote}
$3 = 9
(@value{GDBP}) @b{p len_rquote}
$4 = 7
@end smallexample
@noindent
That certainly looks wrong, assuming @code{len_lquote} and
@code{len_rquote} are meant to be the lengths of @code{lquote} and
@code{rquote} respectively. We can set them to better values using
the @code{p} command, since it can print the value of
any expression---and that expression can include subroutine calls and
assignments.
@smallexample
(@value{GDBP}) @b{p len_lquote=strlen(lquote)}
$5 = 7
(@value{GDBP}) @b{p len_rquote=strlen(rquote)}
$6 = 9
@end smallexample
@noindent
Is that enough to fix the problem of using the new quotes with the
@code{m4} built-in @code{defn}? We can allow @code{m4} to continue
executing with the @code{c} (@code{continue}) command, and then try the
example that caused trouble initially:
@smallexample
(@value{GDBP}) @b{c}
Continuing.
@b{define(baz,defn(<QUOTE>foo<UNQUOTE>))}
baz
0000
@end smallexample
@noindent
Success! The new quotes now work just as well as the default ones. The
problem seems to have been just the two typos defining the wrong
lengths. We allow @code{m4} exit by giving it an EOF as input:
@smallexample
@b{C-d}
Program exited normally.
@end smallexample
@noindent
The message @samp{Program exited normally.} is from @value{GDBN}; it
indicates @code{m4} has finished executing. We can end our @value{GDBN}
session with the @value{GDBN} @code{quit} command.
@smallexample
(@value{GDBP}) @b{quit}
@end smallexample
@node Invocation
@chapter Getting In and Out of @value{GDBN}
This chapter discusses how to start @value{GDBN}, and how to get out of it.
The essentials are:
@itemize @bullet
@item
type @samp{@value{GDBP}} to start @value{GDBN}.
@item
type @kbd{quit} or @kbd{C-d} to exit.
@end itemize
@menu
* Invoking GDB:: How to start @value{GDBN}
* Quitting GDB:: How to quit @value{GDBN}
* Shell Commands:: How to use shell commands inside @value{GDBN}
@end menu
@node Invoking GDB
@section Invoking @value{GDBN}
Invoke @value{GDBN} by running the program @code{@value{GDBP}}. Once started,
@value{GDBN} reads commands from the terminal until you tell it to exit.
You can also run @code{@value{GDBP}} with a variety of arguments and options,
to specify more of your debugging environment at the outset.
The command-line options described here are designed
to cover a variety of situations; in some environments, some of these
options may effectively be unavailable.
The most usual way to start @value{GDBN} is with one argument,
specifying an executable program:
@smallexample
@value{GDBP} @var{program}
@end smallexample
@noindent
You can also start with both an executable program and a core file
specified:
@smallexample
@value{GDBP} @var{program} @var{core}
@end smallexample
You can, instead, specify a process ID as a second argument, if you want
to debug a running process:
@smallexample
@value{GDBP} @var{program} 1234
@end smallexample
@noindent
would attach @value{GDBN} to process @code{1234} (unless you also have a file
named @file{1234}; @value{GDBN} does check for a core file first).
Taking advantage of the second command-line argument requires a fairly
complete operating system; when you use @value{GDBN} as a remote
debugger attached to a bare board, there may not be any notion of
``process'', and there is often no way to get a core dump. @value{GDBN}
will warn you if it is unable to attach or to read core dumps.
You can optionally have @code{@value{GDBP}} pass any arguments after the
executable file to the inferior using @code{--args}. This option stops
option processing.
@smallexample
gdb --args gcc -O2 -c foo.c
@end smallexample
This will cause @code{@value{GDBP}} to debug @code{gcc}, and to set
@code{gcc}'s command-line arguments (@pxref{Arguments}) to @samp{-O2 -c foo.c}.
You can run @code{@value{GDBP}} without printing the front material, which describes
@value{GDBN}'s non-warranty, by specifying @code{-silent}:
@smallexample
@value{GDBP} -silent
@end smallexample
@noindent
You can further control how @value{GDBN} starts up by using command-line
options. @value{GDBN} itself can remind you of the options available.
@noindent
Type
@smallexample
@value{GDBP} -help
@end smallexample
@noindent
to display all available options and briefly describe their use
(@samp{@value{GDBP} -h} is a shorter equivalent).
All options and command line arguments you give are processed
in sequential order. The order makes a difference when the
@samp{-x} option is used.
@menu
* File Options:: Choosing files
* Mode Options:: Choosing modes
@end menu
@node File Options
@subsection Choosing files
When @value{GDBN} starts, it reads any arguments other than options as
specifying an executable file and core file (or process ID). This is
the same as if the arguments were specified by the @samp{-se} and
@samp{-c} (or @samp{-p} options respectively. (@value{GDBN} reads the
first argument that does not have an associated option flag as
equivalent to the @samp{-se} option followed by that argument; and the
second argument that does not have an associated option flag, if any, as
equivalent to the @samp{-c}/@samp{-p} option followed by that argument.)
If the second argument begins with a decimal digit, @value{GDBN} will
first attempt to attach to it as a process, and if that fails, attempt
to open it as a corefile. If you have a corefile whose name begins with
a digit, you can prevent @value{GDBN} from treating it as a pid by
prefixing it with @file{./}, eg. @file{./12345}.
If @value{GDBN} has not been configured to included core file support,
such as for most embedded targets, then it will complain about a second
argument and ignore it.
Many options have both long and short forms; both are shown in the
following list. @value{GDBN} also recognizes the long forms if you truncate
them, so long as enough of the option is present to be unambiguous.
(If you prefer, you can flag option arguments with @samp{--} rather
than @samp{-}, though we illustrate the more usual convention.)
@c NOTE: the @cindex entries here use double dashes ON PURPOSE. This
@c way, both those who look for -foo and --foo in the index, will find
@c it.
@table @code
@item -symbols @var{file}
@itemx -s @var{file}
@cindex @code{--symbols}
@cindex @code{-s}
Read symbol table from file @var{file}.
@item -exec @var{file}
@itemx -e @var{file}
@cindex @code{--exec}
@cindex @code{-e}
Use file @var{file} as the executable file to execute when appropriate,
and for examining pure data in conjunction with a core dump.
@item -se @var{file}
@cindex @code{--se}
Read symbol table from file @var{file} and use it as the executable
file.
@item -core @var{file}
@itemx -c @var{file}
@cindex @code{--core}
@cindex @code{-c}
Use file @var{file} as a core dump to examine.
@item -c @var{number}
@item -pid @var{number}
@itemx -p @var{number}
@cindex @code{--pid}
@cindex @code{-p}
Connect to process ID @var{number}, as with the @code{attach} command.
If there is no such process, @value{GDBN} will attempt to open a core
file named @var{number}.
@item -command @var{file}
@itemx -x @var{file}
@cindex @code{--command}
@cindex @code{-x}
Execute @value{GDBN} commands from file @var{file}. @xref{Command
Files,, Command files}.
@item -directory @var{directory}
@itemx -d @var{directory}
@cindex @code{--directory}
@cindex @code{-d}
Add @var{directory} to the path to search for source files.
@item -m
@itemx -mapped
@cindex @code{--mapped}
@cindex @code{-m}
@emph{Warning: this option depends on operating system facilities that are not
supported on all systems.}@*
If memory-mapped files are available on your system through the @code{mmap}
system call, you can use this option
to have @value{GDBN} write the symbols from your
program into a reusable file in the current directory. If the program you are debugging is
called @file{/tmp/fred}, the mapped symbol file is @file{/tmp/fred.syms}.
Future @value{GDBN} debugging sessions notice the presence of this file,
and can quickly map in symbol information from it, rather than reading
the symbol table from the executable program.
The @file{.syms} file is specific to the host machine where @value{GDBN}
is run. It holds an exact image of the internal @value{GDBN} symbol
table. It cannot be shared across multiple host platforms.
@item -r
@itemx -readnow
@cindex @code{--readnow}
@cindex @code{-r}
Read each symbol file's entire symbol table immediately, rather than
the default, which is to read it incrementally as it is needed.
This makes startup slower, but makes future operations faster.
@end table
You typically combine the @code{-mapped} and @code{-readnow} options in
order to build a @file{.syms} file that contains complete symbol
information. (@xref{Files,,Commands to specify files}, for information
on @file{.syms} files.) A simple @value{GDBN} invocation to do nothing
but build a @file{.syms} file for future use is:
@smallexample
gdb -batch -nx -mapped -readnow programname
@end smallexample
@node Mode Options
@subsection Choosing modes
You can run @value{GDBN} in various alternative modes---for example, in
batch mode or quiet mode.
@table @code
@item -nx
@itemx -n
@cindex @code{--nx}
@cindex @code{-n}
Do not execute commands found in any initialization files. Normally,
@value{GDBN} executes the commands in these files after all the command
options and arguments have been processed. @xref{Command Files,,Command
files}.
@item -quiet
@itemx -silent
@itemx -q
@cindex @code{--quiet}
@cindex @code{--silent}
@cindex @code{-q}
``Quiet''. Do not print the introductory and copyright messages. These
messages are also suppressed in batch mode.
@item -batch
@cindex @code{--batch}
Run in batch mode. Exit with status @code{0} after processing all the
command files specified with @samp{-x} (and all commands from
initialization files, if not inhibited with @samp{-n}). Exit with
nonzero status if an error occurs in executing the @value{GDBN} commands
in the command files.
Batch mode may be useful for running @value{GDBN} as a filter, for
example to download and run a program on another computer; in order to
make this more useful, the message
@smallexample
Program exited normally.
@end smallexample
@noindent
(which is ordinarily issued whenever a program running under
@value{GDBN} control terminates) is not issued when running in batch
mode.
@item -nowindows
@itemx -nw
@cindex @code{--nowindows}
@cindex @code{-nw}
``No windows''. If @value{GDBN} comes with a graphical user interface
(GUI) built in, then this option tells @value{GDBN} to only use the command-line
interface. If no GUI is available, this option has no effect.
@item -windows
@itemx -w
@cindex @code{--windows}
@cindex @code{-w}
If @value{GDBN} includes a GUI, then this option requires it to be
used if possible.
@item -cd @var{directory}
@cindex @code{--cd}
Run @value{GDBN} using @var{directory} as its working directory,
instead of the current directory.
@item -fullname
@itemx -f
@cindex @code{--fullname}
@cindex @code{-f}
@sc{gnu} Emacs sets this option when it runs @value{GDBN} as a
subprocess. It tells @value{GDBN} to output the full file name and line
number in a standard, recognizable fashion each time a stack frame is
displayed (which includes each time your program stops). This
recognizable format looks like two @samp{\032} characters, followed by
the file name, line number and character position separated by colons,
and a newline. The Emacs-to-@value{GDBN} interface program uses the two
@samp{\032} characters as a signal to display the source code for the
frame.
@item -epoch
@cindex @code{--epoch}
The Epoch Emacs-@value{GDBN} interface sets this option when it runs
@value{GDBN} as a subprocess. It tells @value{GDBN} to modify its print
routines so as to allow Epoch to display values of expressions in a
separate window.
@item -annotate @var{level}
@cindex @code{--annotate}
This option sets the @dfn{annotation level} inside @value{GDBN}. Its
effect is identical to using @samp{set annotate @var{level}}
(@pxref{Annotations}).
Annotation level controls how much information does @value{GDBN} print
together with its prompt, values of expressions, source lines, and other
types of output. Level 0 is the normal, level 1 is for use when
@value{GDBN} is run as a subprocess of @sc{gnu} Emacs, level 2 is the
maximum annotation suitable for programs that control @value{GDBN}.
@item -async
@cindex @code{--async}
Use the asynchronous event loop for the command-line interface.
@value{GDBN} processes all events, such as user keyboard input, via a
special event loop. This allows @value{GDBN} to accept and process user
commands in parallel with the debugged process being
run@footnote{@value{GDBN} built with @sc{djgpp} tools for
MS-DOS/MS-Windows supports this mode of operation, but the event loop is
suspended when the debuggee runs.}, so you don't need to wait for
control to return to @value{GDBN} before you type the next command.
(@emph{Note:} as of version 5.1, the target side of the asynchronous
operation is not yet in place, so @samp{-async} does not work fully
yet.)
@c FIXME: when the target side of the event loop is done, the above NOTE
@c should be removed.
When the standard input is connected to a terminal device, @value{GDBN}
uses the asynchronous event loop by default, unless disabled by the
@samp{-noasync} option.
@item -noasync
@cindex @code{--noasync}
Disable the asynchronous event loop for the command-line interface.
@item --args
@cindex @code{--args}
Change interpretation of command line so that arguments following the
executable file are passed as command line arguments to the inferior.
This option stops option processing.
@item -baud @var{bps}
@itemx -b @var{bps}
@cindex @code{--baud}
@cindex @code{-b}
Set the line speed (baud rate or bits per second) of any serial
interface used by @value{GDBN} for remote debugging.
@item -tty @var{device}
@itemx -t @var{device}
@cindex @code{--tty}
@cindex @code{-t}
Run using @var{device} for your program's standard input and output.
@c FIXME: kingdon thinks there is more to -tty. Investigate.
@c resolve the situation of these eventually
@item -tui
@cindex @code{--tui}
Activate the Terminal User Interface when starting.
The Terminal User Interface manages several text windows on the terminal,
showing source, assembly, registers and @value{GDBN} command outputs
(@pxref{TUI, ,@value{GDBN} Text User Interface}).
Do not use this option if you run @value{GDBN} from Emacs
(@pxref{Emacs, ,Using @value{GDBN} under @sc{gnu} Emacs}).
@c @item -xdb
@c @cindex @code{--xdb}
@c Run in XDB compatibility mode, allowing the use of certain XDB commands.
@c For information, see the file @file{xdb_trans.html}, which is usually
@c installed in the directory @code{/opt/langtools/wdb/doc} on HP-UX
@c systems.
@item -interpreter @var{interp}
@cindex @code{--interpreter}
Use the interpreter @var{interp} for interface with the controlling
program or device. This option is meant to be set by programs which
communicate with @value{GDBN} using it as a back end.
@samp{--interpreter=mi} (or @samp{--interpreter=mi1}) causes
@value{GDBN} to use the @dfn{gdb/mi interface} (@pxref{GDB/MI, , The
@sc{gdb/mi} Interface}). The older @sc{gdb/mi} interface, included in
@value{GDBN} version 5.0 can be selected with @samp{--interpreter=mi0}.
@item -write
@cindex @code{--write}
Open the executable and core files for both reading and writing. This
is equivalent to the @samp{set write on} command inside @value{GDBN}
(@pxref{Patching}).
@item -statistics
@cindex @code{--statistics}
This option causes @value{GDBN} to print statistics about time and
memory usage after it completes each command and returns to the prompt.
@item -version
@cindex @code{--version}
This option causes @value{GDBN} to print its version number and
no-warranty blurb, and exit.
@end table
@node Quitting GDB
@section Quitting @value{GDBN}
@cindex exiting @value{GDBN}
@cindex leaving @value{GDBN}
@table @code
@kindex quit @r{[}@var{expression}@r{]}
@kindex q @r{(@code{quit})}
@item quit @r{[}@var{expression}@r{]}
@itemx q
To exit @value{GDBN}, use the @code{quit} command (abbreviated
@code{q}), or type an end-of-file character (usually @kbd{C-d}). If you
do not supply @var{expression}, @value{GDBN} will terminate normally;
otherwise it will terminate using the result of @var{expression} as the
error code.
@end table
@cindex interrupt
An interrupt (often @kbd{C-c}) does not exit from @value{GDBN}, but rather
terminates the action of any @value{GDBN} command that is in progress and
returns to @value{GDBN} command level. It is safe to type the interrupt
character at any time because @value{GDBN} does not allow it to take effect
until a time when it is safe.
If you have been using @value{GDBN} to control an attached process or
device, you can release it with the @code{detach} command
(@pxref{Attach, ,Debugging an already-running process}).
@node Shell Commands
@section Shell commands
If you need to execute occasional shell commands during your
debugging session, there is no need to leave or suspend @value{GDBN}; you can
just use the @code{shell} command.
@table @code
@kindex shell
@cindex shell escape
@item shell @var{command string}
Invoke a standard shell to execute @var{command string}.
If it exists, the environment variable @code{SHELL} determines which
shell to run. Otherwise @value{GDBN} uses the default shell
(@file{/bin/sh} on Unix systems, @file{COMMAND.COM} on MS-DOS, etc.).
@end table
The utility @code{make} is often needed in development environments.
You do not have to use the @code{shell} command for this purpose in
@value{GDBN}:
@table @code
@kindex make
@cindex calling make
@item make @var{make-args}
Execute the @code{make} program with the specified
arguments. This is equivalent to @samp{shell make @var{make-args}}.
@end table
@node Commands
@chapter @value{GDBN} Commands
You can abbreviate a @value{GDBN} command to the first few letters of the command
name, if that abbreviation is unambiguous; and you can repeat certain
@value{GDBN} commands by typing just @key{RET}. You can also use the @key{TAB}
key to get @value{GDBN} to fill out the rest of a word in a command (or to
show you the alternatives available, if there is more than one possibility).
@menu
* Command Syntax:: How to give commands to @value{GDBN}
* Completion:: Command completion
* Help:: How to ask @value{GDBN} for help
@end menu
@node Command Syntax
@section Command syntax
A @value{GDBN} command is a single line of input. There is no limit on
how long it can be. It starts with a command name, which is followed by
arguments whose meaning depends on the command name. For example, the
command @code{step} accepts an argument which is the number of times to
step, as in @samp{step 5}. You can also use the @code{step} command
with no arguments. Some commands do not allow any arguments.
@cindex abbreviation
@value{GDBN} command names may always be truncated if that abbreviation is
unambiguous. Other possible command abbreviations are listed in the
documentation for individual commands. In some cases, even ambiguous
abbreviations are allowed; for example, @code{s} is specially defined as
equivalent to @code{step} even though there are other commands whose
names start with @code{s}. You can test abbreviations by using them as
arguments to the @code{help} command.
@cindex repeating commands
@kindex RET @r{(repeat last command)}
A blank line as input to @value{GDBN} (typing just @key{RET}) means to
repeat the previous command. Certain commands (for example, @code{run})
will not repeat this way; these are commands whose unintentional
repetition might cause trouble and which you are unlikely to want to
repeat.
The @code{list} and @code{x} commands, when you repeat them with
@key{RET}, construct new arguments rather than repeating
exactly as typed. This permits easy scanning of source or memory.
@value{GDBN} can also use @key{RET} in another way: to partition lengthy
output, in a way similar to the common utility @code{more}
(@pxref{Screen Size,,Screen size}). Since it is easy to press one
@key{RET} too many in this situation, @value{GDBN} disables command
repetition after any command that generates this sort of display.
@kindex # @r{(a comment)}
@cindex comment
Any text from a @kbd{#} to the end of the line is a comment; it does
nothing. This is useful mainly in command files (@pxref{Command
Files,,Command files}).
@cindex repeating command sequences
@kindex C-o @r{(operate-and-get-next)}
The @kbd{C-o} binding is useful for repeating a complex sequence of
commands. This command accepts the current line, like @kbd{RET}, and
then fetches the next line relative to the current line from the history
for editing.
@node Completion
@section Command completion
@cindex completion
@cindex word completion
@value{GDBN} can fill in the rest of a word in a command for you, if there is
only one possibility; it can also show you what the valid possibilities
are for the next word in a command, at any time. This works for @value{GDBN}
commands, @value{GDBN} subcommands, and the names of symbols in your program.
Press the @key{TAB} key whenever you want @value{GDBN} to fill out the rest
of a word. If there is only one possibility, @value{GDBN} fills in the
word, and waits for you to finish the command (or press @key{RET} to
enter it). For example, if you type
@c FIXME "@key" does not distinguish its argument sufficiently to permit
@c complete accuracy in these examples; space introduced for clarity.
@c If texinfo enhancements make it unnecessary, it would be nice to
@c replace " @key" by "@key" in the following...
@smallexample
(@value{GDBP}) info bre @key{TAB}
@end smallexample
@noindent
@value{GDBN} fills in the rest of the word @samp{breakpoints}, since that is
the only @code{info} subcommand beginning with @samp{bre}:
@smallexample
(@value{GDBP}) info breakpoints
@end smallexample
@noindent
You can either press @key{RET} at this point, to run the @code{info
breakpoints} command, or backspace and enter something else, if
@samp{breakpoints} does not look like the command you expected. (If you
were sure you wanted @code{info breakpoints} in the first place, you
might as well just type @key{RET} immediately after @samp{info bre},
to exploit command abbreviations rather than command completion).
If there is more than one possibility for the next word when you press
@key{TAB}, @value{GDBN} sounds a bell. You can either supply more
characters and try again, or just press @key{TAB} a second time;
@value{GDBN} displays all the possible completions for that word. For
example, you might want to set a breakpoint on a subroutine whose name
begins with @samp{make_}, but when you type @kbd{b make_@key{TAB}} @value{GDBN}
just sounds the bell. Typing @key{TAB} again displays all the
function names in your program that begin with those characters, for
example:
@smallexample
(@value{GDBP}) b make_ @key{TAB}
@exdent @value{GDBN} sounds bell; press @key{TAB} again, to see:
make_a_section_from_file make_environ
make_abs_section make_function_type
make_blockvector make_pointer_type
make_cleanup make_reference_type
make_command make_symbol_completion_list
(@value{GDBP}) b make_
@end smallexample
@noindent
After displaying the available possibilities, @value{GDBN} copies your
partial input (@samp{b make_} in the example) so you can finish the
command.
If you just want to see the list of alternatives in the first place, you
can press @kbd{M-?} rather than pressing @key{TAB} twice. @kbd{M-?}
means @kbd{@key{META} ?}. You can type this either by holding down a
key designated as the @key{META} shift on your keyboard (if there is
one) while typing @kbd{?}, or as @key{ESC} followed by @kbd{?}.
@cindex quotes in commands
@cindex completion of quoted strings
Sometimes the string you need, while logically a ``word'', may contain
parentheses or other characters that @value{GDBN} normally excludes from
its notion of a word. To permit word completion to work in this
situation, you may enclose words in @code{'} (single quote marks) in
@value{GDBN} commands.
The most likely situation where you might need this is in typing the
name of a C@t{++} function. This is because C@t{++} allows function
overloading (multiple definitions of the same function, distinguished
by argument type). For example, when you want to set a breakpoint you
may need to distinguish whether you mean the version of @code{name}
that takes an @code{int} parameter, @code{name(int)}, or the version
that takes a @code{float} parameter, @code{name(float)}. To use the
word-completion facilities in this situation, type a single quote
@code{'} at the beginning of the function name. This alerts
@value{GDBN} that it may need to consider more information than usual
when you press @key{TAB} or @kbd{M-?} to request word completion:
@smallexample
(@value{GDBP}) b 'bubble( @kbd{M-?}
bubble(double,double) bubble(int,int)
(@value{GDBP}) b 'bubble(
@end smallexample
In some cases, @value{GDBN} can tell that completing a name requires using
quotes. When this happens, @value{GDBN} inserts the quote for you (while
completing as much as it can) if you do not type the quote in the first
place:
@smallexample
(@value{GDBP}) b bub @key{TAB}
@exdent @value{GDBN} alters your input line to the following, and rings a bell:
(@value{GDBP}) b 'bubble(
@end smallexample
@noindent
In general, @value{GDBN} can tell that a quote is needed (and inserts it) if
you have not yet started typing the argument list when you ask for
completion on an overloaded symbol.
For more information about overloaded functions, see @ref{C plus plus
expressions, ,C@t{++} expressions}. You can use the command @code{set
overload-resolution off} to disable overload resolution;
see @ref{Debugging C plus plus, ,@value{GDBN} features for C@t{++}}.
@node Help
@section Getting help
@cindex online documentation
@kindex help
You can always ask @value{GDBN} itself for information on its commands,
using the command @code{help}.
@table @code
@kindex h @r{(@code{help})}
@item help
@itemx h
You can use @code{help} (abbreviated @code{h}) with no arguments to
display a short list of named classes of commands:
@smallexample
(@value{GDBP}) help
List of classes of commands:
aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without@*
stopping the program
user-defined -- User-defined commands
Type "help" followed by a class name for a list of
commands in that class.
Type "help" followed by command name for full
documentation.
Command name abbreviations are allowed if unambiguous.
(@value{GDBP})
@end smallexample
@c the above line break eliminates huge line overfull...
@item help @var{class}
Using one of the general help classes as an argument, you can get a
list of the individual commands in that class. For example, here is the
help display for the class @code{status}:
@smallexample
(@value{GDBP}) help status
Status inquiries.
List of commands:
@c Line break in "show" line falsifies real output, but needed
@c to fit in smallbook page size.
info -- Generic command for showing things
about the program being debugged
show -- Generic command for showing things
about the debugger
Type "help" followed by command name for full
documentation.
Command name abbreviations are allowed if unambiguous.
(@value{GDBP})
@end smallexample
@item help @var{command}
With a command name as @code{help} argument, @value{GDBN} displays a
short paragraph on how to use that command.
@kindex apropos
@item apropos @var{args}
The @code{apropos @var{args}} command searches through all of the @value{GDBN}
commands, and their documentation, for the regular expression specified in
@var{args}. It prints out all matches found. For example:
@smallexample
apropos reload
@end smallexample
@noindent
results in:
@smallexample
@c @group
set symbol-reloading -- Set dynamic symbol table reloading
multiple times in one run
show symbol-reloading -- Show dynamic symbol table reloading
multiple times in one run
@c @end group
@end smallexample
@kindex complete
@item complete @var{args}
The @code{complete @var{args}} command lists all the possible completions
for the beginning of a command. Use @var{args} to specify the beginning of the
command you want completed. For example:
@smallexample
complete i
@end smallexample
@noindent results in:
@smallexample
@group
if
ignore
info
inspect
@end group
@end smallexample
@noindent This is intended for use by @sc{gnu} Emacs.
@end table
In addition to @code{help}, you can use the @value{GDBN} commands @code{info}
and @code{show} to inquire about the state of your program, or the state
of @value{GDBN} itself. Each command supports many topics of inquiry; this
manual introduces each of them in the appropriate context. The listings
under @code{info} and under @code{show} in the Index point to
all the sub-commands. @xref{Index}.
@c @group
@table @code
@kindex info
@kindex i @r{(@code{info})}
@item info
This command (abbreviated @code{i}) is for describing the state of your
program. For example, you can list the arguments given to your program
with @code{info args}, list the registers currently in use with @code{info
registers}, or list the breakpoints you have set with @code{info breakpoints}.
You can get a complete list of the @code{info} sub-commands with
@w{@code{help info}}.
@kindex set
@item set
You can assign the result of an expression to an environment variable with
@code{set}. For example, you can set the @value{GDBN} prompt to a $-sign with
@code{set prompt $}.
@kindex show
@item show
In contrast to @code{info}, @code{show} is for describing the state of
@value{GDBN} itself.
You can change most of the things you can @code{show}, by using the
related command @code{set}; for example, you can control what number
system is used for displays with @code{set radix}, or simply inquire
which is currently in use with @code{show radix}.
@kindex info set
To display all the settable parameters and their current
values, you can use @code{show} with no arguments; you may also use
@code{info set}. Both commands produce the same display.
@c FIXME: "info set" violates the rule that "info" is for state of
@c FIXME...program. Ck w/ GNU: "info set" to be called something else,
@c FIXME...or change desc of rule---eg "state of prog and debugging session"?
@end table
@c @end group
Here are three miscellaneous @code{show} subcommands, all of which are
exceptional in lacking corresponding @code{set} commands:
@table @code
@kindex show version
@cindex version number
@item show version
Show what version of @value{GDBN} is running. You should include this
information in @value{GDBN} bug-reports. If multiple versions of
@value{GDBN} are in use at your site, you may need to determine which
version of @value{GDBN} you are running; as @value{GDBN} evolves, new
commands are introduced, and old ones may wither away. Also, many
system vendors ship variant versions of @value{GDBN}, and there are
variant versions of @value{GDBN} in @sc{gnu}/Linux distributions as well.
The version number is the same as the one announced when you start
@value{GDBN}.
@kindex show copying
@item show copying
Display information about permission for copying @value{GDBN}.
@kindex show warranty
@item show warranty
Display the @sc{gnu} ``NO WARRANTY'' statement, or a warranty,
if your version of @value{GDBN} comes with one.
@end table
@node Running
@chapter Running Programs Under @value{GDBN}
When you run a program under @value{GDBN}, you must first generate
debugging information when you compile it.
You may start @value{GDBN} with its arguments, if any, in an environment
of your choice. If you are doing native debugging, you may redirect
your program's input and output, debug an already running process, or
kill a child process.
@menu
* Compilation:: Compiling for debugging
* Starting:: Starting your program
* Arguments:: Your program's arguments
* Environment:: Your program's environment
* Working Directory:: Your program's working directory
* Input/Output:: Your program's input and output
* Attach:: Debugging an already-running process
* Kill Process:: Killing the child process
* Threads:: Debugging programs with multiple threads
* Processes:: Debugging programs with multiple processes
@end menu
@node Compilation
@section Compiling for debugging
In order to debug a program effectively, you need to generate
debugging information when you compile it. This debugging information
is stored in the object file; it describes the data type of each
variable or function and the correspondence between source line numbers
and addresses in the executable code.
To request debugging information, specify the @samp{-g} option when you run
the compiler.
Most compilers do not include information about preprocessor macros in
the debugging information if you specify the @option{-g} flag alone,
because this information is rather large. Version 3.1 of @value{NGCC},
the @sc{gnu} C compiler, provides macro information if you specify the
options @option{-gdwarf-2} and @option{-g3}; the former option requests
debugging information in the Dwarf 2 format, and the latter requests
``extra information''. In the future, we hope to find more compact ways
to represent macro information, so that it can be included with
@option{-g} alone.
Many C compilers are unable to handle the @samp{-g} and @samp{-O}
options together. Using those compilers, you cannot generate optimized
executables containing debugging information.
@value{NGCC}, the @sc{gnu} C compiler, supports @samp{-g} with or
without @samp{-O}, making it possible to debug optimized code. We
recommend that you @emph{always} use @samp{-g} whenever you compile a
program. You may think your program is correct, but there is no sense
in pushing your luck.
@cindex optimized code, debugging
@cindex debugging optimized code
When you debug a program compiled with @samp{-g -O}, remember that the
optimizer is rearranging your code; the debugger shows you what is
really there. Do not be too surprised when the execution path does not
exactly match your source file! An extreme example: if you define a
variable, but never use it, @value{GDBN} never sees that
variable---because the compiler optimizes it out of existence.
Some things do not work as well with @samp{-g -O} as with just
@samp{-g}, particularly on machines with instruction scheduling. If in
doubt, recompile with @samp{-g} alone, and if this fixes the problem,
please report it to us as a bug (including a test case!).
Older versions of the @sc{gnu} C compiler permitted a variant option
@w{@samp{-gg}} for debugging information. @value{GDBN} no longer supports this
format; if your @sc{gnu} C compiler has this option, do not use it.
@need 2000
@node Starting
@section Starting your program
@cindex starting
@cindex running
@table @code
@kindex run
@kindex r @r{(@code{run})}
@item run
@itemx r
Use the @code{run} command to start your program under @value{GDBN}.
You must first specify the program name (except on VxWorks) with an
argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of
@value{GDBN}}), or by using the @code{file} or @code{exec-file} command
(@pxref{Files, ,Commands to specify files}).
@end table
If you are running your program in an execution environment that
supports processes, @code{run} creates an inferior process and makes
that process run your program. (In environments without processes,
@code{run} jumps to the start of your program.)
The execution of a program is affected by certain information it
receives from its superior. @value{GDBN} provides ways to specify this
information, which you must do @emph{before} starting your program. (You
can change it after starting your program, but such changes only affect
your program the next time you start it.) This information may be
divided into four categories:
@table @asis
@item The @emph{arguments.}
Specify the arguments to give your program as the arguments of the
@code{run} command. If a shell is available on your target, the shell
is used to pass the arguments, so that you may use normal conventions
(such as wildcard expansion or variable substitution) in describing
the arguments.
In Unix systems, you can control which shell is used with the
@code{SHELL} environment variable.
@xref{Arguments, ,Your program's arguments}.
@item The @emph{environment.}
Your program normally inherits its environment from @value{GDBN}, but you can
use the @value{GDBN} commands @code{set environment} and @code{unset
environment} to change parts of the environment that affect
your program. @xref{Environment, ,Your program's environment}.
@item The @emph{working directory.}
Your program inherits its working directory from @value{GDBN}. You can set
the @value{GDBN} working directory with the @code{cd} command in @value{GDBN}.
@xref{Working Directory, ,Your program's working directory}.
@item The @emph{standard input and output.}
Your program normally uses the same device for standard input and
standard output as @value{GDBN} is using. You can redirect input and output
in the @code{run} command line, or you can use the @code{tty} command to
set a different device for your program.
@xref{Input/Output, ,Your program's input and output}.
@cindex pipes
@emph{Warning:} While input and output redirection work, you cannot use
pipes to pass the output of the program you are debugging to another
program; if you attempt this, @value{GDBN} is likely to wind up debugging the
wrong program.
@end table
When you issue the @code{run} command, your program begins to execute
immediately. @xref{Stopping, ,Stopping and continuing}, for discussion
of how to arrange for your program to stop. Once your program has
stopped, you may call functions in your program, using the @code{print}
or @code{call} commands. @xref{Data, ,Examining Data}.
If the modification time of your symbol file has changed since the last
time @value{GDBN} read its symbols, @value{GDBN} discards its symbol
table, and reads it again. When it does this, @value{GDBN} tries to retain
your current breakpoints.
@node Arguments
@section Your program's arguments
@cindex arguments (to your program)
The arguments to your program can be specified by the arguments of the
@code{run} command.
They are passed to a shell, which expands wildcard characters and
performs redirection of I/O, and thence to your program. Your
@code{SHELL} environment variable (if it exists) specifies what shell
@value{GDBN} uses. If you do not define @code{SHELL}, @value{GDBN} uses
the default shell (@file{/bin/sh} on Unix).
On non-Unix systems, the program is usually invoked directly by
@value{GDBN}, which emulates I/O redirection via the appropriate system
calls, and the wildcard characters are expanded by the startup code of
the program, not by the shell.
@code{run} with no arguments uses the same arguments used by the previous
@code{run}, or those set by the @code{set args} command.
@table @code
@kindex set args
@item set args
Specify the arguments to be used the next time your program is run. If
@code{set args} has no arguments, @code{run} executes your program
with no arguments. Once you have run your program with arguments,
using @code{set args} before the next @code{run} is the only way to run
it again without arguments.
@kindex show args
@item show args
Show the arguments to give your program when it is started.
@end table
@node Environment
@section Your program's environment
@cindex environment (of your program)
The @dfn{environment} consists of a set of environment variables and
their values. Environment variables conventionally record such things as
your user name, your home directory, your terminal type, and your search
path for programs to run. Usually you set up environment variables with
the shell and they are inherited by all the other programs you run. When
debugging, it can be useful to try running your program with a modified
environment without having to start @value{GDBN} over again.
@table @code
@kindex path
@item path @var{directory}
Add @var{directory} to the front of the @code{PATH} environment variable
(the search path for executables) that will be passed to your program.
The value of @code{PATH} used by @value{GDBN} does not change.
You may specify several directory names, separated by whitespace or by a
system-dependent separator character (@samp{:} on Unix, @samp{;} on
MS-DOS and MS-Windows). If @var{directory} is already in the path, it
is moved to the front, so it is searched sooner.
You can use the string @samp{$cwd} to refer to whatever is the current
working directory at the time @value{GDBN} searches the path. If you
use @samp{.} instead, it refers to the directory where you executed the
@code{path} command. @value{GDBN} replaces @samp{.} in the
@var{directory} argument (with the current path) before adding
@var{directory} to the search path.
@c 'path' is explicitly nonrepeatable, but RMS points out it is silly to
@c document that, since repeating it would be a no-op.
@kindex show paths
@item show paths
Display the list of search paths for executables (the @code{PATH}
environment variable).
@kindex show environment
@item show environment @r{[}@var{varname}@r{]}
Print the value of environment variable @var{varname} to be given to
your program when it starts. If you do not supply @var{varname},
print the names and values of all environment variables to be given to
your program. You can abbreviate @code{environment} as @code{env}.
@kindex set environment
@item set environment @var{varname} @r{[}=@var{value}@r{]}
Set environment variable @var{varname} to @var{value}. The value
changes for your program only, not for @value{GDBN} itself. @var{value} may
be any string; the values of environment variables are just strings, and
any interpretation is supplied by your program itself. The @var{value}
parameter is optional; if it is eliminated, the variable is set to a
null value.
@c "any string" here does not include leading, trailing
@c blanks. Gnu asks: does anyone care?
For example, this command:
@smallexample
set env USER = foo
@end smallexample
@noindent
tells the debugged program, when subsequently run, that its user is named
@samp{foo}. (The spaces around @samp{=} are used for clarity here; they
are not actually required.)
@kindex unset environment
@item unset environment @var{varname}
Remove variable @var{varname} from the environment to be passed to your
program. This is different from @samp{set env @var{varname} =};
@code{unset environment} removes the variable from the environment,
rather than assigning it an empty value.
@end table
@emph{Warning:} On Unix systems, @value{GDBN} runs your program using
the shell indicated
by your @code{SHELL} environment variable if it exists (or
@code{/bin/sh} if not). If your @code{SHELL} variable names a shell
that runs an initialization file---such as @file{.cshrc} for C-shell, or
@file{.bashrc} for BASH---any variables you set in that file affect
your program. You may wish to move setting of environment variables to
files that are only run when you sign on, such as @file{.login} or
@file{.profile}.
@node Working Directory
@section Your program's working directory
@cindex working directory (of your program)
Each time you start your program with @code{run}, it inherits its
working directory from the current working directory of @value{GDBN}.
The @value{GDBN} working directory is initially whatever it inherited
from its parent process (typically the shell), but you can specify a new
working directory in @value{GDBN} with the @code{cd} command.
The @value{GDBN} working directory also serves as a default for the commands
that specify files for @value{GDBN} to operate on. @xref{Files, ,Commands to
specify files}.
@table @code
@kindex cd
@item cd @var{directory}
Set the @value{GDBN} working directory to @var{directory}.
@kindex pwd
@item pwd
Print the @value{GDBN} working directory.
@end table
@node Input/Output
@section Your program's input and output
@cindex redirection
@cindex i/o
@cindex terminal
By default, the program you run under @value{GDBN} does input and output to
the same terminal that @value{GDBN} uses. @value{GDBN} switches the terminal
to its own terminal modes to interact with you, but it records the terminal
modes your program was using and switches back to them when you continue
running your program.
@table @code
@kindex info terminal
@item info terminal
Displays information recorded by @value{GDBN} about the terminal modes your
program is using.
@end table
You can redirect your program's input and/or output using shell
redirection with the @code{run} command. For example,
@smallexample
run > outfile
@end smallexample
@noindent
starts your program, diverting its output to the file @file{outfile}.
@kindex tty
@cindex controlling terminal
Another way to specify where your program should do input and output is
with the @code{tty} command. This command accepts a file name as
argument, and causes this file to be the default for future @code{run}
commands. It also resets the controlling terminal for the child
process, for future @code{run} commands. For example,
@smallexample
tty /dev/ttyb
@end smallexample
@noindent
directs that processes started with subsequent @code{run} commands
default to do input and output on the terminal @file{/dev/ttyb} and have
that as their controlling terminal.
An explicit redirection in @code{run} overrides the @code{tty} command's
effect on the input/output device, but not its effect on the controlling
terminal.
When you use the @code{tty} command or redirect input in the @code{run}
command, only the input @emph{for your program} is affected. The input
for @value{GDBN} still comes from your terminal.
@node Attach
@section Debugging an already-running process
@kindex attach
@cindex attach
@table @code
@item attach @var{process-id}
This command attaches to a running process---one that was started
outside @value{GDBN}. (@code{info files} shows your active
targets.) The command takes as argument a process ID. The usual way to
find out the process-id of a Unix process is with the @code{ps} utility,
or with the @samp{jobs -l} shell command.
@code{attach} does not repeat if you press @key{RET} a second time after
executing the command.
@end table
To use @code{attach}, your program must be running in an environment
which supports processes; for example, @code{attach} does not work for
programs on bare-board targets that lack an operating system. You must
also have permission to send the process a signal.
When you use @code{attach}, the debugger finds the program running in
the process first by looking in the current working directory, then (if
the program is not found) by using the source file search path
(@pxref{Source Path, ,Specifying source directories}). You can also use
the @code{file} command to load the program. @xref{Files, ,Commands to
Specify Files}.
The first thing @value{GDBN} does after arranging to debug the specified
process is to stop it. You can examine and modify an attached process
with all the @value{GDBN} commands that are ordinarily available when
you start processes with @code{run}. You can insert breakpoints; you
can step and continue; you can modify storage. If you would rather the
process continue running, you may use the @code{continue} command after
attaching @value{GDBN} to the process.
@table @code
@kindex detach
@item detach
When you have finished debugging the attached process, you can use the
@code{detach} command to release it from @value{GDBN} control. Detaching
the process continues its execution. After the @code{detach} command,
that process and @value{GDBN} become completely independent once more, and you
are ready to @code{attach} another process or start one with @code{run}.
@code{detach} does not repeat if you press @key{RET} again after
executing the command.
@end table
If you exit @value{GDBN} or use the @code{run} command while you have an
attached process, you kill that process. By default, @value{GDBN} asks
for confirmation if you try to do either of these things; you can
control whether or not you need to confirm by using the @code{set
confirm} command (@pxref{Messages/Warnings, ,Optional warnings and
messages}).
@node Kill Process
@section Killing the child process
@table @code
@kindex kill
@item kill
Kill the child process in which your program is running under @value{GDBN}.
@end table
This command is useful if you wish to debug a core dump instead of a
running process. @value{GDBN} ignores any core dump file while your program
is running.
On some operating systems, a program cannot be executed outside @value{GDBN}
while you have breakpoints set on it inside @value{GDBN}. You can use the
@code{kill} command in this situation to permit running your program
outside the debugger.
The @code{kill} command is also useful if you wish to recompile and
relink your program, since on many systems it is impossible to modify an
executable file while it is running in a process. In this case, when you
next type @code{run}, @value{GDBN} notices that the file has changed, and
reads the symbol table again (while trying to preserve your current
breakpoint settings).
@node Threads
@section Debugging programs with multiple threads
@cindex threads of execution
@cindex multiple threads
@cindex switching threads
In some operating systems, such as HP-UX and Solaris, a single program
may have more than one @dfn{thread} of execution. The precise semantics
of threads differ from one operating system to another, but in general
the threads of a single program are akin to multiple processes---except
that they share one address space (that is, they can all examine and
modify the same variables). On the other hand, each thread has its own
registers and execution stack, and perhaps private memory.
@value{GDBN} provides these facilities for debugging multi-thread
programs:
@itemize @bullet
@item automatic notification of new threads
@item @samp{thread @var{threadno}}, a command to switch among threads
@item @samp{info threads}, a command to inquire about existing threads
@item @samp{thread apply [@var{threadno}] [@var{all}] @var{args}},
a command to apply a command to a list of threads
@item thread-specific breakpoints
@end itemize
@quotation
@emph{Warning:} These facilities are not yet available on every
@value{GDBN} configuration where the operating system supports threads.
If your @value{GDBN} does not support threads, these commands have no
effect. For example, a system without thread support shows no output
from @samp{info threads}, and always rejects the @code{thread} command,
like this:
@smallexample
(@value{GDBP}) info threads
(@value{GDBP}) thread 1
Thread ID 1 not known. Use the "info threads" command to
see the IDs of currently known threads.
@end smallexample
@c FIXME to implementors: how hard would it be to say "sorry, this GDB
@c doesn't support threads"?
@end quotation
@cindex focus of debugging
@cindex current thread
The @value{GDBN} thread debugging facility allows you to observe all
threads while your program runs---but whenever @value{GDBN} takes
control, one thread in particular is always the focus of debugging.
This thread is called the @dfn{current thread}. Debugging commands show
program information from the perspective of the current thread.
@cindex @code{New} @var{systag} message
@cindex thread identifier (system)
@c FIXME-implementors!! It would be more helpful if the [New...] message
@c included GDB's numeric thread handle, so you could just go to that
@c thread without first checking `info threads'.
Whenever @value{GDBN} detects a new thread in your program, it displays
the target system's identification for the thread with a message in the
form @samp{[New @var{systag}]}. @var{systag} is a thread identifier
whose form varies depending on the particular system. For example, on
LynxOS, you might see
@smallexample
[New process 35 thread 27]
@end smallexample
@noindent
when @value{GDBN} notices a new thread. In contrast, on an SGI system,
the @var{systag} is simply something like @samp{process 368}, with no
further qualifier.
@c FIXME!! (1) Does the [New...] message appear even for the very first
@c thread of a program, or does it only appear for the
@c second---i.e.@: when it becomes obvious we have a multithread
@c program?
@c (2) *Is* there necessarily a first thread always? Or do some
@c multithread systems permit starting a program with multiple
@c threads ab initio?
@cindex thread number
@cindex thread identifier (GDB)
For debugging purposes, @value{GDBN} associates its own thread
number---always a single integer---with each thread in your program.
@table @code
@kindex info threads
@item info threads
Display a summary of all threads currently in your
program. @value{GDBN} displays for each thread (in this order):
@enumerate
@item the thread number assigned by @value{GDBN}
@item the target system's thread identifier (@var{systag})
@item the current stack frame summary for that thread
@end enumerate
@noindent
An asterisk @samp{*} to the left of the @value{GDBN} thread number
indicates the current thread.
For example,
@end table
@c end table here to get a little more width for example
@smallexample
(@value{GDBP}) info threads
3 process 35 thread 27 0x34e5 in sigpause ()
2 process 35 thread 23 0x34e5 in sigpause ()
* 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8)
at threadtest.c:68
@end smallexample
On HP-UX systems:
@cindex thread number
@cindex thread identifier (GDB)
For debugging purposes, @value{GDBN} associates its own thread
number---a small integer assigned in thread-creation order---with each
thread in your program.
@cindex @code{New} @var{systag} message, on HP-UX
@cindex thread identifier (system), on HP-UX
@c FIXME-implementors!! It would be more helpful if the [New...] message
@c included GDB's numeric thread handle, so you could just go to that
@c thread without first checking `info threads'.
Whenever @value{GDBN} detects a new thread in your program, it displays
both @value{GDBN}'s thread number and the target system's identification for the thread with a message in the
form @samp{[New @var{systag}]}. @var{systag} is a thread identifier
whose form varies depending on the particular system. For example, on
HP-UX, you see
@smallexample
[New thread 2 (system thread 26594)]
@end smallexample
@noindent
when @value{GDBN} notices a new thread.
@table @code
@kindex info threads
@item info threads
Display a summary of all threads currently in your
program. @value{GDBN} displays for each thread (in this order):
@enumerate
@item the thread number assigned by @value{GDBN}
@item the target system's thread identifier (@var{systag})
@item the current stack frame summary for that thread
@end enumerate
@noindent
An asterisk @samp{*} to the left of the @value{GDBN} thread number
indicates the current thread.
For example,
@end table
@c end table here to get a little more width for example
@smallexample
(@value{GDBP}) info threads
* 3 system thread 26607 worker (wptr=0x7b09c318 "@@") \@*
at quicksort.c:137
2 system thread 26606 0x7b0030d8 in __ksleep () \@*
from /usr/lib/libc.2
1 system thread 27905 0x7b003498 in _brk () \@*
from /usr/lib/libc.2
@end smallexample
@table @code
@kindex thread @var{threadno}
@item thread @var{threadno}
Make thread number @var{threadno} the current thread. The command
argument @var{threadno} is the internal @value{GDBN} thread number, as
shown in the first field of the @samp{info threads} display.
@value{GDBN} responds by displaying the system identifier of the thread
you selected, and its current stack frame summary:
@smallexample
@c FIXME!! This example made up; find a @value{GDBN} w/threads and get real one
(@value{GDBP}) thread 2
[Switching to process 35 thread 23]
0x34e5 in sigpause ()
@end smallexample
@noindent
As with the @samp{[New @dots{}]} message, the form of the text after
@samp{Switching to} depends on your system's conventions for identifying
threads.
@kindex thread apply
@item thread apply [@var{threadno}] [@var{all}] @var{args}
The @code{thread apply} command allows you to apply a command to one or
more threads. Specify the numbers of the threads that you want affected
with the command argument @var{threadno}. @var{threadno} is the internal
@value{GDBN} thread number, as shown in the first field of the @samp{info
threads} display. To apply a command to all threads, use
@code{thread apply all} @var{args}.
@end table
@cindex automatic thread selection
@cindex switching threads automatically
@cindex threads, automatic switching
Whenever @value{GDBN} stops your program, due to a breakpoint or a
signal, it automatically selects the thread where that breakpoint or
signal happened. @value{GDBN} alerts you to the context switch with a
message of the form @samp{[Switching to @var{systag}]} to identify the
thread.
@xref{Thread Stops,,Stopping and starting multi-thread programs}, for
more information about how @value{GDBN} behaves when you stop and start
programs with multiple threads.
@xref{Set Watchpoints,,Setting watchpoints}, for information about
watchpoints in programs with multiple threads.
@node Processes
@section Debugging programs with multiple processes
@cindex fork, debugging programs which call
@cindex multiple processes
@cindex processes, multiple
On most systems, @value{GDBN} has no special support for debugging
programs which create additional processes using the @code{fork}
function. When a program forks, @value{GDBN} will continue to debug the
parent process and the child process will run unimpeded. If you have
set a breakpoint in any code which the child then executes, the child
will get a @code{SIGTRAP} signal which (unless it catches the signal)
will cause it to terminate.
However, if you want to debug the child process there is a workaround
which isn't too painful. Put a call to @code{sleep} in the code which
the child process executes after the fork. It may be useful to sleep
only if a certain environment variable is set, or a certain file exists,
so that the delay need not occur when you don't want to run @value{GDBN}
on the child. While the child is sleeping, use the @code{ps} program to
get its process ID. Then tell @value{GDBN} (a new invocation of
@value{GDBN} if you are also debugging the parent process) to attach to
the child process (@pxref{Attach}). From that point on you can debug
the child process just like any other process which you attached to.
On HP-UX (11.x and later only?), @value{GDBN} provides support for
debugging programs that create additional processes using the
@code{fork} or @code{vfork} function.
By default, when a program forks, @value{GDBN} will continue to debug
the parent process and the child process will run unimpeded.
If you want to follow the child process instead of the parent process,
use the command @w{@code{set follow-fork-mode}}.
@table @code
@kindex set follow-fork-mode
@item set follow-fork-mode @var{mode}
Set the debugger response to a program call of @code{fork} or
@code{vfork}. A call to @code{fork} or @code{vfork} creates a new
process. The @var{mode} can be:
@table @code
@item parent
The original process is debugged after a fork. The child process runs
unimpeded. This is the default.
@item child
The new process is debugged after a fork. The parent process runs
unimpeded.
@item ask
The debugger will ask for one of the above choices.
@end table
@item show follow-fork-mode
Display the current debugger response to a @code{fork} or @code{vfork} call.
@end table
If you ask to debug a child process and a @code{vfork} is followed by an
@code{exec}, @value{GDBN} executes the new target up to the first
breakpoint in the new target. If you have a breakpoint set on
@code{main} in your original program, the breakpoint will also be set on
the child process's @code{main}.
When a child process is spawned by @code{vfork}, you cannot debug the
child or parent until an @code{exec} call completes.
If you issue a @code{run} command to @value{GDBN} after an @code{exec}
call executes, the new target restarts. To restart the parent process,
use the @code{file} command with the parent executable name as its
argument.
You can use the @code{catch} command to make @value{GDBN} stop whenever
a @code{fork}, @code{vfork}, or @code{exec} call is made. @xref{Set
Catchpoints, ,Setting catchpoints}.
@node Stopping
@chapter Stopping and Continuing
The principal purposes of using a debugger are so that you can stop your
program before it terminates; or so that, if your program runs into
trouble, you can investigate and find out why.
Inside @value{GDBN}, your program may stop for any of several reasons,
such as a signal, a breakpoint, or reaching a new line after a
@value{GDBN} command such as @code{step}. You may then examine and
change variables, set new breakpoints or remove old ones, and then
continue execution. Usually, the messages shown by @value{GDBN} provide
ample explanation of the status of your program---but you can also
explicitly request this information at any time.
@table @code
@kindex info program
@item info program
Display information about the status of your program: whether it is
running or not, what process it is, and why it stopped.
@end table
@menu
* Breakpoints:: Breakpoints, watchpoints, and catchpoints
* Continuing and Stepping:: Resuming execution
* Signals:: Signals
* Thread Stops:: Stopping and starting multi-thread programs
@end menu
@node Breakpoints
@section Breakpoints, watchpoints, catchpoints, and exceptions
@cindex breakpoints
A @dfn{breakpoint} makes your program stop whenever a certain point in
the program is reached. For each breakpoint, you can add conditions to
control in finer detail whether your program stops. You can set
breakpoints with the @code{break} command and its variants (@pxref{Set
Breaks, ,Setting breakpoints}), to specify the place where your program
should stop by line number, function name or exact address in the
program.
In HP-UX, SunOS 4.x, SVR4, and Alpha OSF/1 configurations, you can set
breakpoints in shared libraries before the executable is run. There is
a minor limitation on HP-UX systems: you must wait until the executable
is run in order to set breakpoints in shared library routines that are
not called directly by the program (for example, routines that are
arguments in a @code{pthread_create} call).
@cindex watchpoints
@cindex memory tracing
@cindex breakpoint on memory address
@cindex breakpoint on variable modification
A @dfn{watchpoint} is a special breakpoint that stops your program
when the value of an expression changes. You must use a different
command to set watchpoints (@pxref{Set Watchpoints, ,Setting
watchpoints}), but aside from that, you can manage a watchpoint like
any other breakpoint: you enable, disable, and delete both breakpoints
and watchpoints using the same commands.
You can arrange to have values from your program displayed automatically
whenever @value{GDBN} stops at a breakpoint. @xref{Auto Display,,
Automatic display}.
@cindex catchpoints
@cindex breakpoint on events
A @dfn{catchpoint} is another special breakpoint that stops your program
when a certain kind of event occurs, such as the throwing of a C@t{++}
exception or the loading of a library. As with watchpoints, you use a
different command to set a catchpoint (@pxref{Set Catchpoints, ,Setting
catchpoints}), but aside from that, you can manage a catchpoint like any
other breakpoint. (To stop when your program receives a signal, use the
@code{handle} command; see @ref{Signals, ,Signals}.)
@cindex breakpoint numbers
@cindex numbers for breakpoints
@value{GDBN} assigns a number to each breakpoint, watchpoint, or
catchpoint when you create it; these numbers are successive integers
starting with one. In many of the commands for controlling various
features of breakpoints you use the breakpoint number to say which
breakpoint you want to change. Each breakpoint may be @dfn{enabled} or
@dfn{disabled}; if disabled, it has no effect on your program until you
enable it again.
@cindex breakpoint ranges
@cindex ranges of breakpoints
Some @value{GDBN} commands accept a range of breakpoints on which to
operate. A breakpoint range is either a single breakpoint number, like
@samp{5}, or two such numbers, in increasing order, separated by a
hyphen, like @samp{5-7}. When a breakpoint range is given to a command,
all breakpoint in that range are operated on.
@menu
* Set Breaks:: Setting breakpoints
* Set Watchpoints:: Setting watchpoints
* Set Catchpoints:: Setting catchpoints
* Delete Breaks:: Deleting breakpoints
* Disabling:: Disabling breakpoints
* Conditions:: Break conditions
* Break Commands:: Breakpoint command lists
* Breakpoint Menus:: Breakpoint menus
* Error in Breakpoints:: ``Cannot insert breakpoints''
@end menu
@node Set Breaks
@subsection Setting breakpoints
@c FIXME LMB what does GDB do if no code on line of breakpt?
@c consider in particular declaration with/without initialization.
@c
@c FIXME 2 is there stuff on this already? break at fun start, already init?
@kindex break
@kindex b @r{(@code{break})}
@vindex $bpnum@r{, convenience variable}
@cindex latest breakpoint
Breakpoints are set with the @code{break} command (abbreviated
@code{b}). The debugger convenience variable @samp{$bpnum} records the
number of the breakpoint you've set most recently; see @ref{Convenience
Vars,, Convenience variables}, for a discussion of what you can do with
convenience variables.
You have several ways to say where the breakpoint should go.
@table @code
@item break @var{function}
Set a breakpoint at entry to function @var{function}.
When using source languages that permit overloading of symbols, such as
C@t{++}, @var{function} may refer to more than one possible place to break.
@xref{Breakpoint Menus,,Breakpoint menus}, for a discussion of that situation.
@item break +@var{offset}
@itemx break -@var{offset}
Set a breakpoint some number of lines forward or back from the position
at which execution stopped in the currently selected @dfn{stack frame}.
(@xref{Frames, ,Frames}, for a description of stack frames.)
@item break @var{linenum}
Set a breakpoint at line @var{linenum} in the current source file.
The current source file is the last file whose source text was printed.
The breakpoint will stop your program just before it executes any of the
code on that line.
@item break @var{filename}:@var{linenum}
Set a breakpoint at line @var{linenum} in source file @var{filename}.
@item break @var{filename}:@var{function}
Set a breakpoint at entry to function @var{function} found in file
@var{filename}. Specifying a file name as well as a function name is
superfluous except when multiple files contain similarly named
functions.
@item break *@var{address}
Set a breakpoint at address @var{address}. You can use this to set
breakpoints in parts of your program which do not have debugging
information or source files.
@item break
When called without any arguments, @code{break} sets a breakpoint at
the next instruction to be executed in the selected stack frame
(@pxref{Stack, ,Examining the Stack}). In any selected frame but the
innermost, this makes your program stop as soon as control
returns to that frame. This is similar to the effect of a
@code{finish} command in the frame inside the selected frame---except
that @code{finish} does not leave an active breakpoint. If you use
@code{break} without an argument in the innermost frame, @value{GDBN} stops
the next time it reaches the current location; this may be useful
inside loops.
@value{GDBN} normally ignores breakpoints when it resumes execution, until at
least one instruction has been executed. If it did not do this, you
would be unable to proceed past a breakpoint without first disabling the
breakpoint. This rule applies whether or not the breakpoint already
existed when your program stopped.
@item break @dots{} if @var{cond}
Set a breakpoint with condition @var{cond}; evaluate the expression
@var{cond} each time the breakpoint is reached, and stop only if the
value is nonzero---that is, if @var{cond} evaluates as true.
@samp{@dots{}} stands for one of the possible arguments described
above (or no argument) specifying where to break. @xref{Conditions,
,Break conditions}, for more information on breakpoint conditions.
@kindex tbreak
@item tbreak @var{args}
Set a breakpoint enabled only for one stop. @var{args} are the
same as for the @code{break} command, and the breakpoint is set in the same
way, but the breakpoint is automatically deleted after the first time your
program stops there. @xref{Disabling, ,Disabling breakpoints}.
@kindex hbreak
@item hbreak @var{args}
Set a hardware-assisted breakpoint. @var{args} are the same as for the
@code{break} command and the breakpoint is set in the same way, but the
breakpoint requires hardware support and some target hardware may not
have this support. The main purpose of this is EPROM/ROM code
debugging, so you can set a breakpoint at an instruction without
changing the instruction. This can be used with the new trap-generation
provided by SPARClite DSU and some x86-based targets. These targets
will generate traps when a program accesses some data or instruction
address that is assigned to the debug registers. However the hardware
breakpoint registers can take a limited number of breakpoints. For
example, on the DSU, only two data breakpoints can be set at a time, and
@value{GDBN} will reject this command if more than two are used. Delete
or disable unused hardware breakpoints before setting new ones
(@pxref{Disabling, ,Disabling}). @xref{Conditions, ,Break conditions}.
@kindex thbreak
@item thbreak @var{args}
Set a hardware-assisted breakpoint enabled only for one stop. @var{args}
are the same as for the @code{hbreak} command and the breakpoint is set in
the same way. However, like the @code{tbreak} command,
the breakpoint is automatically deleted after the
first time your program stops there. Also, like the @code{hbreak}
command, the breakpoint requires hardware support and some target hardware
may not have this support. @xref{Disabling, ,Disabling breakpoints}.
See also @ref{Conditions, ,Break conditions}.
@kindex rbreak
@cindex regular expression
@item rbreak @var{regex}
Set breakpoints on all functions matching the regular expression
@var{regex}. This command sets an unconditional breakpoint on all
matches, printing a list of all breakpoints it set. Once these
breakpoints are set, they are treated just like the breakpoints set with
the @code{break} command. You can delete them, disable them, or make
them conditional the same way as any other breakpoint.
The syntax of the regular expression is the standard one used with tools
like @file{grep}. Note that this is different from the syntax used by
shells, so for instance @code{foo*} matches all functions that include
an @code{fo} followed by zero or more @code{o}s. There is an implicit
@code{.*} leading and trailing the regular expression you supply, so to
match only functions that begin with @code{foo}, use @code{^foo}.
When debugging C@t{++} programs, @code{rbreak} is useful for setting
breakpoints on overloaded functions that are not members of any special
classes.
@kindex info breakpoints
@cindex @code{$_} and @code{info breakpoints}
@item info breakpoints @r{[}@var{n}@r{]}
@itemx info break @r{[}@var{n}@r{]}
@itemx info watchpoints @r{[}@var{n}@r{]}
Print a table of all breakpoints, watchpoints, and catchpoints set and
not deleted, with the following columns for each breakpoint:
@table @emph
@item Breakpoint Numbers
@item Type
Breakpoint, watchpoint, or catchpoint.
@item Disposition
Whether the breakpoint is marked to be disabled or deleted when hit.
@item Enabled or Disabled
Enabled breakpoints are marked with @samp{y}. @samp{n} marks breakpoints
that are not enabled.
@item Address
Where the breakpoint is in your program, as a memory address.
@item What
Where the breakpoint is in the source for your program, as a file and
line number.
@end table
@noindent
If a breakpoint is conditional, @code{info break} shows the condition on
the line following the affected breakpoint; breakpoint commands, if any,
are listed after that.
@noindent
@code{info break} with a breakpoint
number @var{n} as argument lists only that breakpoint. The
convenience variable @code{$_} and the default examining-address for
the @code{x} command are set to the address of the last breakpoint
listed (@pxref{Memory, ,Examining memory}).
@noindent
@code{info break} displays a count of the number of times the breakpoint
has been hit. This is especially useful in conjunction with the
@code{ignore} command. You can ignore a large number of breakpoint
hits, look at the breakpoint info to see how many times the breakpoint
was hit, and then run again, ignoring one less than that number. This
will get you quickly to the last hit of that breakpoint.
@end table
@value{GDBN} allows you to set any number of breakpoints at the same place in
your program. There is nothing silly or meaningless about this. When
the breakpoints are conditional, this is even useful
(@pxref{Conditions, ,Break conditions}).
@cindex negative breakpoint numbers
@cindex internal @value{GDBN} breakpoints
@value{GDBN} itself sometimes sets breakpoints in your program for
special purposes, such as proper handling of @code{longjmp} (in C
programs). These internal breakpoints are assigned negative numbers,
starting with @code{-1}; @samp{info breakpoints} does not display them.
You can see these breakpoints with the @value{GDBN} maintenance command
@samp{maint info breakpoints} (@pxref{maint info breakpoints}).
@node Set Watchpoints
@subsection Setting watchpoints
@cindex setting watchpoints
@cindex software watchpoints
@cindex hardware watchpoints
You can use a watchpoint to stop execution whenever the value of an
expression changes, without having to predict a particular place where
this may happen.
Depending on your system, watchpoints may be implemented in software or
hardware. @value{GDBN} does software watchpointing by single-stepping your
program and testing the variable's value each time, which is hundreds of
times slower than normal execution. (But this may still be worth it, to
catch errors where you have no clue what part of your program is the
culprit.)
On some systems, such as HP-UX, @sc{gnu}/Linux and some other x86-based targets,
@value{GDBN} includes support for
hardware watchpoints, which do not slow down the running of your
program.
@table @code
@kindex watch
@item watch @var{expr}
Set a watchpoint for an expression. @value{GDBN} will break when @var{expr}
is written into by the program and its value changes.
@kindex rwatch
@item rwatch @var{expr}
Set a watchpoint that will break when watch @var{expr} is read by the program.
@kindex awatch
@item awatch @var{expr}
Set a watchpoint that will break when @var{expr} is either read or written into
by the program.
@kindex info watchpoints
@item info watchpoints
This command prints a list of watchpoints, breakpoints, and catchpoints;
it is the same as @code{info break}.
@end table
@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
watchpoints execute very quickly, and the debugger reports a change in
value at the exact instruction where the change occurs. If @value{GDBN}
cannot set a hardware watchpoint, it sets a software watchpoint, which
executes more slowly and reports the change in value at the next
statement, not the instruction, after the change occurs.
When you issue the @code{watch} command, @value{GDBN} reports
@smallexample
Hardware watchpoint @var{num}: @var{expr}
@end smallexample
@noindent
if it was able to set a hardware watchpoint.
Currently, the @code{awatch} and @code{rwatch} commands can only set
hardware watchpoints, because accesses to data that don't change the
value of the watched expression cannot be detected without examining
every instruction as it is being executed, and @value{GDBN} does not do
that currently. If @value{GDBN} finds that it is unable to set a
hardware breakpoint with the @code{awatch} or @code{rwatch} command, it
will print a message like this:
@smallexample
Expression cannot be implemented with read/access watchpoint.
@end smallexample
Sometimes, @value{GDBN} cannot set a hardware watchpoint because the
data type of the watched expression is wider than what a hardware
watchpoint on the target machine can handle. For example, some systems
can only watch regions that are up to 4 bytes wide; on such systems you
cannot set hardware watchpoints for an expression that yields a
double-precision floating-point number (which is typically 8 bytes
wide). As a work-around, it might be possible to break the large region
into a series of smaller ones and watch them with separate watchpoints.
If you set too many hardware watchpoints, @value{GDBN} might be unable
to insert all of them when you resume the execution of your program.
Since the precise number of active watchpoints is unknown until such
time as the program is about to be resumed, @value{GDBN} might not be
able to warn you about this when you set the watchpoints, and the
warning will be printed only when the program is resumed:
@smallexample
Hardware watchpoint @var{num}: Could not insert watchpoint
@end smallexample
@noindent
If this happens, delete or disable some of the watchpoints.
The SPARClite DSU will generate traps when a program accesses some data
or instruction address that is assigned to the debug registers. For the
data addresses, DSU facilitates the @code{watch} command. However the
hardware breakpoint registers can only take two data watchpoints, and
both watchpoints must be the same kind. For example, you can set two
watchpoints with @code{watch} commands, two with @code{rwatch} commands,
@strong{or} two with @code{awatch} commands, but you cannot set one
watchpoint with one command and the other with a different command.
@value{GDBN} will reject the command if you try to mix watchpoints.
Delete or disable unused watchpoint commands before setting new ones.
If you call a function interactively using @code{print} or @code{call},
any watchpoints you have set will be inactive until @value{GDBN} reaches another
kind of breakpoint or the call completes.
@value{GDBN} automatically deletes watchpoints that watch local
(automatic) variables, or expressions that involve such variables, when
they go out of scope, that is, when the execution leaves the block in
which these variables were defined. In particular, when the program
being debugged terminates, @emph{all} local variables go out of scope,
and so only watchpoints that watch global variables remain set. If you
rerun the program, you will need to set all such watchpoints again. One
way of doing that would be to set a code breakpoint at the entry to the
@code{main} function and when it breaks, set all the watchpoints.
@quotation
@cindex watchpoints and threads
@cindex threads and watchpoints
@emph{Warning:} In multi-thread programs, watchpoints have only limited
usefulness. With the current watchpoint implementation, @value{GDBN}
can only watch the value of an expression @emph{in a single thread}. If
you are confident that the expression can only change due to the current
thread's activity (and if you are also confident that no other thread
can become current), then you can use watchpoints as usual. However,
@value{GDBN} may not notice when a non-current thread's activity changes
the expression.
@c FIXME: this is almost identical to the previous paragraph.
@emph{HP-UX Warning:} In multi-thread programs, software watchpoints
have only limited usefulness. If @value{GDBN} creates a software
watchpoint, it can only watch the value of an expression @emph{in a
single thread}. If you are confident that the expression can only
change due to the current thread's activity (and if you are also
confident that no other thread can become current), then you can use
software watchpoints as usual. However, @value{GDBN} may not notice
when a non-current thread's activity changes the expression. (Hardware
watchpoints, in contrast, watch an expression in all threads.)
@end quotation
@node Set Catchpoints
@subsection Setting catchpoints
@cindex catchpoints, setting
@cindex exception handlers
@cindex event handling
You can use @dfn{catchpoints} to cause the debugger to stop for certain
kinds of program events, such as C@t{++} exceptions or the loading of a
shared library. Use the @code{catch} command to set a catchpoint.
@table @code
@ifset ADA
@kindex break exception
@item break exception
Ada mode uses @code{break exception} to set a breakpoint on exception handlers.
@xref{Ada Exceptions}.
@kindex break assert
@item break assert
Ada mode uses @code{break assert} to set a breakpoint on the raising of the
@code{Assert_Failure} exception.
@end ifset
@kindex catch
@item catch @var{event}
Stop when @var{event} occurs. @var{event} can be any of the following:
@table @code
@item throw
@kindex catch throw
The throwing of a C@t{++} exception.
@item catch
@kindex catch catch
The catching of a C@t{++} exception.
@item exec
@kindex catch exec
A call to @code{exec}. This is currently only available for HP-UX.
@item fork
@kindex catch fork
A call to @code{fork}. This is currently only available for HP-UX.
@item vfork
@kindex catch vfork
A call to @code{vfork}. This is currently only available for HP-UX.
@item load
@itemx load @var{libname}
@kindex catch load
The dynamic loading of any shared library, or the loading of the library
@var{libname}. This is currently only available for HP-UX.
@item unload
@itemx unload @var{libname}
@kindex catch unload
The unloading of any dynamically loaded shared library, or the unloading
of the library @var{libname}. This is currently only available for HP-UX.
@end table
@item tcatch @var{event}
Set a catchpoint that is enabled only for one stop. The catchpoint is
automatically deleted after the first time the event is caught.
@end table
Use the @code{info break} command to list the current catchpoints.
There are currently some limitations to C@t{++} exception handling
(@code{catch throw} and @code{catch catch}) in @value{GDBN}:
@itemize @bullet
@item
If you call a function interactively, @value{GDBN} normally returns
control to you when the function has finished executing. If the call
raises an exception, however, the call may bypass the mechanism that
returns control to you and cause your program either to abort or to
simply continue running until it hits a breakpoint, catches a signal
that @value{GDBN} is listening for, or exits. This is the case even if
you set a catchpoint for the exception; catchpoints on exceptions are
disabled within interactive calls.
@item
You cannot raise an exception interactively.
@item
You cannot install an exception handler interactively.
@end itemize
@cindex raise exceptions
Sometimes @code{catch} is not the best way to debug exception handling:
if you need to know exactly where an exception is raised, it is better to
stop @emph{before} the exception handler is called, since that way you
can see the stack before any unwinding takes place. If you set a
breakpoint in an exception handler instead, it may not be easy to find
out where the exception was raised.
To stop just before an exception handler is called, you need some
knowledge of the implementation. In the case of @sc{gnu} C@t{++}, exceptions are
raised by calling a library function named @code{__raise_exception}
which has the following ANSI C interface:
@smallexample
/* @var{addr} is where the exception identifier is stored.
@var{id} is the exception identifier. */
void __raise_exception (void **addr, void *id);
@end smallexample
@noindent
To make the debugger catch all exceptions before any stack
unwinding takes place, set a breakpoint on @code{__raise_exception}
(@pxref{Breakpoints, ,Breakpoints; watchpoints; and exceptions}).
With a conditional breakpoint (@pxref{Conditions, ,Break conditions})
that depends on the value of @var{id}, you can stop your program when
a specific exception is raised. You can use multiple conditional
breakpoints to stop your program when any of a number of exceptions are
raised.
@node Delete Breaks
@subsection Deleting breakpoints
@cindex clearing breakpoints, watchpoints, catchpoints
@cindex deleting breakpoints, watchpoints, catchpoints
It is often necessary to eliminate a breakpoint, watchpoint, or
catchpoint once it has done its job and you no longer want your program
to stop there. This is called @dfn{deleting} the breakpoint. A
breakpoint that has been deleted no longer exists; it is forgotten.
With the @code{clear} command you can delete breakpoints according to
where they are in your program. With the @code{delete} command you can
delete individual breakpoints, watchpoints, or catchpoints by specifying
their breakpoint numbers.
It is not necessary to delete a breakpoint to proceed past it. @value{GDBN}
automatically ignores breakpoints on the first instruction to be executed
when you continue execution without changing the execution address.
@table @code
@kindex clear
@item clear
Delete any breakpoints at the next instruction to be executed in the
selected stack frame (@pxref{Selection, ,Selecting a frame}). When
the innermost frame is selected, this is a good way to delete a
breakpoint where your program just stopped.
@item clear @var{function}
@itemx clear @var{filename}:@var{function}
Delete any breakpoints set at entry to the function @var{function}.
@item clear @var{linenum}
@itemx clear @var{filename}:@var{linenum}
Delete any breakpoints set at or within the code of the specified line.
@cindex delete breakpoints
@kindex delete
@kindex d @r{(@code{delete})}
@item delete @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]}
Delete the breakpoints, watchpoints, or catchpoints of the breakpoint
ranges specified as arguments. If no argument is specified, delete all
breakpoints (@value{GDBN} asks confirmation, unless you have @code{set
confirm off}). You can abbreviate this command as @code{d}.
@end table
@node Disabling
@subsection Disabling breakpoints
@kindex disable breakpoints
@kindex enable breakpoints
Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
prefer to @dfn{disable} it. This makes the breakpoint inoperative as if
it had been deleted, but remembers the information on the breakpoint so
that you can @dfn{enable} it again later.
You disable and enable breakpoints, watchpoints, and catchpoints with
the @code{enable} and @code{disable} commands, optionally specifying one
or more breakpoint numbers as arguments. Use @code{info break} or
@code{info watch} to print a list of breakpoints, watchpoints, and
catchpoints if you do not know which numbers to use.
A breakpoint, watchpoint, or catchpoint can have any of four different
states of enablement:
@itemize @bullet
@item
Enabled. The breakpoint stops your program. A breakpoint set
with the @code{break} command starts out in this state.
@item
Disabled. The breakpoint has no effect on your program.
@item
Enabled once. The breakpoint stops your program, but then becomes
disabled.
@item
Enabled for deletion. The breakpoint stops your program, but
immediately after it does so it is deleted permanently. A breakpoint
set with the @code{tbreak} command starts out in this state.
@end itemize
You can use the following commands to enable or disable breakpoints,
watchpoints, and catchpoints:
@table @code
@kindex disable breakpoints
@kindex disable
@kindex dis @r{(@code{disable})}
@item disable @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]}
Disable the specified breakpoints---or all breakpoints, if none are
listed. A disabled breakpoint has no effect but is not forgotten. All
options such as ignore-counts, conditions and commands are remembered in
case the breakpoint is enabled again later. You may abbreviate
@code{disable} as @code{dis}.
@kindex enable breakpoints
@kindex enable
@item enable @r{[}breakpoints@r{]} @r{[}@var{range}@dots{}@r{]}
Enable the specified breakpoints (or all defined breakpoints). They
become effective once again in stopping your program.
@item enable @r{[}breakpoints@r{]} once @var{range}@dots{}
Enable the specified breakpoints temporarily. @value{GDBN} disables any
of these breakpoints immediately after stopping your program.
@item enable @r{[}breakpoints@r{]} delete @var{range}@dots{}
Enable the specified breakpoints to work once, then die. @value{GDBN}
deletes any of these breakpoints as soon as your program stops there.
@end table
@c FIXME: I think the following ``Except for [...] @code{tbreak}'' is
@c confusing: tbreak is also initially enabled.
Except for a breakpoint set with @code{tbreak} (@pxref{Set Breaks,
,Setting breakpoints}), breakpoints that you set are initially enabled;
subsequently, they become disabled or enabled only when you use one of
the commands above. (The command @code{until} can set and delete a
breakpoint of its own, but it does not change the state of your other
breakpoints; see @ref{Continuing and Stepping, ,Continuing and
stepping}.)
@node Conditions
@subsection Break conditions
@cindex conditional breakpoints
@cindex breakpoint conditions
@c FIXME what is scope of break condition expr? Context where wanted?
@c in particular for a watchpoint?
The simplest sort of breakpoint breaks every time your program reaches a
specified place. You can also specify a @dfn{condition} for a
breakpoint. A condition is just a Boolean expression in your
programming language (@pxref{Expressions, ,Expressions}). A breakpoint with
a condition evaluates the expression each time your program reaches it,
and your program stops only if the condition is @emph{true}.
This is the converse of using assertions for program validation; in that
situation, you want to stop when the assertion is violated---that is,
when the condition is false. In C, if you want to test an assertion expressed
by the condition @var{assert}, you should set the condition
@samp{! @var{assert}} on the appropriate breakpoint.
Conditions are also accepted for watchpoints; you may not need them,
since a watchpoint is inspecting the value of an expression anyhow---but
it might be simpler, say, to just set a watchpoint on a variable name,
and specify a condition that tests whether the new value is an interesting
one.
Break conditions can have side effects, and may even call functions in
your program. This can be useful, for example, to activate functions
that log program progress, or to use your own print functions to
format special data structures. The effects are completely predictable
unless there is another enabled breakpoint at the same address. (In
that case, @value{GDBN} might see the other breakpoint first and stop your
program without checking the condition of this one.) Note that
breakpoint commands are usually more convenient and flexible than break
conditions for the
purpose of performing side effects when a breakpoint is reached
(@pxref{Break Commands, ,Breakpoint command lists}).
Break conditions can be specified when a breakpoint is set, by using
@samp{if} in the arguments to the @code{break} command. @xref{Set
Breaks, ,Setting breakpoints}. They can also be changed at any time
with the @code{condition} command.
You can also use the @code{if} keyword with the @code{watch} command.
The @code{catch} command does not recognize the @code{if} keyword;
@code{condition} is the only way to impose a further condition on a
catchpoint.
@table @code
@kindex condition
@item condition @var{bnum} @var{expression}
Specify @var{expression} as the break condition for breakpoint,
watchpoint, or catchpoint number @var{bnum}. After you set a condition,
breakpoint @var{bnum} stops your program only if the value of
@var{expression} is true (nonzero, in C). When you use
@code{condition}, @value{GDBN} checks @var{expression} immediately for
syntactic correctness, and to determine whether symbols in it have
referents in the context of your breakpoint. If @var{expression} uses
symbols not referenced in the context of the breakpoint, @value{GDBN}
prints an error message:
@smallexample
No symbol "foo" in current context.
@end smallexample
@noindent
@value{GDBN} does
not actually evaluate @var{expression} at the time the @code{condition}
command (or a command that sets a breakpoint with a condition, like
@code{break if @dots{}}) is given, however. @xref{Expressions, ,Expressions}.
@item condition @var{bnum}
Remove the condition from breakpoint number @var{bnum}. It becomes
an ordinary unconditional breakpoint.
@end table
@cindex ignore count (of breakpoint)
A special case of a breakpoint condition is to stop only when the
breakpoint has been reached a certain number of times. This is so
useful that there is a special way to do it, using the @dfn{ignore
count} of the breakpoint. Every breakpoint has an ignore count, which
is an integer. Most of the time, the ignore count is zero, and
therefore has no effect. But if your program reaches a breakpoint whose
ignore count is positive, then instead of stopping, it just decrements
the ignore count by one and continues. As a result, if the ignore count
value is @var{n}, the breakpoint does not stop the next @var{n} times
your program reaches it.
@table @code
@kindex ignore
@item ignore @var{bnum} @var{count}
Set the ignore count of breakpoint number @var{bnum} to @var{count}.
The next @var{count} times the breakpoint is reached, your program's
execution does not stop; other than to decrement the ignore count, @value{GDBN}
takes no action.
To make the breakpoint stop the next time it is reached, specify
a count of zero.
When you use @code{continue} to resume execution of your program from a
breakpoint, you can specify an ignore count directly as an argument to
@code{continue}, rather than using @code{ignore}. @xref{Continuing and
Stepping,,Continuing and stepping}.
If a breakpoint has a positive ignore count and a condition, the
condition is not checked. Once the ignore count reaches zero,
@value{GDBN} resumes checking the condition.
You could achieve the effect of the ignore count with a condition such
as @w{@samp{$foo-- <= 0}} using a debugger convenience variable that
is decremented each time. @xref{Convenience Vars, ,Convenience
variables}.
@end table
Ignore counts apply to breakpoints, watchpoints, and catchpoints.
@node Break Commands
@subsection Breakpoint command lists
@cindex breakpoint commands
You can give any breakpoint (or watchpoint or catchpoint) a series of
commands to execute when your program stops due to that breakpoint. For
example, you might want to print the values of certain expressions, or
enable other breakpoints.
@table @code
@kindex commands
@kindex end
@item commands @r{[}@var{bnum}@r{]}
@itemx @dots{} @var{command-list} @dots{}
@itemx end
Specify a list of commands for breakpoint number @var{bnum}. The commands
themselves appear on the following lines. Type a line containing just
@code{end} to terminate the commands.
To remove all commands from a breakpoint, type @code{commands} and
follow it immediately with @code{end}; that is, give no commands.
With no @var{bnum} argument, @code{commands} refers to the last
breakpoint, watchpoint, or catchpoint set (not to the breakpoint most
recently encountered).
@end table
Pressing @key{RET} as a means of repeating the last @value{GDBN} command is
disabled within a @var{command-list}.
You can use breakpoint commands to start your program up again. Simply
use the @code{continue} command, or @code{step}, or any other command
that resumes execution.
Any other commands in the command list, after a command that resumes
execution, are ignored. This is because any time you resume execution
(even with a simple @code{next} or @code{step}), you may encounter
another breakpoint---which could have its own command list, leading to
ambiguities about which list to execute.
@kindex silent
If the first command you specify in a command list is @code{silent}, the
usual message about stopping at a breakpoint is not printed. This may
be desirable for breakpoints that are to print a specific message and
then continue. If none of the remaining commands print anything, you
see no sign that the breakpoint was reached. @code{silent} is
meaningful only at the beginning of a breakpoint command list.
The commands @code{echo}, @code{output}, and @code{printf} allow you to
print precisely controlled output, and are often useful in silent
breakpoints. @xref{Output, ,Commands for controlled output}.
For example, here is how you could use breakpoint commands to print the
value of @code{x} at entry to @code{foo} whenever @code{x} is positive.
@smallexample
break foo if x>0
commands
silent
printf "x is %d\n",x
cont
end
@end smallexample
One application for breakpoint commands is to compensate for one bug so
you can test for another. Put a breakpoint just after the erroneous line
of code, give it a condition to detect the case in which something
erroneous has been done, and give it commands to assign correct values
to any variables that need them. End with the @code{continue} command
so that your program does not stop, and start with the @code{silent}
command so that no output is produced. Here is an example:
@smallexample
break 403
commands
silent
set x = y + 4
cont
end
@end smallexample
@node Breakpoint Menus
@subsection Breakpoint menus
@cindex overloading
@cindex symbol overloading
Some programming languages (notably C@t{++}) permit a single function name
to be defined several times, for application in different contexts.
This is called @dfn{overloading}. When a function name is overloaded,
@samp{break @var{function}} is not enough to tell @value{GDBN} where you want
a breakpoint. If you realize this is a problem, you can use
something like @samp{break @var{function}(@var{types})} to specify which
particular version of the function you want. Otherwise, @value{GDBN} offers
you a menu of numbered choices for different possible breakpoints, and
waits for your selection with the prompt @samp{>}. The first two
options are always @samp{[0] cancel} and @samp{[1] all}. Typing @kbd{1}
sets a breakpoint at each definition of @var{function}, and typing
@kbd{0} aborts the @code{break} command without setting any new
breakpoints.
For example, the following session excerpt shows an attempt to set a
breakpoint at the overloaded symbol @code{String::after}.
We choose three particular definitions of that function name:
@c FIXME! This is likely to change to show arg type lists, at least
@smallexample
@group
(@value{GDBP}) b String::after
[0] cancel
[1] all
[2] file:String.cc; line number:867
[3] file:String.cc; line number:860
[4] file:String.cc; line number:875
[5] file:String.cc; line number:853
[6] file:String.cc; line number:846
[7] file:String.cc; line number:735
> 2 4 6
Breakpoint 1 at 0xb26c: file String.cc, line 867.
Breakpoint 2 at 0xb344: file String.cc, line 875.
Breakpoint 3 at 0xafcc: file String.cc, line 846.
Multiple breakpoints were set.
Use the "delete" command to delete unwanted
breakpoints.
(@value{GDBP})
@end group
@end smallexample
@c @ifclear BARETARGET
@node Error in Breakpoints
@subsection ``Cannot insert breakpoints''
@c
@c FIXME!! 14/6/95 Is there a real example of this? Let's use it.
@c
Under some operating systems, breakpoints cannot be used in a program if
any other process is running that program. In this situation,
attempting to run or continue a program with a breakpoint causes
@value{GDBN} to print an error message:
@smallexample
Cannot insert breakpoints.
The same program may be running in another process.
@end smallexample
When this happens, you have three ways to proceed:
@enumerate
@item
Remove or disable the breakpoints, then continue.
@item
Suspend @value{GDBN}, and copy the file containing your program to a new
name. Resume @value{GDBN} and use the @code{exec-file} command to specify
that @value{GDBN} should run your program under that name.
Then start your program again.
@item
Relink your program so that the text segment is nonsharable, using the
linker option @samp{-N}. The operating system limitation may not apply
to nonsharable executables.
@end enumerate
@c @end ifclear
A similar message can be printed if you request too many active
hardware-assisted breakpoints and watchpoints:
@c FIXME: the precise wording of this message may change; the relevant
@c source change is not committed yet (Sep 3, 1999).
@smallexample
Stopped; cannot insert breakpoints.
You may have requested too many hardware breakpoints and watchpoints.
@end smallexample
@noindent
This message is printed when you attempt to resume the program, since
only then @value{GDBN} knows exactly how many hardware breakpoints and
watchpoints it needs to insert.
When this message is printed, you need to disable or remove some of the
hardware-assisted breakpoints and watchpoints, and then continue.
@node Continuing and Stepping
@section Continuing and stepping
@cindex stepping
@cindex continuing
@cindex resuming execution
@dfn{Continuing} means resuming program execution until your program
completes normally. In contrast, @dfn{stepping} means executing just
one more ``step'' of your program, where ``step'' may mean either one
line of source code, or one machine instruction (depending on what
particular command you use). Either when continuing or when stepping,
your program may stop even sooner, due to a breakpoint or a signal. (If
it stops due to a signal, you may want to use @code{handle}, or use
@samp{signal 0} to resume execution. @xref{Signals, ,Signals}.)
@table @code
@kindex continue
@kindex c @r{(@code{continue})}
@kindex fg @r{(resume foreground execution)}
@item continue @r{[}@var{ignore-count}@r{]}
@itemx c @r{[}@var{ignore-count}@r{]}
@itemx fg @r{[}@var{ignore-count}@r{]}
Resume program execution, at the address where your program last stopped;
any breakpoints set at that address are bypassed. The optional argument
@var{ignore-count} allows you to specify a further number of times to
ignore a breakpoint at this location; its effect is like that of
@code{ignore} (@pxref{Conditions, ,Break conditions}).
The argument @var{ignore-count} is meaningful only when your program
stopped due to a breakpoint. At other times, the argument to
@code{continue} is ignored.
The synonyms @code{c} and @code{fg} (for @dfn{foreground}, as the
debugged program is deemed to be the foreground program) are provided
purely for convenience, and have exactly the same behavior as
@code{continue}.
@end table
To resume execution at a different place, you can use @code{return}
(@pxref{Returning, ,Returning from a function}) to go back to the
calling function; or @code{jump} (@pxref{Jumping, ,Continuing at a
different address}) to go to an arbitrary location in your program.
A typical technique for using stepping is to set a breakpoint
(@pxref{Breakpoints, ,Breakpoints; watchpoints; and catchpoints}) at the
beginning of the function or the section of your program where a problem
is believed to lie, run your program until it stops at that breakpoint,
and then step through the suspect area, examining the variables that are
interesting, until you see the problem happen.
@table @code
@kindex step
@kindex s @r{(@code{step})}
@item step
Continue running your program until control reaches a different source
line, then stop it and return control to @value{GDBN}. This command is
abbreviated @code{s}.
@quotation
@c "without debugging information" is imprecise; actually "without line
@c numbers in the debugging information". (gcc -g1 has debugging info but
@c not line numbers). But it seems complex to try to make that
@c distinction here.
@emph{Warning:} If you use the @code{step} command while control is
within a function that was compiled without debugging information,
execution proceeds until control reaches a function that does have
debugging information. Likewise, it will not step into a function which
is compiled without debugging information. To step through functions
without debugging information, use the @code{stepi} command, described
below.
@end quotation
The @code{step} command only stops at the first instruction of a source
line. This prevents the multiple stops that could otherwise occur in
@code{switch} statements, @code{for} loops, etc. @code{step} continues
to stop if a function that has debugging information is called within
the line. In other words, @code{step} @emph{steps inside} any functions
called within the line.
Also, the @code{step} command only enters a function if there is line
number information for the function. Otherwise it acts like the
@code{next} command. This avoids problems when using @code{cc -gl}
on MIPS machines. Previously, @code{step} entered subroutines if there
was any debugging information about the routine.
@item step @var{count}
Continue running as in @code{step}, but do so @var{count} times. If a
breakpoint is reached, or a signal not related to stepping occurs before
@var{count} steps, stepping stops right away.
@kindex next
@kindex n @r{(@code{next})}
@item next @r{[}@var{count}@r{]}
Continue to the next source line in the current (innermost) stack frame.
This is similar to @code{step}, but function calls that appear within
the line of code are executed without stopping. Execution stops when
control reaches a different line of code at the original stack level
that was executing when you gave the @code{next} command. This command
is abbreviated @code{n}.
An argument @var{count} is a repeat count, as for @code{step}.
@c FIX ME!! Do we delete this, or is there a way it fits in with
@c the following paragraph? --- Vctoria
@c
@c @code{next} within a function that lacks debugging information acts like
@c @code{step}, but any function calls appearing within the code of the
@c function are executed without stopping.
The @code{next} command only stops at the first instruction of a
source line. This prevents multiple stops that could otherwise occur in
@code{switch} statements, @code{for} loops, etc.
@kindex set step-mode
@item set step-mode
@cindex functions without line info, and stepping
@cindex stepping into functions with no line info
@itemx set step-mode on
The @code{set step-mode on} command causes the @code{step} command to
stop at the first instruction of a function which contains no debug line
information rather than stepping over it.
This is useful in cases where you may be interested in inspecting the
machine instructions of a function which has no symbolic info and do not
want @value{GDBN} to automatically skip over this function.
@item set step-mode off
Causes the @code{step} command to step over any functions which contains no
debug information. This is the default.
@kindex finish
@item finish
Continue running until just after function in the selected stack frame
returns. Print the returned value (if any).
Contrast this with the @code{return} command (@pxref{Returning,
,Returning from a function}).
@kindex until
@kindex u @r{(@code{until})}
@item until
@itemx u
Continue running until a source line past the current line, in the
current stack frame, is reached. This command is used to avoid single
stepping through a loop more than once. It is like the @code{next}
command, except that when @code{until} encounters a jump, it
automatically continues execution until the program counter is greater
than the address of the jump.
This means that when you reach the end of a loop after single stepping
though it, @code{until} makes your program continue execution until it
exits the loop. In contrast, a @code{next} command at the end of a loop
simply steps back to the beginning of the loop, which forces you to step
through the next iteration.
@code{until} always stops your program if it attempts to exit the current
stack frame.
@code{until} may produce somewhat counterintuitive results if the order
of machine code does not match the order of the source lines. For
example, in the following excerpt from a debugging session, the @code{f}
(@code{frame}) command shows that execution is stopped at line
@code{206}; yet when we use @code{until}, we get to line @code{195}:
@smallexample
(@value{GDBP}) f
#0 main (argc=4, argv=0xf7fffae8) at m4.c:206
206 expand_input();
(@value{GDBP}) until
195 for ( ; argc > 0; NEXTARG) @{
@end smallexample
This happened because, for execution efficiency, the compiler had
generated code for the loop closure test at the end, rather than the
start, of the loop---even though the test in a C @code{for}-loop is
written before the body of the loop. The @code{until} command appeared
to step back to the beginning of the loop when it advanced to this
expression; however, it has not really gone to an earlier
statement---not in terms of the actual machine code.
@code{until} with no argument works by means of single
instruction stepping, and hence is slower than @code{until} with an
argument.
@item until @var{location}
@itemx u @var{location}
Continue running your program until either the specified location is
reached, or the current stack frame returns. @var{location} is any of
the forms of argument acceptable to @code{break} (@pxref{Set Breaks,
,Setting breakpoints}). This form of the command uses breakpoints,
and hence is quicker than @code{until} without an argument.
@kindex stepi
@kindex si @r{(@code{stepi})}
@item stepi
@itemx stepi @var{arg}
@itemx si
Execute one machine instruction, then stop and return to the debugger.
It is often useful to do @samp{display/i $pc} when stepping by machine
instructions. This makes @value{GDBN} automatically display the next
instruction to be executed, each time your program stops. @xref{Auto
Display,, Automatic display}.
An argument is a repeat count, as in @code{step}.
@need 750
@kindex nexti
@kindex ni @r{(@code{nexti})}
@item nexti
@itemx nexti @var{arg}
@itemx ni
Execute one machine instruction, but if it is a function call,
proceed until the function returns.
An argument is a repeat count, as in @code{next}.
@end table
@node Signals
@section Signals
@cindex signals
A signal is an asynchronous event that can happen in a program. The
operating system defines the possible kinds of signals, and gives each
kind a name and a number. For example, in Unix @code{SIGINT} is the
signal a program gets when you type an interrupt character (often @kbd{C-c});
@code{SIGSEGV} is the signal a program gets from referencing a place in
memory far away from all the areas in use; @code{SIGALRM} occurs when
the alarm clock timer goes off (which happens only if your program has
requested an alarm).
@cindex fatal signals
Some signals, including @code{SIGALRM}, are a normal part of the
functioning of your program. Others, such as @code{SIGSEGV}, indicate
errors; these signals are @dfn{fatal} (they kill your program immediately) if the
program has not specified in advance some other way to handle the signal.
@code{SIGINT} does not indicate an error in your program, but it is normally
fatal so it can carry out the purpose of the interrupt: to kill the program.
@value{GDBN} has the ability to detect any occurrence of a signal in your
program. You can tell @value{GDBN} in advance what to do for each kind of
signal.
@cindex handling signals
Normally, @value{GDBN} is set up to let the non-erroneous signals like
@code{SIGALRM} be silently passed to your program
(so as not to interfere with their role in the program's functioning)
but to stop your program immediately whenever an error signal happens.
You can change these settings with the @code{handle} command.
@table @code
@kindex info signals
@item info signals
@itemx info handle
Print a table of all the kinds of signals and how @value{GDBN} has been told to
handle each one. You can use this to see the signal numbers of all
the defined types of signals.
@code{info handle} is an alias for @code{info signals}.
@kindex handle
@item handle @var{signal} @var{keywords}@dots{}
Change the way @value{GDBN} handles signal @var{signal}. @var{signal}
can be the number of a signal or its name (with or without the
@samp{SIG} at the beginning); a list of signal numbers of the form
@samp{@var{low}-@var{high}}; or the word @samp{all}, meaning all the
known signals. The @var{keywords} say what change to make.
@end table
@c @group
The keywords allowed by the @code{handle} command can be abbreviated.
Their full names are:
@table @code
@item nostop
@value{GDBN} should not stop your program when this signal happens. It may
still print a message telling you that the signal has come in.
@item stop
@value{GDBN} should stop your program when this signal happens. This implies
the @code{print} keyword as well.
@item print
@value{GDBN} should print a message when this signal happens.
@item noprint
@value{GDBN} should not mention the occurrence of the signal at all. This
implies the @code{nostop} keyword as well.
@item pass
@itemx noignore
@value{GDBN} should allow your program to see this signal; your program
can handle the signal, or else it may terminate if the signal is fatal
and not handled. @code{pass} and @code{noignore} are synonyms.
@item nopass
@itemx ignore
@value{GDBN} should not allow your program to see this signal.
@code{nopass} and @code{ignore} are synonyms.
@end table
@c @end group
When a signal stops your program, the signal is not visible to the
program until you
continue. Your program sees the signal then, if @code{pass} is in
effect for the signal in question @emph{at that time}. In other words,
after @value{GDBN} reports a signal, you can use the @code{handle}
command with @code{pass} or @code{nopass} to control whether your
program sees that signal when you continue.
The default is set to @code{nostop}, @code{noprint}, @code{pass} for
non-erroneous signals such as @code{SIGALRM}, @code{SIGWINCH} and
@code{SIGCHLD}, and to @code{stop}, @code{print}, @code{pass} for the
erroneous signals.
You can also use the @code{signal} command to prevent your program from
seeing a signal, or cause it to see a signal it normally would not see,
or to give it any signal at any time. For example, if your program stopped
due to some sort of memory reference error, you might store correct
values into the erroneous variables and continue, hoping to see more
execution; but your program would probably terminate immediately as
a result of the fatal signal once it saw the signal. To prevent this,
you can continue with @samp{signal 0}. @xref{Signaling, ,Giving your
program a signal}.
@node Thread Stops
@section Stopping and starting multi-thread programs
When your program has multiple threads (@pxref{Threads,, Debugging
programs with multiple threads}), you can choose whether to set
breakpoints on all threads, or on a particular thread.
@table @code
@cindex breakpoints and threads
@cindex thread breakpoints
@kindex break @dots{} thread @var{threadno}
@item break @var{linespec} thread @var{threadno}
@itemx break @var{linespec} thread @var{threadno} if @dots{}
@var{linespec} specifies source lines; there are several ways of
writing them, but the effect is always to specify some source line.
Use the qualifier @samp{thread @var{threadno}} with a breakpoint command
to specify that you only want @value{GDBN} to stop the program when a
particular thread reaches this breakpoint. @var{threadno} is one of the
numeric thread identifiers assigned by @value{GDBN}, shown in the first
column of the @samp{info threads} display.
If you do not specify @samp{thread @var{threadno}} when you set a
breakpoint, the breakpoint applies to @emph{all} threads of your
program.
You can use the @code{thread} qualifier on conditional breakpoints as
well; in this case, place @samp{thread @var{threadno}} before the
breakpoint condition, like this:
@smallexample
(@value{GDBP}) break frik.c:13 thread 28 if bartab > lim
@end smallexample
@end table
@cindex stopped threads
@cindex threads, stopped
Whenever your program stops under @value{GDBN} for any reason,
@emph{all} threads of execution stop, not just the current thread. This
allows you to examine the overall state of the program, including
switching between threads, without worrying that things may change
underfoot.
@cindex continuing threads
@cindex threads, continuing
Conversely, whenever you restart the program, @emph{all} threads start
executing. @emph{This is true even when single-stepping} with commands
like @code{step} or @code{next}.
In particular, @value{GDBN} cannot single-step all threads in lockstep.
Since thread scheduling is up to your debugging target's operating
system (not controlled by @value{GDBN}), other threads may
execute more than one statement while the current thread completes a
single step. Moreover, in general other threads stop in the middle of a
statement, rather than at a clean statement boundary, when the program
stops.
You might even find your program stopped in another thread after
continuing or even single-stepping. This happens whenever some other
thread runs into a breakpoint, a signal, or an exception before the
first thread completes whatever you requested.
On some OSes, you can lock the OS scheduler and thus allow only a single
thread to run.
@table @code
@item set scheduler-locking @var{mode}
Set the scheduler locking mode. If it is @code{off}, then there is no
locking and any thread may run at any time. If @code{on}, then only the
current thread may run when the inferior is resumed. The @code{step}
mode optimizes for single-stepping. It stops other threads from
``seizing the prompt'' by preempting the current thread while you are
stepping. Other threads will only rarely (or never) get a chance to run
when you step. They are more likely to run when you @samp{next} over a
function call, and they are completely free to run when you use commands
like @samp{continue}, @samp{until}, or @samp{finish}. However, unless another
thread hits a breakpoint during its timeslice, they will never steal the
@value{GDBN} prompt away from the thread that you are debugging.
@item show scheduler-locking
Display the current scheduler locking mode.
@end table
@node Stack
@chapter Examining the Stack
When your program has stopped, the first thing you need to know is where it
stopped and how it got there.
@cindex call stack
Each time your program performs a function call, information about the call
is generated.
That information includes the location of the call in your program,
the arguments of the call,
and the local variables of the function being called.
The information is saved in a block of data called a @dfn{stack frame}.
The stack frames are allocated in a region of memory called the @dfn{call
stack}.
When your program stops, the @value{GDBN} commands for examining the
stack allow you to see all of this information.
@cindex selected frame
One of the stack frames is @dfn{selected} by @value{GDBN} and many
@value{GDBN} commands refer implicitly to the selected frame. In
particular, whenever you ask @value{GDBN} for the value of a variable in
your program, the value is found in the selected frame. There are
special @value{GDBN} commands to select whichever frame you are
interested in. @xref{Selection, ,Selecting a frame}.
When your program stops, @value{GDBN} automatically selects the
currently executing frame and describes it briefly, similar to the
@code{frame} command (@pxref{Frame Info, ,Information about a frame}).
@menu
* Frames:: Stack frames
* Backtrace:: Backtraces
* Selection:: Selecting a frame
* Frame Info:: Information on a frame
@end menu
@node Frames
@section Stack frames
@cindex frame, definition
@cindex stack frame
The call stack is divided up into contiguous pieces called @dfn{stack
frames}, or @dfn{frames} for short; each frame is the data associated
with one call to one function. The frame contains the arguments given
to the function, the function's local variables, and the address at
which the function is executing.
@cindex initial frame
@cindex outermost frame
@cindex innermost frame
When your program is started, the stack has only one frame, that of the
function @code{main}. This is called the @dfn{initial} frame or the
@dfn{outermost} frame. Each time a function is called, a new frame is
made. Each time a function returns, the frame for that function invocation
is eliminated. If a function is recursive, there can be many frames for
the same function. The frame for the function in which execution is
actually occurring is called the @dfn{innermost} frame. This is the most
recently created of all the stack frames that still exist.
@cindex frame pointer
Inside your program, stack frames are identified by their addresses. A
stack frame consists of many bytes, each of which has its own address; each
kind of computer has a convention for choosing one byte whose
address serves as the address of the frame. Usually this address is kept
in a register called the @dfn{frame pointer register} while execution is
going on in that frame.
@cindex frame number
@value{GDBN} assigns numbers to all existing stack frames, starting with
zero for the innermost frame, one for the frame that called it,
and so on upward. These numbers do not really exist in your program;
they are assigned by @value{GDBN} to give you a way of designating stack
frames in @value{GDBN} commands.
@c The -fomit-frame-pointer below perennially causes hbox overflow
@c underflow problems.
@cindex frameless execution
Some compilers provide a way to compile functions so that they operate
without stack frames. (For example, the @value{GCC} option
@smallexample
@samp{-fomit-frame-pointer}
@end smallexample
generates functions without a frame.)
This is occasionally done with heavily used library functions to save
the frame setup time. @value{GDBN} has limited facilities for dealing
with these function invocations. If the innermost function invocation
has no stack frame, @value{GDBN} nevertheless regards it as though
it had a separate frame, which is numbered zero as usual, allowing
correct tracing of the function call chain. However, @value{GDBN} has
no provision for frameless functions elsewhere in the stack.
@table @code
@kindex frame@r{, command}
@cindex current stack frame
@item frame @var{args}
The @code{frame} command allows you to move from one stack frame to another,
and to print the stack frame you select. @var{args} may be either the
address of the frame or the stack frame number. Without an argument,
@code{frame} prints the current stack frame.
@kindex select-frame
@cindex selecting frame silently
@item select-frame
The @code{select-frame} command allows you to move from one stack frame
to another without printing the frame. This is the silent version of
@code{frame}.
@end table
@node Backtrace
@section Backtraces
@cindex backtraces
@cindex tracebacks
@cindex stack traces
A backtrace is a summary of how your program got where it is. It shows one
line per frame, for many frames, starting with the currently executing
frame (frame zero), followed by its caller (frame one), and on up the
stack.
@table @code
@kindex backtrace
@kindex bt @r{(@code{backtrace})}
@item backtrace
@itemx bt
Print a backtrace of the entire stack: one line per frame for all
frames in the stack.
You can stop the backtrace at any time by typing the system interrupt
character, normally @kbd{C-c}.
@item backtrace @var{n}
@itemx bt @var{n}
Similar, but print only the innermost @var{n} frames.
@item backtrace -@var{n}
@itemx bt -@var{n}
Similar, but print only the outermost @var{n} frames.
@end table
@kindex where
@kindex info stack
@kindex info s @r{(@code{info stack})}
The names @code{where} and @code{info stack} (abbreviated @code{info s})
are additional aliases for @code{backtrace}.
Each line in the backtrace shows the frame number and the function name.
The program counter value is also shown---unless you use @code{set
print address off}. The backtrace also shows the source file name and
line number, as well as the arguments to the function. The program
counter value is omitted if it is at the beginning of the code for that
line number.
Here is an example of a backtrace. It was made with the command
@samp{bt 3}, so it shows the innermost three frames.
@smallexample
@group
#0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
at builtin.c:993
#1 0x6e38 in expand_macro (sym=0x2b600) at macro.c:242
#2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
at macro.c:71
(More stack frames follow...)
@end group
@end smallexample
@noindent
The display for frame zero does not begin with a program counter
value, indicating that your program has stopped at the beginning of the
code for line @code{993} of @code{builtin.c}.
@node Selection
@section Selecting a frame
Most commands for examining the stack and other data in your program work on
whichever stack frame is selected at the moment. Here are the commands for
selecting a stack frame; all of them finish by printing a brief description
of the stack frame just selected.
@table @code
@kindex frame@r{, selecting}
@kindex f @r{(@code{frame})}
@item frame @var{n}
@itemx f @var{n}
Select frame number @var{n}. Recall that frame zero is the innermost
(currently executing) frame, frame one is the frame that called the
innermost one, and so on. The highest-numbered frame is the one for
@code{main}.
@item frame @var{addr}
@itemx f @var{addr}
Select the frame at address @var{addr}. This is useful mainly if the
chaining of stack frames has been damaged by a bug, making it
impossible for @value{GDBN} to assign numbers properly to all frames. In
addition, this can be useful when your program has multiple stacks and
switches between them.
On the SPARC architecture, @code{frame} needs two addresses to
select an arbitrary frame: a frame pointer and a stack pointer.
On the MIPS and Alpha architecture, it needs two addresses: a stack
pointer and a program counter.
On the 29k architecture, it needs three addresses: a register stack
pointer, a program counter, and a memory stack pointer.
@c note to future updaters: this is conditioned on a flag
@c SETUP_ARBITRARY_FRAME in the tm-*.h files. The above is up to date
@c as of 27 Jan 1994.
@kindex up
@item up @var{n}
Move @var{n} frames up the stack. For positive numbers @var{n}, this
advances toward the outermost frame, to higher frame numbers, to frames
that have existed longer. @var{n} defaults to one.
@kindex down
@kindex do @r{(@code{down})}
@item down @var{n}
Move @var{n} frames down the stack. For positive numbers @var{n}, this
advances toward the innermost frame, to lower frame numbers, to frames
that were created more recently. @var{n} defaults to one. You may
abbreviate @code{down} as @code{do}.
@end table
All of these commands end by printing two lines of output describing the
frame. The first line shows the frame number, the function name, the
arguments, and the source file and line number of execution in that
frame. The second line shows the text of that source line.
@need 1000
For example:
@smallexample
@group
(@value{GDBP}) up
#1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
at env.c:10
10 read_input_file (argv[i]);
@end group
@end smallexample
After such a printout, the @code{list} command with no arguments
prints ten lines centered on the point of execution in the frame.
@xref{List, ,Printing source lines}.
@table @code
@kindex down-silently
@kindex up-silently
@item up-silently @var{n}
@itemx down-silently @var{n}
These two commands are variants of @code{up} and @code{down},
respectively; they differ in that they do their work silently, without
causing display of the new frame. They are intended primarily for use
in @value{GDBN} command scripts, where the output might be unnecessary and
distracting.
@end table
@node Frame Info
@section Information about a frame
There are several other commands to print information about the selected
stack frame.
@table @code
@item frame
@itemx f
When used without any argument, this command does not change which
frame is selected, but prints a brief description of the currently
selected stack frame. It can be abbreviated @code{f}. With an
argument, this command is used to select a stack frame.
@xref{Selection, ,Selecting a frame}.
@kindex info frame
@kindex info f @r{(@code{info frame})}
@item info frame
@itemx info f
This command prints a verbose description of the selected stack frame,
including:
@itemize @bullet
@item
the address of the frame
@item
the address of the next frame down (called by this frame)
@item
the address of the next frame up (caller of this frame)
@item
the language in which the source code corresponding to this frame is written
@item
the address of the frame's arguments
@item
the address of the frame's local variables
@item
the program counter saved in it (the address of execution in the caller frame)
@item
which registers were saved in the frame
@end itemize
@noindent The verbose description is useful when
something has gone wrong that has made the stack format fail to fit
the usual conventions.
@item info frame @var{addr}
@itemx info f @var{addr}
Print a verbose description of the frame at address @var{addr}, without
selecting that frame. The selected frame remains unchanged by this
command. This requires the same kind of address (more than one for some
architectures) that you specify in the @code{frame} command.
@xref{Selection, ,Selecting a frame}.
@kindex info args
@item info args
Print the arguments of the selected frame, each on a separate line.
@item info locals
@kindex info locals
Print the local variables of the selected frame, each on a separate
line. These are all variables (declared either static or automatic)
accessible at the point of execution of the selected frame.
@kindex info catch
@cindex catch exceptions, list active handlers
@cindex exception handlers, how to list
@item info catch
Print a list of all the exception handlers that are active in the
current stack frame at the current point of execution. To see other
exception handlers, visit the associated frame (using the @code{up},
@code{down}, or @code{frame} commands); then type @code{info catch}.
@xref{Set Catchpoints, , Setting catchpoints}.
@end table
@node Source
@chapter Examining Source Files
@value{GDBN} can print parts of your program's source, since the debugging
information recorded in the program tells @value{GDBN} what source files were
used to build it. When your program stops, @value{GDBN} spontaneously prints
the line where it stopped. Likewise, when you select a stack frame
(@pxref{Selection, ,Selecting a frame}), @value{GDBN} prints the line where
execution in that frame has stopped. You can print other portions of
source files by explicit command.
If you use @value{GDBN} through its @sc{gnu} Emacs interface, you may
prefer to use Emacs facilities to view source; see @ref{Emacs, ,Using
@value{GDBN} under @sc{gnu} Emacs}.
@menu
* List:: Printing source lines
* Search:: Searching source files
* Source Path:: Specifying source directories
* Machine Code:: Source and machine code
@end menu
@node List
@section Printing source lines
@kindex list
@kindex l @r{(@code{list})}
To print lines from a source file, use the @code{list} command
(abbreviated @code{l}). By default, ten lines are printed.
There are several ways to specify what part of the file you want to print.
Here are the forms of the @code{list} command most commonly used:
@table @code
@item list @var{linenum}
Print lines centered around line number @var{linenum} in the
current source file.
@item list @var{function}
Print lines centered around the beginning of function
@var{function}.
@item list
Print more lines. If the last lines printed were printed with a
@code{list} command, this prints lines following the last lines
printed; however, if the last line printed was a solitary line printed
as part of displaying a stack frame (@pxref{Stack, ,Examining the
Stack}), this prints lines centered around that line.
@item list -
Print lines just before the lines last printed.
@end table
By default, @value{GDBN} prints ten source lines with any of these forms of
the @code{list} command. You can change this using @code{set listsize}:
@table @code
@kindex set listsize
@item set listsize @var{count}
Make the @code{list} command display @var{count} source lines (unless
the @code{list} argument explicitly specifies some other number).
@kindex show listsize
@item show listsize
Display the number of lines that @code{list} prints.
@end table
Repeating a @code{list} command with @key{RET} discards the argument,
so it is equivalent to typing just @code{list}. This is more useful
than listing the same lines again. An exception is made for an
argument of @samp{-}; that argument is preserved in repetition so that
each repetition moves up in the source file.
@cindex linespec
In general, the @code{list} command expects you to supply zero, one or two
@dfn{linespecs}. Linespecs specify source lines; there are several ways
of writing them, but the effect is always to specify some source line.
Here is a complete description of the possible arguments for @code{list}:
@table @code
@item list @var{linespec}
Print lines centered around the line specified by @var{linespec}.
@item list @var{first},@var{last}
Print lines from @var{first} to @var{last}. Both arguments are
linespecs.
@item list ,@var{last}
Print lines ending with @var{last}.
@item list @var{first},
Print lines starting with @var{first}.
@item list +
Print lines just after the lines last printed.
@item list -
Print lines just before the lines last printed.
@item list
As described in the preceding table.
@end table
Here are the ways of specifying a single source line---all the
kinds of linespec.
@table @code
@item @var{number}
Specifies line @var{number} of the current source file.
When a @code{list} command has two linespecs, this refers to
the same source file as the first linespec.
@item +@var{offset}
Specifies the line @var{offset} lines after the last line printed.
When used as the second linespec in a @code{list} command that has
two, this specifies the line @var{offset} lines down from the
first linespec.
@item -@var{offset}
Specifies the line @var{offset} lines before the last line printed.
@item @var{filename}:@var{number}
Specifies line @var{number} in the source file @var{filename}.
@item @var{function}
Specifies the line that begins the body of the function @var{function}.
For example: in C, this is the line with the open brace.
@item @var{filename}:@var{function}
Specifies the line of the open-brace that begins the body of the
function @var{function} in the file @var{filename}. You only need the
file name with a function name to avoid ambiguity when there are
identically named functions in different source files.
@item *@var{address}
Specifies the line containing the program address @var{address}.
@var{address} may be any expression.
@end table
@node Search
@section Searching source files
@cindex searching
@kindex reverse-search
There are two commands for searching through the current source file for a
regular expression.
@table @code
@kindex search
@kindex forward-search
@item forward-search @var{regexp}
@itemx search @var{regexp}
The command @samp{forward-search @var{regexp}} checks each line,
starting with the one following the last line listed, for a match for
@var{regexp}. It lists the line that is found. You can use the
synonym @samp{search @var{regexp}} or abbreviate the command name as
@code{fo}.
@item reverse-search @var{regexp}
The command @samp{reverse-search @var{regexp}} checks each line, starting
with the one before the last line listed and going backward, for a match
for @var{regexp}. It lists the line that is found. You can abbreviate
this command as @code{rev}.
@end table
@node Source Path
@section Specifying source directories
@cindex source path
@cindex directories for source files
Executable programs sometimes do not record the directories of the source
files from which they were compiled, just the names. Even when they do,
the directories could be moved between the compilation and your debugging
session. @value{GDBN} has a list of directories to search for source files;
this is called the @dfn{source path}. Each time @value{GDBN} wants a source file,
it tries all the directories in the list, in the order they are present
in the list, until it finds a file with the desired name. Note that
the executable search path is @emph{not} used for this purpose. Neither is
the current working directory, unless it happens to be in the source
path.
If @value{GDBN} cannot find a source file in the source path, and the
object program records a directory, @value{GDBN} tries that directory
too. If the source path is empty, and there is no record of the
compilation directory, @value{GDBN} looks in the current directory as a
last resort.
Whenever you reset or rearrange the source path, @value{GDBN} clears out
any information it has cached about where source files are found and where
each line is in the file.
@kindex directory
@kindex dir
When you start @value{GDBN}, its source path includes only @samp{cdir}
and @samp{cwd}, in that order.
To add other directories, use the @code{directory} command.
@table @code
@item directory @var{dirname} @dots{}
@item dir @var{dirname} @dots{}
Add directory @var{dirname} to the front of the source path. Several
directory names may be given to this command, separated by @samp{:}
(@samp{;} on MS-DOS and MS-Windows, where @samp{:} usually appears as
part of absolute file names) or
whitespace. You may specify a directory that is already in the source
path; this moves it forward, so @value{GDBN} searches it sooner.
@kindex cdir
@kindex cwd
@vindex $cdir@r{, convenience variable}
@vindex $cwdr@r{, convenience variable}
@cindex compilation directory
@cindex current directory
@cindex working directory
@cindex directory, current
@cindex directory, compilation
You can use the string @samp{$cdir} to refer to the compilation
directory (if one is recorded), and @samp{$cwd} to refer to the current
working directory. @samp{$cwd} is not the same as @samp{.}---the former
tracks the current working directory as it changes during your @value{GDBN}
session, while the latter is immediately expanded to the current
directory at the time you add an entry to the source path.
@item directory
Reset the source path to empty again. This requires confirmation.
@c RET-repeat for @code{directory} is explicitly disabled, but since
@c repeating it would be a no-op we do not say that. (thanks to RMS)
@item show directories
@kindex show directories
Print the source path: show which directories it contains.
@end table
If your source path is cluttered with directories that are no longer of
interest, @value{GDBN} may sometimes cause confusion by finding the wrong
versions of source. You can correct the situation as follows:
@enumerate
@item
Use @code{directory} with no argument to reset the source path to empty.
@item
Use @code{directory} with suitable arguments to reinstall the
directories you want in the source path. You can add all the
directories in one command.
@end enumerate
@node Machine Code
@section Source and machine code
You can use the command @code{info line} to map source lines to program
addresses (and vice versa), and the command @code{disassemble} to display
a range of addresses as machine instructions. When run under @sc{gnu} Emacs
mode, the @code{info line} command causes the arrow to point to the
line specified. Also, @code{info line} prints addresses in symbolic form as
well as hex.
@table @code
@kindex info line
@item info line @var{linespec}
Print the starting and ending addresses of the compiled code for
source line @var{linespec}. You can specify source lines in any of
the ways understood by the @code{list} command (@pxref{List, ,Printing
source lines}).
@end table
For example, we can use @code{info line} to discover the location of
the object code for the first line of function
@code{m4_changequote}:
@c FIXME: I think this example should also show the addresses in
@c symbolic form, as they usually would be displayed.
@smallexample
(@value{GDBP}) info line m4_changequote
Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
@end smallexample
@noindent
We can also inquire (using @code{*@var{addr}} as the form for
@var{linespec}) what source line covers a particular address:
@smallexample
(@value{GDBP}) info line *0x63ff
Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
@end smallexample
@cindex @code{$_} and @code{info line}
@kindex x@r{(examine), and} info line
After @code{info line}, the default address for the @code{x} command
is changed to the starting address of the line, so that @samp{x/i} is
sufficient to begin examining the machine code (@pxref{Memory,
,Examining memory}). Also, this address is saved as the value of the
convenience variable @code{$_} (@pxref{Convenience Vars, ,Convenience
variables}).
@table @code
@kindex disassemble
@cindex assembly instructions
@cindex instructions, assembly
@cindex machine instructions
@cindex listing machine instructions
@item disassemble
This specialized command dumps a range of memory as machine
instructions. The default memory range is the function surrounding the
program counter of the selected frame. A single argument to this
command is a program counter value; @value{GDBN} dumps the function
surrounding this value. Two arguments specify a range of addresses
(first inclusive, second exclusive) to dump.
@end table
The following example shows the disassembly of a range of addresses of
HP PA-RISC 2.0 code:
@smallexample
(@value{GDBP}) disas 0x32c4 0x32e4
Dump of assembler code from 0x32c4 to 0x32e4:
0x32c4 <main+204>: addil 0,dp
0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
0x32cc <main+212>: ldil 0x3000,r31
0x32d0 <main+216>: ble 0x3f8(sr4,r31)
0x32d4 <main+220>: ldo 0(r31),rp
0x32d8 <main+224>: addil -0x800,dp
0x32dc <main+228>: ldo 0x588(r1),r26
0x32e0 <main+232>: ldil 0x3000,r31
End of assembler dump.
@end smallexample
Some architectures have more than one commonly-used set of instruction
mnemonics or other syntax.
@table @code
@kindex set disassembly-flavor
@cindex assembly instructions
@cindex instructions, assembly
@cindex machine instructions
@cindex listing machine instructions
@cindex Intel disassembly flavor
@cindex AT&T disassembly flavor
@item set disassembly-flavor @var{instruction-set}
Select the instruction set to use when disassembling the
program via the @code{disassemble} or @code{x/i} commands.
Currently this command is only defined for the Intel x86 family. You
can set @var{instruction-set} to either @code{intel} or @code{att}.
The default is @code{att}, the AT&T flavor used by default by Unix
assemblers for x86-based targets.
@end table
@node Data
@chapter Examining Data
@cindex printing data
@cindex examining data
@kindex print
@kindex inspect
@c "inspect" is not quite a synonym if you are using Epoch, which we do not
@c document because it is nonstandard... Under Epoch it displays in a
@c different window or something like that.
The usual way to examine data in your program is with the @code{print}
command (abbreviated @code{p}), or its synonym @code{inspect}. It
evaluates and prints the value of an expression of the language your
program is written in (@pxref{Languages, ,Using @value{GDBN} with
Different Languages}).
@table @code
@item print @var{expr}
@itemx print /@var{f} @var{expr}
@var{expr} is an expression (in the source language). By default the
value of @var{expr} is printed in a format appropriate to its data type;
you can choose a different format by specifying @samp{/@var{f}}, where
@var{f} is a letter specifying the format; see @ref{Output Formats,,Output
formats}.
@item print
@itemx print /@var{f}
If you omit @var{expr}, @value{GDBN} displays the last value again (from the
@dfn{value history}; @pxref{Value History, ,Value history}). This allows you to
conveniently inspect the same value in an alternative format.
@end table
A more low-level way of examining data is with the @code{x} command.
It examines data in memory at a specified address and prints it in a
specified format. @xref{Memory, ,Examining memory}.
If you are interested in information about types, or about how the
fields of a struct or a class are declared, use the @code{ptype @var{exp}}
command rather than @code{print}. @xref{Symbols, ,Examining the Symbol
Table}.
@menu
* Expressions:: Expressions
* Variables:: Program variables
* Arrays:: Artificial arrays
* Output Formats:: Output formats
* Memory:: Examining memory
* Auto Display:: Automatic display
* Print Settings:: Print settings
* Value History:: Value history
* Convenience Vars:: Convenience variables
* Registers:: Registers
* Floating Point Hardware:: Floating point hardware
* Vector Unit:: Vector Unit
* Memory Region Attributes:: Memory region attributes
* Dump/Restore Files:: Copy between memory and a file
@end menu
@node Expressions
@section Expressions
@cindex expressions
@code{print} and many other @value{GDBN} commands accept an expression and
compute its value. Any kind of constant, variable or operator defined
by the programming language you are using is valid in an expression in
@value{GDBN}. This includes conditional expressions, function calls,
casts, and string constants. It also includes preprocessor macros, if
you compiled your program to include this information; see
@ref{Compilation}.
Beware that nested functions usually need a context to be setup before
being called. Unfortunately, GDB currently has no knowledge of this
setup, and hence can not perform the calls to nested functions in a
fully appropriate manner. As a consequence, the result of such a call is
likely to be erroneous, and even cause a crash of the program being
debugged.
@value{GDBN} supports array constants in expressions input by
the user. The syntax is @{@var{element}, @var{element}@dots{}@}. For example,
you can use the command @code{print @{1, 2, 3@}} to build up an array in
memory that is @code{malloc}ed in the target program.
Because C is so widespread, most of the expressions shown in examples in
this manual are in C. @xref{Languages, , Using @value{GDBN} with Different
Languages}, for information on how to use expressions in other
languages.
In this section, we discuss operators that you can use in @value{GDBN}
expressions regardless of your programming language.
Casts are supported in all languages, not just in C, because it is so
useful to cast a number into a pointer in order to examine a structure
at that address in memory.
@c FIXME: casts supported---Mod2 true?
@value{GDBN} supports these operators, in addition to those common
to programming languages:
@table @code
@item @@
@samp{@@} is a binary operator for treating parts of memory as arrays.
@xref{Arrays, ,Artificial arrays}, for more information.
@item ::
@samp{::} allows you to specify a variable in terms of the file or
function where it is defined. @xref{Variables, ,Program variables}.
@cindex @{@var{type}@}
@cindex type casting memory
@cindex memory, viewing as typed object
@cindex casts, to view memory
@item @{@var{type}@} @var{addr}
Refers to an object of type @var{type} stored at address @var{addr} in
memory. @var{addr} may be any expression whose value is an integer or
pointer (but parentheses are required around binary operators, just as in
a cast). This construct is allowed regardless of what kind of data is
normally supposed to reside at @var{addr}.
@end table
@node Variables
@section Program variables
The most common kind of expression to use is the name of a variable
in your program.
Variables in expressions are understood in the selected stack frame
(@pxref{Selection, ,Selecting a frame}); they must be either:
@itemize @bullet
@item
global (or file-static)
@end itemize
@noindent or
@itemize @bullet
@item
visible according to the scope rules of the
programming language from the point of execution in that frame
@end itemize
@noindent This means that in the function
@smallexample
foo (a)
int a;
@{
bar (a);
@{
int b = test ();
bar (b);
@}
@}
@end smallexample
@noindent
you can examine and use the variable @code{a} whenever your program is
executing within the function @code{foo}, but you can only use or
examine the variable @code{b} while your program is executing inside
the block where @code{b} is declared.
@cindex variable name conflict
There is an exception: you can refer to a variable or function whose
scope is a single source file even if the current execution point is not
in this file. But it is possible to have more than one such variable or
function with the same name (in different source files). If that
happens, referring to that name has unpredictable effects. If you wish,
you can specify a static variable in a particular function or file,
using the colon-colon notation:
@cindex colon-colon, context for variables/functions
@iftex
@c info cannot cope with a :: index entry, but why deprive hard copy readers?
@cindex @code{::}, context for variables/functions
@end iftex
@smallexample
@var{file}::@var{variable}
@var{function}::@var{variable}
@end smallexample
@noindent
Here @var{file} or @var{function} is the name of the context for the
static @var{variable}. In the case of file names, you can use quotes to
make sure @value{GDBN} parses the file name as a single word---for example,
to print a global value of @code{x} defined in @file{f2.c}:
@smallexample
(@value{GDBP}) p 'f2.c'::x
@end smallexample
@cindex C@t{++} scope resolution
This use of @samp{::} is very rarely in conflict with the very similar
use of the same notation in C@t{++}. @value{GDBN} also supports use of the C@t{++}
scope resolution operator in @value{GDBN} expressions.
@c FIXME: Um, so what happens in one of those rare cases where it's in
@c conflict?? --mew
@cindex wrong values
@cindex variable values, wrong
@quotation
@emph{Warning:} Occasionally, a local variable may appear to have the
wrong value at certain points in a function---just after entry to a new
scope, and just before exit.
@end quotation
You may see this problem when you are stepping by machine instructions.
This is because, on most machines, it takes more than one instruction to
set up a stack frame (including local variable definitions); if you are
stepping by machine instructions, variables may appear to have the wrong
values until the stack frame is completely built. On exit, it usually
also takes more than one machine instruction to destroy a stack frame;
after you begin stepping through that group of instructions, local
variable definitions may be gone.
This may also happen when the compiler does significant optimizations.
To be sure of always seeing accurate values, turn off all optimization
when compiling.
@cindex ``No symbol "foo" in current context''
Another possible effect of compiler optimizations is to optimize
unused variables out of existence, or assign variables to registers (as
opposed to memory addresses). Depending on the support for such cases
offered by the debug info format used by the compiler, @value{GDBN}
might not be able to display values for such local variables. If that
happens, @value{GDBN} will print a message like this:
@smallexample
No symbol "foo" in current context.
@end smallexample
To solve such problems, either recompile without optimizations, or use a
different debug info format, if the compiler supports several such
formats. For example, @value{NGCC}, the @sc{gnu} C/C@t{++} compiler usually
supports the @samp{-gstabs} option. @samp{-gstabs} produces debug info
in a format that is superior to formats such as COFF. You may be able
to use DWARF2 (@samp{-gdwarf-2}), which is also an effective form for
debug info. See @ref{Debugging Options,,Options for Debugging Your
Program or @sc{gnu} CC, gcc.info, Using @sc{gnu} CC}, for more
information.
@node Arrays
@section Artificial arrays
@cindex artificial array
@kindex @@@r{, referencing memory as an array}
It is often useful to print out several successive objects of the
same type in memory; a section of an array, or an array of
dynamically determined size for which only a pointer exists in the
program.
You can do this by referring to a contiguous span of memory as an
@dfn{artificial array}, using the binary operator @samp{@@}. The left
operand of @samp{@@} should be the first element of the desired array
and be an individual object. The right operand should be the desired length
of the array. The result is an array value whose elements are all of
the type of the left argument. The first element is actually the left
argument; the second element comes from bytes of memory immediately
following those that hold the first element, and so on. Here is an
example. If a program says
@smallexample
int *array = (int *) malloc (len * sizeof (int));
@end smallexample
@noindent
you can print the contents of @code{array} with
@smallexample
p *array@@len
@end smallexample
The left operand of @samp{@@} must reside in memory. Array values made
with @samp{@@} in this way behave just like other arrays in terms of
subscripting, and are coerced to pointers when used in expressions.
Artificial arrays most often appear in expressions via the value history
(@pxref{Value History, ,Value history}), after printing one out.
Another way to create an artificial array is to use a cast.
This re-interprets a value as if it were an array.
The value need not be in memory:
@smallexample
(@value{GDBP}) p/x (short[2])0x12345678
$1 = @{0x1234, 0x5678@}
@end smallexample
As a convenience, if you leave the array length out (as in
@samp{(@var{type}[])@var{value}}) @value{GDBN} calculates the size to fill
the value (as @samp{sizeof(@var{value})/sizeof(@var{type})}:
@smallexample
(@value{GDBP}) p/x (short[])0x12345678
$2 = @{0x1234, 0x5678@}
@end smallexample
Sometimes the artificial array mechanism is not quite enough; in
moderately complex data structures, the elements of interest may not
actually be adjacent---for example, if you are interested in the values
of pointers in an array. One useful work-around in this situation is
to use a convenience variable (@pxref{Convenience Vars, ,Convenience
variables}) as a counter in an expression that prints the first
interesting value, and then repeat that expression via @key{RET}. For
instance, suppose you have an array @code{dtab} of pointers to
structures, and you are interested in the values of a field @code{fv}
in each structure. Here is an example of what you might type:
@smallexample
set $i = 0
p dtab[$i++]->fv
@key{RET}
@key{RET}
@dots{}
@end smallexample
@node Output Formats
@section Output formats
@cindex formatted output
@cindex output formats
By default, @value{GDBN} prints a value according to its data type. Sometimes
this is not what you want. For example, you might want to print a number
in hex, or a pointer in decimal. Or you might want to view data in memory
at a certain address as a character string or as an instruction. To do
these things, specify an @dfn{output format} when you print a value.
The simplest use of output formats is to say how to print a value
already computed. This is done by starting the arguments of the
@code{print} command with a slash and a format letter. The format
letters supported are:
@table @code
@item x
Regard the bits of the value as an integer, and print the integer in
hexadecimal.
@item d
Print as integer in signed decimal.
@item u
Print as integer in unsigned decimal.
@item o
Print as integer in octal.
@item t
Print as integer in binary. The letter @samp{t} stands for ``two''.
@footnote{@samp{b} cannot be used because these format letters are also
used with the @code{x} command, where @samp{b} stands for ``byte'';
see @ref{Memory,,Examining memory}.}
@item a
@cindex unknown address, locating
@cindex locate address
Print as an address, both absolute in hexadecimal and as an offset from
the nearest preceding symbol. You can use this format used to discover
where (in what function) an unknown address is located:
@smallexample
(@value{GDBP}) p/a 0x54320
$3 = 0x54320 <_initialize_vx+396>
@end smallexample
@noindent
The command @code{info symbol 0x54320} yields similar results.
@xref{Symbols, info symbol}.
@item c
Regard as an integer and print it as a character constant.
@item f
Regard the bits of the value as a floating point number and print
using typical floating point syntax.
@end table
For example, to print the program counter in hex (@pxref{Registers}), type
@smallexample
p/x $pc
@end smallexample
@noindent
Note that no space is required before the slash; this is because command
names in @value{GDBN} cannot contain a slash.
To reprint the last value in the value history with a different format,
you can use the @code{print} command with just a format and no
expression. For example, @samp{p/x} reprints the last value in hex.
@node Memory
@section Examining memory
You can use the command @code{x} (for ``examine'') to examine memory in
any of several formats, independently of your program's data types.
@cindex examining memory
@table @code
@kindex x @r{(examine memory)}
@item x/@var{nfu} @var{addr}
@itemx x @var{addr}
@itemx x
Use the @code{x} command to examine memory.
@end table
@var{n}, @var{f}, and @var{u} are all optional parameters that specify how
much memory to display and how to format it; @var{addr} is an
expression giving the address where you want to start displaying memory.
If you use defaults for @var{nfu}, you need not type the slash @samp{/}.
Several commands set convenient defaults for @var{addr}.
@table @r
@item @var{n}, the repeat count
The repeat count is a decimal integer; the default is 1. It specifies
how much memory (counting by units @var{u}) to display.
@c This really is **decimal**; unaffected by 'set radix' as of GDB
@c 4.1.2.
@item @var{f}, the display format
The display format is one of the formats used by @code{print},
@samp{s} (null-terminated string), or @samp{i} (machine instruction).
The default is @samp{x} (hexadecimal) initially.
The default changes each time you use either @code{x} or @code{print}.
@item @var{u}, the unit size
The unit size is any of
@table @code
@item b
Bytes.
@item h
Halfwords (two bytes).
@item w
Words (four bytes). This is the initial default.
@item g
Giant words (eight bytes).
@end table
Each time you specify a unit size with @code{x}, that size becomes the
default unit the next time you use @code{x}. (For the @samp{s} and
@samp{i} formats, the unit size is ignored and is normally not written.)
@item @var{addr}, starting display address
@var{addr} is the address where you want @value{GDBN} to begin displaying
memory. The expression need not have a pointer value (though it may);
it is always interpreted as an integer address of a byte of memory.
@xref{Expressions, ,Expressions}, for more information on expressions. The default for
@var{addr} is usually just after the last address examined---but several
other commands also set the default address: @code{info breakpoints} (to
the address of the last breakpoint listed), @code{info line} (to the
starting address of a line), and @code{print} (if you use it to display
a value from memory).
@end table
For example, @samp{x/3uh 0x54320} is a request to display three halfwords
(@code{h}) of memory, formatted as unsigned decimal integers (@samp{u}),
starting at address @code{0x54320}. @samp{x/4xw $sp} prints the four
words (@samp{w}) of memory above the stack pointer (here, @samp{$sp};
@pxref{Registers, ,Registers}) in hexadecimal (@samp{x}).
Since the letters indicating unit sizes are all distinct from the
letters specifying output formats, you do not have to remember whether
unit size or format comes first; either order works. The output
specifications @samp{4xw} and @samp{4wx} mean exactly the same thing.
(However, the count @var{n} must come first; @samp{wx4} does not work.)
Even though the unit size @var{u} is ignored for the formats @samp{s}
and @samp{i}, you might still want to use a count @var{n}; for example,
@samp{3i} specifies that you want to see three machine instructions,
including any operands. The command @code{disassemble} gives an
alternative way of inspecting machine instructions; see @ref{Machine
Code,,Source and machine code}.
All the defaults for the arguments to @code{x} are designed to make it
easy to continue scanning memory with minimal specifications each time
you use @code{x}. For example, after you have inspected three machine
instructions with @samp{x/3i @var{addr}}, you can inspect the next seven
with just @samp{x/7}. If you use @key{RET} to repeat the @code{x} command,
the repeat count @var{n} is used again; the other arguments default as
for successive uses of @code{x}.
@cindex @code{$_}, @code{$__}, and value history
The addresses and contents printed by the @code{x} command are not saved
in the value history because there is often too much of them and they
would get in the way. Instead, @value{GDBN} makes these values available for
subsequent use in expressions as values of the convenience variables
@code{$_} and @code{$__}. After an @code{x} command, the last address
examined is available for use in expressions in the convenience variable
@code{$_}. The contents of that address, as examined, are available in
the convenience variable @code{$__}.
If the @code{x} command has a repeat count, the address and contents saved
are from the last memory unit printed; this is not the same as the last
address printed if several units were printed on the last line of output.
@node Auto Display
@section Automatic display
@cindex automatic display
@cindex display of expressions
If you find that you want to print the value of an expression frequently
(to see how it changes), you might want to add it to the @dfn{automatic
display list} so that @value{GDBN} prints its value each time your program stops.
Each expression added to the list is given a number to identify it;
to remove an expression from the list, you specify that number.
The automatic display looks like this:
@smallexample
2: foo = 38
3: bar[5] = (struct hack *) 0x3804
@end smallexample
@noindent
This display shows item numbers, expressions and their current values. As with
displays you request manually using @code{x} or @code{print}, you can
specify the output format you prefer; in fact, @code{display} decides
whether to use @code{print} or @code{x} depending on how elaborate your
format specification is---it uses @code{x} if you specify a unit size,
or one of the two formats (@samp{i} and @samp{s}) that are only
supported by @code{x}; otherwise it uses @code{print}.
@table @code
@kindex display
@item display @var{expr}
Add the expression @var{expr} to the list of expressions to display
each time your program stops. @xref{Expressions, ,Expressions}.
@code{display} does not repeat if you press @key{RET} again after using it.
@item display/@var{fmt} @var{expr}
For @var{fmt} specifying only a display format and not a size or
count, add the expression @var{expr} to the auto-display list but
arrange to display it each time in the specified format @var{fmt}.
@xref{Output Formats,,Output formats}.
@item display/@var{fmt} @var{addr}
For @var{fmt} @samp{i} or @samp{s}, or including a unit-size or a
number of units, add the expression @var{addr} as a memory address to
be examined each time your program stops. Examining means in effect
doing @samp{x/@var{fmt} @var{addr}}. @xref{Memory, ,Examining memory}.
@end table
For example, @samp{display/i $pc} can be helpful, to see the machine
instruction about to be executed each time execution stops (@samp{$pc}
is a common name for the program counter; @pxref{Registers, ,Registers}).
@table @code
@kindex delete display
@kindex undisplay
@item undisplay @var{dnums}@dots{}
@itemx delete display @var{dnums}@dots{}
Remove item numbers @var{dnums} from the list of expressions to display.
@code{undisplay} does not repeat if you press @key{RET} after using it.
(Otherwise you would just get the error @samp{No display number @dots{}}.)
@kindex disable display
@item disable display @var{dnums}@dots{}
Disable the display of item numbers @var{dnums}. A disabled display
item is not printed automatically, but is not forgotten. It may be
enabled again later.
@kindex enable display
@item enable display @var{dnums}@dots{}
Enable display of item numbers @var{dnums}. It becomes effective once
again in auto display of its expression, until you specify otherwise.
@item display
Display the current values of the expressions on the list, just as is
done when your program stops.
@kindex info display
@item info display
Print the list of expressions previously set up to display
automatically, each one with its item number, but without showing the
values. This includes disabled expressions, which are marked as such.
It also includes expressions which would not be displayed right now
because they refer to automatic variables not currently available.
@end table
If a display expression refers to local variables, then it does not make
sense outside the lexical context for which it was set up. Such an
expression is disabled when execution enters a context where one of its
variables is not defined. For example, if you give the command
@code{display last_char} while inside a function with an argument
@code{last_char}, @value{GDBN} displays this argument while your program
continues to stop inside that function. When it stops elsewhere---where
there is no variable @code{last_char}---the display is disabled
automatically. The next time your program stops where @code{last_char}
is meaningful, you can enable the display expression once again.
@node Print Settings
@section Print settings
@cindex format options
@cindex print settings
@value{GDBN} provides the following ways to control how arrays, structures,
and symbols are printed.
@noindent
These settings are useful for debugging programs in any language:
@table @code
@kindex set print address
@item set print address
@itemx set print address on
@value{GDBN} prints memory addresses showing the location of stack
traces, structure values, pointer values, breakpoints, and so forth,
even when it also displays the contents of those addresses. The default
is @code{on}. For example, this is what a stack frame display looks like with
@code{set print address on}:
@smallexample
@group
(@value{GDBP}) f
#0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
at input.c:530
530 if (lquote != def_lquote)
@end group
@end smallexample
@item set print address off
Do not print addresses when displaying their contents. For example,
this is the same stack frame displayed with @code{set print address off}:
@smallexample
@group
(@value{GDBP}) set print addr off
(@value{GDBP}) f
#0 set_quotes (lq="<<", rq=">>") at input.c:530
530 if (lquote != def_lquote)
@end group
@end smallexample
You can use @samp{set print address off} to eliminate all machine
dependent displays from the @value{GDBN} interface. For example, with
@code{print address off}, you should get the same text for backtraces on
all machines---whether or not they involve pointer arguments.
@kindex show print address
@item show print address
Show whether or not addresses are to be printed.
@end table
When @value{GDBN} prints a symbolic address, it normally prints the
closest earlier symbol plus an offset. If that symbol does not uniquely
identify the address (for example, it is a name whose scope is a single
source file), you may need to clarify. One way to do this is with
@code{info line}, for example @samp{info line *0x4537}. Alternately,
you can set @value{GDBN} to print the source file and line number when
it prints a symbolic address:
@table @code
@kindex set print symbol-filename
@item set print symbol-filename on
Tell @value{GDBN} to print the source file name and line number of a
symbol in the symbolic form of an address.
@item set print symbol-filename off
Do not print source file name and line number of a symbol. This is the
default.
@kindex show print symbol-filename
@item show print symbol-filename
Show whether or not @value{GDBN} will print the source file name and
line number of a symbol in the symbolic form of an address.
@end table
Another situation where it is helpful to show symbol filenames and line
numbers is when disassembling code; @value{GDBN} shows you the line
number and source file that corresponds to each instruction.
Also, you may wish to see the symbolic form only if the address being
printed is reasonably close to the closest earlier symbol:
@table @code
@kindex set print max-symbolic-offset
@item set print max-symbolic-offset @var{max-offset}
Tell @value{GDBN} to only display the symbolic form of an address if the
offset between the closest earlier symbol and the address is less than
@var{max-offset}. The default is 0, which tells @value{GDBN}
to always print the symbolic form of an address if any symbol precedes it.
@kindex show print max-symbolic-offset
@item show print max-symbolic-offset
Ask how large the maximum offset is that @value{GDBN} prints in a
symbolic address.
@end table
@cindex wild pointer, interpreting
@cindex pointer, finding referent
If you have a pointer and you are not sure where it points, try
@samp{set print symbol-filename on}. Then you can determine the name
and source file location of the variable where it points, using
@samp{p/a @var{pointer}}. This interprets the address in symbolic form.
For example, here @value{GDBN} shows that a variable @code{ptt} points
at another variable @code{t}, defined in @file{hi2.c}:
@smallexample
(@value{GDBP}) set print symbol-filename on
(@value{GDBP}) p/a ptt
$4 = 0xe008 <t in hi2.c>
@end smallexample
@quotation
@emph{Warning:} For pointers that point to a local variable, @samp{p/a}
does not show the symbol name and filename of the referent, even with
the appropriate @code{set print} options turned on.
@end quotation
Other settings control how different kinds of objects are printed:
@table @code
@kindex set print array
@item set print array
@itemx set print array on
Pretty print arrays. This format is more convenient to read,
but uses more space. The default is off.
@item set print array off
Return to compressed format for arrays.
@kindex show print array
@item show print array
Show whether compressed or pretty format is selected for displaying
arrays.
@kindex set print elements
@item set print elements @var{number-of-elements}
Set a limit on how many elements of an array @value{GDBN} will print.
If @value{GDBN} is printing a large array, it stops printing after it has
printed the number of elements set by the @code{set print elements} command.
This limit also applies to the display of strings.
When @value{GDBN} starts, this limit is set to 200.
Setting @var{number-of-elements} to zero means that the printing is unlimited.
@kindex show print elements
@item show print elements
Display the number of elements of a large array that @value{GDBN} will print.
If the number is 0, then the printing is unlimited.
@kindex set print null-stop
@item set print null-stop
Cause @value{GDBN} to stop printing the characters of an array when the first
@sc{null} is encountered. This is useful when large arrays actually
contain only short strings.
The default is off.
@kindex set print pretty
@item set print pretty on
Cause @value{GDBN} to print structures in an indented format with one member
per line, like this:
@smallexample
@group
$1 = @{
next = 0x0,
flags = @{
sweet = 1,
sour = 1
@},
meat = 0x54 "Pork"
@}
@end group
@end smallexample
@item set print pretty off
Cause @value{GDBN} to print structures in a compact format, like this:
@smallexample
@group
$1 = @{next = 0x0, flags = @{sweet = 1, sour = 1@}, \
meat = 0x54 "Pork"@}
@end group
@end smallexample
@noindent
This is the default format.
@kindex show print pretty
@item show print pretty
Show which format @value{GDBN} is using to print structures.
@kindex set print sevenbit-strings
@item set print sevenbit-strings on
Print using only seven-bit characters; if this option is set,
@value{GDBN} displays any eight-bit characters (in strings or
character values) using the notation @code{\}@var{nnn}. This setting is
best if you are working in English (@sc{ascii}) and you use the
high-order bit of characters as a marker or ``meta'' bit.
@item set print sevenbit-strings off
Print full eight-bit characters. This allows the use of more
international character sets, and is the default.
@kindex show print sevenbit-strings
@item show print sevenbit-strings
Show whether or not @value{GDBN} is printing only seven-bit characters.
@kindex set print union
@item set print union on
Tell @value{GDBN} to print unions which are contained in structures. This
is the default setting.
@item set print union off
Tell @value{GDBN} not to print unions which are contained in structures.
@kindex show print union
@item show print union
Ask @value{GDBN} whether or not it will print unions which are contained in
structures.
For example, given the declarations
@smallexample
typedef enum @{Tree, Bug@} Species;
typedef enum @{Big_tree, Acorn, Seedling@} Tree_forms;
typedef enum @{Caterpillar, Cocoon, Butterfly@}
Bug_forms;
struct thing @{
Species it;
union @{
Tree_forms tree;
Bug_forms bug;
@} form;
@};
struct thing foo = @{Tree, @{Acorn@}@};
@end smallexample
@noindent
with @code{set print union on} in effect @samp{p foo} would print
@smallexample
$1 = @{it = Tree, form = @{tree = Acorn, bug = Cocoon@}@}
@end smallexample
@noindent
and with @code{set print union off} in effect it would print
@smallexample
$1 = @{it = Tree, form = @{...@}@}
@end smallexample
@end table
@need 1000
@noindent
These settings are of interest when debugging C@t{++} programs:
@table @code
@cindex demangling
@kindex set print demangle
@item set print demangle
@itemx set print demangle on
Print C@t{++} names in their source form rather than in the encoded
(``mangled'') form passed to the assembler and linker for type-safe
linkage. The default is on.
@kindex show print demangle
@item show print demangle
Show whether C@t{++} names are printed in mangled or demangled form.
@kindex set print asm-demangle
@item set print asm-demangle
@itemx set print asm-demangle on
Print C@t{++} names in their source form rather than their mangled form, even
in assembler code printouts such as instruction disassemblies.
The default is off.
@kindex show print asm-demangle
@item show print asm-demangle
Show whether C@t{++} names in assembly listings are printed in mangled
or demangled form.
@kindex set demangle-style
@cindex C@t{++} symbol decoding style
@cindex symbol decoding style, C@t{++}
@item set demangle-style @var{style}
Choose among several encoding schemes used by different compilers to
represent C@t{++} names. The choices for @var{style} are currently:
@table @code
@item auto
Allow @value{GDBN} to choose a decoding style by inspecting your program.
@item gnu
Decode based on the @sc{gnu} C@t{++} compiler (@code{g++}) encoding algorithm.
This is the default.
@item hp
Decode based on the HP ANSI C@t{++} (@code{aCC}) encoding algorithm.
@item lucid
Decode based on the Lucid C@t{++} compiler (@code{lcc}) encoding algorithm.
@item arm
Decode using the algorithm in the @cite{C@t{++} Annotated Reference Manual}.
@strong{Warning:} this setting alone is not sufficient to allow
debugging @code{cfront}-generated executables. @value{GDBN} would
require further enhancement to permit that.
@end table
If you omit @var{style}, you will see a list of possible formats.
@kindex show demangle-style
@item show demangle-style
Display the encoding style currently in use for decoding C@t{++} symbols.
@kindex set print object
@item set print object
@itemx set print object on
When displaying a pointer to an object, identify the @emph{actual}
(derived) type of the object rather than the @emph{declared} type, using
the virtual function table.
@item set print object off
Display only the declared type of objects, without reference to the
virtual function table. This is the default setting.
@kindex show print object
@item show print object
Show whether actual, or declared, object types are displayed.
@kindex set print static-members
@item set print static-members
@itemx set print static-members on
Print static members when displaying a C@t{++} object. The default is on.
@item set print static-members off
Do not print static members when displaying a C@t{++} object.
@kindex show print static-members
@item show print static-members
Show whether C@t{++} static members are printed, or not.
@c These don't work with HP ANSI C++ yet.
@kindex set print vtbl
@item set print vtbl
@itemx set print vtbl on
Pretty print C@t{++} virtual function tables. The default is off.
(The @code{vtbl} commands do not work on programs compiled with the HP
ANSI C@t{++} compiler (@code{aCC}).)
@item set print vtbl off
Do not pretty print C@t{++} virtual function tables.
@kindex show print vtbl
@item show print vtbl
Show whether C@t{++} virtual function tables are pretty printed, or not.
@end table
@node Value History
@section Value history
@cindex value history
Values printed by the @code{print} command are saved in the @value{GDBN}
@dfn{value history}. This allows you to refer to them in other expressions.
Values are kept until the symbol table is re-read or discarded
(for example with the @code{file} or @code{symbol-file} commands).
When the symbol table changes, the value history is discarded,
since the values may contain pointers back to the types defined in the
symbol table.
@cindex @code{$}
@cindex @code{$$}
@cindex history number
The values printed are given @dfn{history numbers} by which you can
refer to them. These are successive integers starting with one.
@code{print} shows you the history number assigned to a value by
printing @samp{$@var{num} = } before the value; here @var{num} is the
history number.
To refer to any previous value, use @samp{$} followed by the value's
history number. The way @code{print} labels its output is designed to
remind you of this. Just @code{$} refers to the most recent value in
the history, and @code{$$} refers to the value before that.
@code{$$@var{n}} refers to the @var{n}th value from the end; @code{$$2}
is the value just prior to @code{$$}, @code{$$1} is equivalent to
@code{$$}, and @code{$$0} is equivalent to @code{$}.
For example, suppose you have just printed a pointer to a structure and
want to see the contents of the structure. It suffices to type
@smallexample
p *$
@end smallexample
If you have a chain of structures where the component @code{next} points
to the next one, you can print the contents of the next one with this:
@smallexample
p *$.next
@end smallexample
@noindent
You can print successive links in the chain by repeating this
command---which you can do by just typing @key{RET}.
Note that the history records values, not expressions. If the value of
@code{x} is 4 and you type these commands:
@smallexample
print x
set x=5
@end smallexample
@noindent
then the value recorded in the value history by the @code{print} command
remains 4 even though the value of @code{x} has changed.
@table @code
@kindex show values
@item show values
Print the last ten values in the value history, with their item numbers.
This is like @samp{p@ $$9} repeated ten times, except that @code{show
values} does not change the history.
@item show values @var{n}
Print ten history values centered on history item number @var{n}.
@item show values +
Print ten history values just after the values last printed. If no more
values are available, @code{show values +} produces no display.
@end table
Pressing @key{RET} to repeat @code{show values @var{n}} has exactly the
same effect as @samp{show values +}.
@node Convenience Vars
@section Convenience variables
@cindex convenience variables
@value{GDBN} provides @dfn{convenience variables} that you can use within
@value{GDBN} to hold on to a value and refer to it later. These variables
exist entirely within @value{GDBN}; they are not part of your program, and
setting a convenience variable has no direct effect on further execution
of your program. That is why you can use them freely.
Convenience variables are prefixed with @samp{$}. Any name preceded by
@samp{$} can be used for a convenience variable, unless it is one of
the predefined machine-specific register names (@pxref{Registers, ,Registers}).
(Value history references, in contrast, are @emph{numbers} preceded
by @samp{$}. @xref{Value History, ,Value history}.)
You can save a value in a convenience variable with an assignment
expression, just as you would set a variable in your program.
For example:
@smallexample
set $foo = *object_ptr
@end smallexample
@noindent
would save in @code{$foo} the value contained in the object pointed to by
@code{object_ptr}.
Using a convenience variable for the first time creates it, but its
value is @code{void} until you assign a new value. You can alter the
value with another assignment at any time.
Convenience variables have no fixed types. You can assign a convenience
variable any type of value, including structures and arrays, even if
that variable already has a value of a different type. The convenience
variable, when used as an expression, has the type of its current value.
@table @code
@kindex show convenience
@item show convenience
Print a list of convenience variables used so far, and their values.
Abbreviated @code{show conv}.
@end table
One of the ways to use a convenience variable is as a counter to be
incremented or a pointer to be advanced. For example, to print
a field from successive elements of an array of structures:
@smallexample
set $i = 0
print bar[$i++]->contents
@end smallexample
@noindent
Repeat that command by typing @key{RET}.
Some convenience variables are created automatically by @value{GDBN} and given
values likely to be useful.
@table @code
@vindex $_@r{, convenience variable}
@item $_
The variable @code{$_} is automatically set by the @code{x} command to
the last address examined (@pxref{Memory, ,Examining memory}). Other
commands which provide a default address for @code{x} to examine also
set @code{$_} to that address; these commands include @code{info line}
and @code{info breakpoint}. The type of @code{$_} is @code{void *}
except when set by the @code{x} command, in which case it is a pointer
to the type of @code{$__}.
@vindex $__@r{, convenience variable}
@item $__
The variable @code{$__} is automatically set by the @code{x} command
to the value found in the last address examined. Its type is chosen
to match the format in which the data was printed.
@item $_exitcode
@vindex $_exitcode@r{, convenience variable}
The variable @code{$_exitcode} is automatically set to the exit code when
the program being debugged terminates.
@end table
On HP-UX systems, if you refer to a function or variable name that
begins with a dollar sign, @value{GDBN} searches for a user or system
name first, before it searches for a convenience variable.
@node Registers
@section Registers
@cindex registers
You can refer to machine register contents, in expressions, as variables
with names starting with @samp{$}. The names of registers are different
for each machine; use @code{info registers} to see the names used on
your machine.
@table @code
@kindex info registers
@item info registers
Print the names and values of all registers except floating-point
registers (in the selected stack frame).
@kindex info all-registers
@cindex floating point registers
@item info all-registers
Print the names and values of all registers, including floating-point
registers.
@item info registers @var{regname} @dots{}
Print the @dfn{relativized} value of each specified register @var{regname}.
As discussed in detail below, register values are normally relative to
the selected stack frame. @var{regname} may be any register name valid on
the machine you are using, with or without the initial @samp{$}.
@end table
@value{GDBN} has four ``standard'' register names that are available (in
expressions) on most machines---whenever they do not conflict with an
architecture's canonical mnemonics for registers. The register names
@code{$pc} and @code{$sp} are used for the program counter register and
the stack pointer. @code{$fp} is used for a register that contains a
pointer to the current stack frame, and @code{$ps} is used for a
register that contains the processor status. For example,
you could print the program counter in hex with
@smallexample
p/x $pc
@end smallexample
@noindent
or print the instruction to be executed next with
@smallexample
x/i $pc
@end smallexample
@noindent
or add four to the stack pointer@footnote{This is a way of removing
one word from the stack, on machines where stacks grow downward in
memory (most machines, nowadays). This assumes that the innermost
stack frame is selected; setting @code{$sp} is not allowed when other
stack frames are selected. To pop entire frames off the stack,
regardless of machine architecture, use @code{return};
see @ref{Returning, ,Returning from a function}.} with
@smallexample
set $sp += 4
@end smallexample
Whenever possible, these four standard register names are available on
your machine even though the machine has different canonical mnemonics,
so long as there is no conflict. The @code{info registers} command
shows the canonical names. For example, on the SPARC, @code{info
registers} displays the processor status register as @code{$psr} but you
can also refer to it as @code{$ps}; and on x86-based machines @code{$ps}
is an alias for the @sc{eflags} register.
@value{GDBN} always considers the contents of an ordinary register as an
integer when the register is examined in this way. Some machines have
special registers which can hold nothing but floating point; these
registers are considered to have floating point values. There is no way
to refer to the contents of an ordinary register as floating point value
(although you can @emph{print} it as a floating point value with
@samp{print/f $@var{regname}}).
Some registers have distinct ``raw'' and ``virtual'' data formats. This
means that the data format in which the register contents are saved by
the operating system is not the same one that your program normally
sees. For example, the registers of the 68881 floating point
coprocessor are always saved in ``extended'' (raw) format, but all C
programs expect to work with ``double'' (virtual) format. In such
cases, @value{GDBN} normally works with the virtual format only (the format
that makes sense for your program), but the @code{info registers} command
prints the data in both formats.
Normally, register values are relative to the selected stack frame
(@pxref{Selection, ,Selecting a frame}). This means that you get the
value that the register would contain if all stack frames farther in
were exited and their saved registers restored. In order to see the
true contents of hardware registers, you must select the innermost
frame (with @samp{frame 0}).
However, @value{GDBN} must deduce where registers are saved, from the machine
code generated by your compiler. If some registers are not saved, or if
@value{GDBN} is unable to locate the saved registers, the selected stack
frame makes no difference.
@node Floating Point Hardware
@section Floating point hardware
@cindex floating point
Depending on the configuration, @value{GDBN} may be able to give
you more information about the status of the floating point hardware.
@table @code
@kindex info float
@item info float
Display hardware-dependent information about the floating
point unit. The exact contents and layout vary depending on the
floating point chip. Currently, @samp{info float} is supported on
the ARM and x86 machines.
@end table
@node Vector Unit
@section Vector Unit
@cindex vector unit
Depending on the configuration, @value{GDBN} may be able to give you
more information about the status of the vector unit.
@table @code
@kindex info vector
@item info vector
Display information about the vector unit. The exact contents and
layout vary depending on the hardware.
@end table
@node Memory Region Attributes
@section Memory region attributes
@cindex memory region attributes
@dfn{Memory region attributes} allow you to describe special handling
required by regions of your target's memory. @value{GDBN} uses attributes
to determine whether to allow certain types of memory accesses; whether to
use specific width accesses; and whether to cache target memory.
Defined memory regions can be individually enabled and disabled. When a
memory region is disabled, @value{GDBN} uses the default attributes when
accessing memory in that region. Similarly, if no memory regions have
been defined, @value{GDBN} uses the default attributes when accessing
all memory.
When a memory region is defined, it is given a number to identify it;
to enable, disable, or remove a memory region, you specify that number.
@table @code
@kindex mem
@item mem @var{lower} @var{upper} @var{attributes}@dots{}
Define memory region bounded by @var{lower} and @var{upper} with
attributes @var{attributes}@dots{}. Note that @var{upper} == 0 is a
special case: it is treated as the the target's maximum memory address.
(0xffff on 16 bit targets, 0xffffffff on 32 bit targets, etc.)
@kindex delete mem
@item delete mem @var{nums}@dots{}
Remove memory regions @var{nums}@dots{}.
@kindex disable mem
@item disable mem @var{nums}@dots{}
Disable memory regions @var{nums}@dots{}.
A disabled memory region is not forgotten.
It may be enabled again later.
@kindex enable mem
@item enable mem @var{nums}@dots{}
Enable memory regions @var{nums}@dots{}.
@kindex info mem
@item info mem
Print a table of all defined memory regions, with the following columns
for each region.
@table @emph
@item Memory Region Number
@item Enabled or Disabled.
Enabled memory regions are marked with @samp{y}.
Disabled memory regions are marked with @samp{n}.
@item Lo Address
The address defining the inclusive lower bound of the memory region.
@item Hi Address
The address defining the exclusive upper bound of the memory region.
@item Attributes
The list of attributes set for this memory region.
@end table
@end table
@subsection Attributes
@subsubsection Memory Access Mode
The access mode attributes set whether @value{GDBN} may make read or
write accesses to a memory region.
While these attributes prevent @value{GDBN} from performing invalid
memory accesses, they do nothing to prevent the target system, I/O DMA,
etc. from accessing memory.
@table @code
@item ro
Memory is read only.
@item wo
Memory is write only.
@item rw
Memory is read/write. This is the default.
@end table
@subsubsection Memory Access Size
The acccess size attributes tells @value{GDBN} to use specific sized
accesses in the memory region. Often memory mapped device registers
require specific sized accesses. If no access size attribute is
specified, @value{GDBN} may use accesses of any size.
@table @code
@item 8
Use 8 bit memory accesses.
@item 16
Use 16 bit memory accesses.
@item 32
Use 32 bit memory accesses.
@item 64
Use 64 bit memory accesses.
@end table
@c @subsubsection Hardware/Software Breakpoints
@c The hardware/software breakpoint attributes set whether @value{GDBN}
@c will use hardware or software breakpoints for the internal breakpoints
@c used by the step, next, finish, until, etc. commands.
@c
@c @table @code
@c @item hwbreak
@c Always use hardware breakpoints
@c @item swbreak (default)
@c @end table
@subsubsection Data Cache
The data cache attributes set whether @value{GDBN} will cache target
memory. While this generally improves performance by reducing debug
protocol overhead, it can lead to incorrect results because @value{GDBN}
does not know about volatile variables or memory mapped device
registers.
@table @code
@item cache
Enable @value{GDBN} to cache target memory.
@item nocache
Disable @value{GDBN} from caching target memory. This is the default.
@end table
@c @subsubsection Memory Write Verification
@c The memory write verification attributes set whether @value{GDBN}
@c will re-reads data after each write to verify the write was successful.
@c
@c @table @code
@c @item verify
@c @item noverify (default)
@c @end table
@node Dump/Restore Files
@section Copy between memory and a file
@cindex dump/restore files
@cindex append data to a file
@cindex dump data to a file
@cindex restore data from a file
@kindex dump
@kindex append
@kindex restore
The commands @code{dump}, @code{append}, and @code{restore} are used
for copying data between target memory and a file. Data is written
into a file using @code{dump} or @code{append}, and restored from a
file into memory by using @code{restore}. Files may be binary, srec,
intel hex, or tekhex (but only binary files can be appended).
@table @code
@kindex dump binary
@kindex append binary
@item dump binary memory @var{filename} @var{start_addr} @var{end_addr}
Dump contents of memory from @var{start_addr} to @var{end_addr} into
raw binary format file @var{filename}.
@item append binary memory @var{filename} @var{start_addr} @var{end_addr}
Append contents of memory from @var{start_addr} to @var{end_addr} to
raw binary format file @var{filename}.
@item dump binary value @var{filename} @var{expression}
Dump value of @var{expression} into raw binary format file @var{filename}.
@item append binary memory @var{filename} @var{expression}
Append value of @var{expression} to raw binary format file @var{filename}.
@kindex dump ihex
@item dump ihex memory @var{filename} @var{start_addr} @var{end_addr}
Dump contents of memory from @var{start_addr} to @var{end_addr} into
intel hex format file @var{filename}.
@item dump ihex value @var{filename} @var{expression}
Dump value of @var{expression} into intel hex format file @var{filename}.
@kindex dump srec
@item dump srec memory @var{filename} @var{start_addr} @var{end_addr}
Dump contents of memory from @var{start_addr} to @var{end_addr} into
srec format file @var{filename}.
@item dump srec value @var{filename} @var{expression}
Dump value of @var{expression} into srec format file @var{filename}.
@kindex dump tekhex
@item dump tekhex memory @var{filename} @var{start_addr} @var{end_addr}
Dump contents of memory from @var{start_addr} to @var{end_addr} into
tekhex format file @var{filename}.
@item dump tekhex value @var{filename} @var{expression}
Dump value of @var{expression} into tekhex format file @var{filename}.
@item restore @var{filename} [@var{binary}] @var{bias} @var{start} @var{end}
Restore the contents of file @var{filename} into memory. The @code{restore}
command can automatically recognize any known bfd file format, except for
raw binary. To restore a raw binary file you must use the optional argument
@var{binary} after the filename.
If @var{bias} is non-zero, its value will be added to the addresses
contained in the file. Binary files always start at address zero, so
they will be restored at address @var{bias}. Other bfd files have
a built-in location; they will be restored at offset @var{bias}
from that location.
If @var{start} and/or @var{end} are non-zero, then only data between
file offset @var{start} and file offset @var{end} will be restored.
These offsets are relative to the addresses in the file, before
the @var{bias} argument is applied.
@end table
@node Macros
@chapter C Preprocessor Macros
Some languages, such as C and C++, provide a way to define and invoke
``preprocessor macros'' which expand into strings of tokens.
@value{GDBN} can evaluate expressions containing macro invocations, show
the result of macro expansion, and show a macro's definition, including
where it was defined.
You may need to compile your program specially to provide @value{GDBN}
with information about preprocessor macros. Most compilers do not
include macros in their debugging information, even when you compile
with the @option{-g} flag. @xref{Compilation}.
A program may define a macro at one point, remove that definition later,
and then provide a different definition after that. Thus, at different
points in the program, a macro may have different definitions, or have
no definition at all. If there is a current stack frame, @value{GDBN}
uses the macros in scope at that frame's source code line. Otherwise,
@value{GDBN} uses the macros in scope at the current listing location;
see @ref{List}.
At the moment, @value{GDBN} does not support the @code{##}
token-splicing operator, the @code{#} stringification operator, or
variable-arity macros.
Whenever @value{GDBN} evaluates an expression, it always expands any
macro invocations present in the expression. @value{GDBN} also provides
the following commands for working with macros explicitly.
@table @code
@kindex macro expand
@cindex macro expansion, showing the results of preprocessor
@cindex preprocessor macro expansion, showing the results of
@cindex expanding preprocessor macros
@item macro expand @var{expression}
@itemx macro exp @var{expression}
Show the results of expanding all preprocessor macro invocations in
@var{expression}. Since @value{GDBN} simply expands macros, but does
not parse the result, @var{expression} need not be a valid expression;
it can be any string of tokens.
@kindex macro expand-once
@item macro expand-once @var{expression}
@itemx macro exp1 @var{expression}
@i{(This command is not yet implemented.)} Show the results of
expanding those preprocessor macro invocations that appear explicitly in
@var{expression}. Macro invocations appearing in that expansion are
left unchanged. This command allows you to see the effect of a
particular macro more clearly, without being confused by further
expansions. Since @value{GDBN} simply expands macros, but does not
parse the result, @var{expression} need not be a valid expression; it
can be any string of tokens.
@kindex info macro
@cindex macro definition, showing
@cindex definition, showing a macro's
@item info macro @var{macro}
Show the definition of the macro named @var{macro}, and describe the
source location where that definition was established.
@kindex macro define
@cindex user-defined macros
@cindex defining macros interactively
@cindex macros, user-defined
@item macro define @var{macro} @var{replacement-list}
@itemx macro define @var{macro}(@var{arglist}) @var{replacement-list}
@i{(This command is not yet implemented.)} Introduce a definition for a
preprocessor macro named @var{macro}, invocations of which are replaced
by the tokens given in @var{replacement-list}. The first form of this
command defines an ``object-like'' macro, which takes no arguments; the
second form defines a ``function-like'' macro, which takes the arguments
given in @var{arglist}.
A definition introduced by this command is in scope in every expression
evaluated in @value{GDBN}, until it is removed with the @command{macro
undef} command, described below. The definition overrides all
definitions for @var{macro} present in the program being debugged, as
well as any previous user-supplied definition.
@kindex macro undef
@item macro undef @var{macro}
@i{(This command is not yet implemented.)} Remove any user-supplied
definition for the macro named @var{macro}. This command only affects
definitions provided with the @command{macro define} command, described
above; it cannot remove definitions present in the program being
debugged.
@end table
@cindex macros, example of debugging with
Here is a transcript showing the above commands in action. First, we
show our source files:
@smallexample
$ cat sample.c
#include <stdio.h>
#include "sample.h"
#define M 42
#define ADD(x) (M + x)
main ()
@{
#define N 28
printf ("Hello, world!\n");
#undef N
printf ("We're so creative.\n");
#define N 1729
printf ("Goodbye, world!\n");
@}
$ cat sample.h
#define Q <
$
@end smallexample
Now, we compile the program using the @sc{gnu} C compiler, @value{NGCC}.
We pass the @option{-gdwarf-2} and @option{-g3} flags to ensure the
compiler includes information about preprocessor macros in the debugging
information.
@smallexample
$ gcc -gdwarf-2 -g3 sample.c -o sample
$
@end smallexample
Now, we start @value{GDBN} on our sample program:
@smallexample
$ gdb -nw sample
GNU gdb 2002-05-06-cvs
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, @dots{}
(gdb)
@end smallexample
We can expand macros and examine their definitions, even when the
program is not running. @value{GDBN} uses the current listing position
to decide which macro definitions are in scope:
@smallexample
(gdb) list main
3
4 #define M 42
5 #define ADD(x) (M + x)
6
7 main ()
8 @{
9 #define N 28
10 printf ("Hello, world!\n");
11 #undef N
12 printf ("We're so creative.\n");
(gdb) info macro ADD
Defined at /home/jimb/gdb/macros/play/sample.c:5
#define ADD(x) (M + x)
(gdb) info macro Q
Defined at /home/jimb/gdb/macros/play/sample.h:1
included at /home/jimb/gdb/macros/play/sample.c:2
#define Q <
(gdb) macro expand ADD(1)
expands to: (42 + 1)
(gdb) macro expand-once ADD(1)
expands to: once (M + 1)
(gdb)
@end smallexample
In the example above, note that @command{macro expand-once} expands only
the macro invocation explicit in the original text --- the invocation of
@code{ADD} --- but does not expand the invocation of the macro @code{M},
which was introduced by @code{ADD}.
Once the program is running, GDB uses the macro definitions in force at
the source line of the current stack frame:
@smallexample
(gdb) break main
Breakpoint 1 at 0x8048370: file sample.c, line 10.
(gdb) run
Starting program: /home/jimb/gdb/macros/play/sample
Breakpoint 1, main () at sample.c:10
10 printf ("Hello, world!\n");
(gdb)
@end smallexample
At line 10, the definition of the macro @code{N} at line 9 is in force:
@smallexample
(gdb) info macro N
Defined at /home/jimb/gdb/macros/play/sample.c:9
#define N 28
(gdb) macro expand N Q M
expands to: 28 < 42
(gdb) print N Q M
$1 = 1
(gdb)
@end smallexample
As we step over directives that remove @code{N}'s definition, and then
give it a new definition, @value{GDBN} finds the definition (or lack
thereof) in force at each point:
@smallexample
(gdb) next
Hello, world!
12 printf ("We're so creative.\n");
(gdb) info macro N
The symbol `N' has no definition as a C/C++ preprocessor macro
at /home/jimb/gdb/macros/play/sample.c:12
(gdb) next
We're so creative.
14 printf ("Goodbye, world!\n");
(gdb) info macro N
Defined at /home/jimb/gdb/macros/play/sample.c:13
#define N 1729
(gdb) macro expand N Q M
expands to: 1729 < 42
(gdb) print N Q M
$2 = 0
(gdb)
@end smallexample
@node Tracepoints
@chapter Tracepoints
@c This chapter is based on the documentation written by Michael
@c Snyder, David Taylor, Jim Blandy, and Elena Zannoni.
@cindex tracepoints
In some applications, it is not feasible for the debugger to interrupt
the program's execution long enough for the developer to learn
anything helpful about its behavior. If the program's correctness
depends on its real-time behavior, delays introduced by a debugger
might cause the program to change its behavior drastically, or perhaps
fail, even when the code itself is correct. It is useful to be able
to observe the program's behavior without interrupting it.
Using @value{GDBN}'s @code{trace} and @code{collect} commands, you can
specify locations in the program, called @dfn{tracepoints}, and
arbitrary expressions to evaluate when those tracepoints are reached.
Later, using the @code{tfind} command, you can examine the values
those expressions had when the program hit the tracepoints. The
expressions may also denote objects in memory---structures or arrays,
for example---whose values @value{GDBN} should record; while visiting
a particular tracepoint, you may inspect those objects as if they were
in memory at that moment. However, because @value{GDBN} records these
values without interacting with you, it can do so quickly and
unobtrusively, hopefully not disturbing the program's behavior.
The tracepoint facility is currently available only for remote
targets. @xref{Targets}. In addition, your remote target must know how
to collect trace data. This functionality is implemented in the remote
stub; however, none of the stubs distributed with @value{GDBN} support
tracepoints as of this writing.
This chapter describes the tracepoint commands and features.
@menu
* Set Tracepoints::
* Analyze Collected Data::
* Tracepoint Variables::
@end menu
@node Set Tracepoints
@section Commands to Set Tracepoints
Before running such a @dfn{trace experiment}, an arbitrary number of
tracepoints can be set. Like a breakpoint (@pxref{Set Breaks}), a
tracepoint has a number assigned to it by @value{GDBN}. Like with
breakpoints, tracepoint numbers are successive integers starting from
one. Many of the commands associated with tracepoints take the
tracepoint number as their argument, to identify which tracepoint to
work on.
For each tracepoint, you can specify, in advance, some arbitrary set
of data that you want the target to collect in the trace buffer when
it hits that tracepoint. The collected data can include registers,
local variables, or global data. Later, you can use @value{GDBN}
commands to examine the values these data had at the time the
tracepoint was hit.
This section describes commands to set tracepoints and associated
conditions and actions.
@menu
* Create and Delete Tracepoints::
* Enable and Disable Tracepoints::
* Tracepoint Passcounts::
* Tracepoint Actions::
* Listing Tracepoints::
* Starting and Stopping Trace Experiment::
@end menu
@node Create and Delete Tracepoints
@subsection Create and Delete Tracepoints
@table @code
@cindex set tracepoint
@kindex trace
@item trace
The @code{trace} command is very similar to the @code{break} command.
Its argument can be a source line, a function name, or an address in
the target program. @xref{Set Breaks}. The @code{trace} command
defines a tracepoint, which is a point in the target program where the
debugger will briefly stop, collect some data, and then allow the
program to continue. Setting a tracepoint or changing its commands
doesn't take effect until the next @code{tstart} command; thus, you
cannot change the tracepoint attributes once a trace experiment is
running.
Here are some examples of using the @code{trace} command:
@smallexample
(@value{GDBP}) @b{trace foo.c:121} // a source file and line number
(@value{GDBP}) @b{trace +2} // 2 lines forward
(@value{GDBP}) @b{trace my_function} // first source line of function
(@value{GDBP}) @b{trace *my_function} // EXACT start address of function
(@value{GDBP}) @b{trace *0x2117c4} // an address
@end smallexample
@noindent
You can abbreviate @code{trace} as @code{tr}.
@vindex $tpnum
@cindex last tracepoint number
@cindex recent tracepoint number
@cindex tracepoint number
The convenience variable @code{$tpnum} records the tracepoint number
of the most recently set tracepoint.
@kindex delete tracepoint
@cindex tracepoint deletion
@item delete tracepoint @r{[}@var{num}@r{]}
Permanently delete one or more tracepoints. With no argument, the
default is to delete all tracepoints.
Examples:
@smallexample
(@value{GDBP}) @b{delete trace 1 2 3} // remove three tracepoints
(@value{GDBP}) @b{delete trace} // remove all tracepoints
@end smallexample
@noindent
You can abbreviate this command as @code{del tr}.
@end table
@node Enable and Disable Tracepoints
@subsection Enable and Disable Tracepoints
@table @code
@kindex disable tracepoint
@item disable tracepoint @r{[}@var{num}@r{]}
Disable tracepoint @var{num}, or all tracepoints if no argument
@var{num} is given. A disabled tracepoint will have no effect during
the next trace experiment, but it is not forgotten. You can re-enable
a disabled tracepoint using the @code{enable tracepoint} command.
@kindex enable tracepoint
@item enable tracepoint @r{[}@var{num}@r{]}
Enable tracepoint @var{num}, or all tracepoints. The enabled
tracepoints will become effective the next time a trace experiment is
run.
@end table
@node Tracepoint Passcounts
@subsection Tracepoint Passcounts
@table @code
@kindex passcount
@cindex tracepoint pass count
@item passcount @r{[}@var{n} @r{[}@var{num}@r{]]}
Set the @dfn{passcount} of a tracepoint. The passcount is a way to
automatically stop a trace experiment. If a tracepoint's passcount is
@var{n}, then the trace experiment will be automatically stopped on
the @var{n}'th time that tracepoint is hit. If the tracepoint number
@var{num} is not specified, the @code{passcount} command sets the
passcount of the most recently defined tracepoint. If no passcount is
given, the trace experiment will run until stopped explicitly by the
user.
Examples:
@smallexample
(@value{GDBP}) @b{passcount 5 2} // Stop on the 5th execution of
@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// tracepoint 2}
(@value{GDBP}) @b{passcount 12} // Stop on the 12th execution of the
@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// most recently defined tracepoint.}
(@value{GDBP}) @b{trace foo}
(@value{GDBP}) @b{pass 3}
(@value{GDBP}) @b{trace bar}
(@value{GDBP}) @b{pass 2}
(@value{GDBP}) @b{trace baz}
(@value{GDBP}) @b{pass 1} // Stop tracing when foo has been
@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// executed 3 times OR when bar has}
@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// been executed 2 times}
@exdent @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @code{// OR when baz has been executed 1 time.}
@end smallexample
@end table
@node Tracepoint Actions
@subsection Tracepoint Action Lists
@table @code
@kindex actions
@cindex tracepoint actions
@item actions @r{[}@var{num}@r{]}
This command will prompt for a list of actions to be taken when the
tracepoint is hit. If the tracepoint number @var{num} is not
specified, this command sets the actions for the one that was most
recently defined (so that you can define a tracepoint and then say
@code{actions} without bothering about its number). You specify the
actions themselves on the following lines, one action at a time, and
terminate the actions list with a line containing just @code{end}. So
far, the only defined actions are @code{collect} and
@code{while-stepping}.
@cindex remove actions from a tracepoint
To remove all actions from a tracepoint, type @samp{actions @var{num}}
and follow it immediately with @samp{end}.
@smallexample
(@value{GDBP}) @b{collect @var{data}} // collect some data
(@value{GDBP}) @b{while-stepping 5} // single-step 5 times, collect data
(@value{GDBP}) @b{end} // signals the end of actions.
@end smallexample
In the following example, the action list begins with @code{collect}
commands indicating the things to be collected when the tracepoint is
hit. Then, in order to single-step and collect additional data
following the tracepoint, a @code{while-stepping} command is used,
followed by the list of things to be collected while stepping. The
@code{while-stepping} command is terminated by its own separate
@code{end} command. Lastly, the action list is terminated by an
@code{end} command.
@smallexample
(@value{GDBP}) @b{trace foo}
(@value{GDBP}) @b{actions}
Enter actions for tracepoint 1, one per line:
> collect bar,baz
> collect $regs
> while-stepping 12
> collect $fp, $sp
> end
end
@end smallexample
@kindex collect @r{(tracepoints)}
@item collect @var{expr1}, @var{expr2}, @dots{}
Collect values of the given expressions when the tracepoint is hit.
This command accepts a comma-separated list of any valid expressions.
In addition to global, static, or local variables, the following
special arguments are supported:
@table @code
@item $regs
collect all registers
@item $args
collect all function arguments
@item $locals
collect all local variables.
@end table
You can give several consecutive @code{collect} commands, each one
with a single argument, or one @code{collect} command with several
arguments separated by commas: the effect is the same.
The command @code{info scope} (@pxref{Symbols, info scope}) is
particularly useful for figuring out what data to collect.
@kindex while-stepping @r{(tracepoints)}
@item while-stepping @var{n}
Perform @var{n} single-step traces after the tracepoint, collecting
new data at each step. The @code{while-stepping} command is
followed by the list of what to collect while stepping (followed by
its own @code{end} command):
@smallexample
> while-stepping 12
> collect $regs, myglobal
> end
>
@end smallexample
@noindent
You may abbreviate @code{while-stepping} as @code{ws} or
@code{stepping}.
@end table
@node Listing Tracepoints
@subsection Listing Tracepoints
@table @code
@kindex info tracepoints
@cindex information about tracepoints
@item info tracepoints @r{[}@var{num}@r{]}
Display information about the tracepoint @var{num}. If you don't specify
a tracepoint number, displays information about all the tracepoints
defined so far. For each tracepoint, the following information is
shown:
@itemize @bullet
@item
its number
@item
whether it is enabled or disabled
@item
its address
@item
its passcount as given by the @code{passcount @var{n}} command
@item
its step count as given by the @code{while-stepping @var{n}} command
@item
where in the source files is the tracepoint set
@item
its action list as given by the @code{actions} command
@end itemize
@smallexample
(@value{GDBP}) @b{info trace}
Num Enb Address PassC StepC What
1 y 0x002117c4 0 0 <gdb_asm>
2 y 0x0020dc64 0 0 in g_test at g_test.c:1375
3 y 0x0020b1f4 0 0 in get_data at ../foo.c:41
(@value{GDBP})
@end smallexample
@noindent
This command can be abbreviated @code{info tp}.
@end table
@node Starting and Stopping Trace Experiment
@subsection Starting and Stopping Trace Experiment
@table @code
@kindex tstart
@cindex start a new trace experiment
@cindex collected data discarded
@item tstart
This command takes no arguments. It starts the trace experiment, and
begins collecting data. This has the side effect of discarding all
the data collected in the trace buffer during the previous trace
experiment.
@kindex tstop
@cindex stop a running trace experiment
@item tstop
This command takes no arguments. It ends the trace experiment, and
stops collecting data.
@strong{Note:} a trace experiment and data collection may stop
automatically if any tracepoint's passcount is reached
(@pxref{Tracepoint Passcounts}), or if the trace buffer becomes full.
@kindex tstatus
@cindex status of trace data collection
@cindex trace experiment, status of
@item tstatus
This command displays the status of the current trace data
collection.
@end table
Here is an example of the commands we described so far:
@smallexample
(@value{GDBP}) @b{trace gdb_c_test}
(@value{GDBP}) @b{actions}
Enter actions for tracepoint #1, one per line.
> collect $regs,$locals,$args
> while-stepping 11
> collect $regs
> end
> end
(@value{GDBP}) @b{tstart}
[time passes @dots{}]
(@value{GDBP}) @b{tstop}
@end smallexample
@node Analyze Collected Data
@section Using the collected data
After the tracepoint experiment ends, you use @value{GDBN} commands
for examining the trace data. The basic idea is that each tracepoint
collects a trace @dfn{snapshot} every time it is hit and another
snapshot every time it single-steps. All these snapshots are
consecutively numbered from zero and go into a buffer, and you can
examine them later. The way you examine them is to @dfn{focus} on a
specific trace snapshot. When the remote stub is focused on a trace
snapshot, it will respond to all @value{GDBN} requests for memory and
registers by reading from the buffer which belongs to that snapshot,
rather than from @emph{real} memory or registers of the program being
debugged. This means that @strong{all} @value{GDBN} commands
(@code{print}, @code{info registers}, @code{backtrace}, etc.) will
behave as if we were currently debugging the program state as it was
when the tracepoint occurred. Any requests for data that are not in
the buffer will fail.
@menu
* tfind:: How to select a trace snapshot
* tdump:: How to display all data for a snapshot
* save-tracepoints:: How to save tracepoints for a future run
@end menu
@node tfind
@subsection @code{tfind @var{n}}
@kindex tfind
@cindex select trace snapshot
@cindex find trace snapshot
The basic command for selecting a trace snapshot from the buffer is
@code{tfind @var{n}}, which finds trace snapshot number @var{n},
counting from zero. If no argument @var{n} is given, the next
snapshot is selected.
Here are the various forms of using the @code{tfind} command.
@table @code
@item tfind start
Find the first snapshot in the buffer. This is a synonym for
@code{tfind 0} (since 0 is the number of the first snapshot).
@item tfind none
Stop debugging trace snapshots, resume @emph{live} debugging.
@item tfind end
Same as @samp{tfind none}.
@item tfind
No argument means find the next trace snapshot.
@item tfind -
Find the previous trace snapshot before the current one. This permits
retracing earlier steps.
@item tfind tracepoint @var{num}
Find the next snapshot associated with tracepoint @var{num}. Search
proceeds forward from the last examined trace snapshot. If no
argument @var{num} is given, it means find the next snapshot collected
for the same tracepoint as the current snapshot.
@item tfind pc @var{addr}
Find the next snapshot associated with the value @var{addr} of the
program counter. Search proceeds forward from the last examined trace
snapshot. If no argument @var{addr} is given, it means find the next
snapshot with the same value of PC as the current snapshot.
@item tfind outside @var{addr1}, @var{addr2}
Find the next snapshot whose PC is outside the given range of
addresses.
@item tfind range @var{addr1}, @var{addr2}
Find the next snapshot whose PC is between @var{addr1} and
@var{addr2}. @c FIXME: Is the range inclusive or exclusive?
@item tfind line @r{[}@var{file}:@r{]}@var{n}
Find the next snapshot associated with the source line @var{n}. If
the optional argument @var{file} is given, refer to line @var{n} in
that source file. Search proceeds forward from the last examined
trace snapshot. If no argument @var{n} is given, it means find the
next line other than the one currently being examined; thus saying
@code{tfind line} repeatedly can appear to have the same effect as
stepping from line to line in a @emph{live} debugging session.
@end table
The default arguments for the @code{tfind} commands are specifically
designed to make it easy to scan through the trace buffer. For
instance, @code{tfind} with no argument selects the next trace
snapshot, and @code{tfind -} with no argument selects the previous
trace snapshot. So, by giving one @code{tfind} command, and then
simply hitting @key{RET} repeatedly you can examine all the trace
snapshots in order. Or, by saying @code{tfind -} and then hitting
@key{RET} repeatedly you can examine the snapshots in reverse order.
The @code{tfind line} command with no argument selects the snapshot
for the next source line executed. The @code{tfind pc} command with
no argument selects the next snapshot with the same program counter
(PC) as the current frame. The @code{tfind tracepoint} command with
no argument selects the next trace snapshot collected by the same
tracepoint as the current one.
In addition to letting you scan through the trace buffer manually,
these commands make it easy to construct @value{GDBN} scripts that
scan through the trace buffer and print out whatever collected data
you are interested in. Thus, if we want to examine the PC, FP, and SP
registers from each trace frame in the buffer, we can say this:
@smallexample
(@value{GDBP}) @b{tfind start}
(@value{GDBP}) @b{while ($trace_frame != -1)}
> printf "Frame %d, PC = %08X, SP = %08X, FP = %08X\n", \
$trace_frame, $pc, $sp, $fp
> tfind
> end
Frame 0, PC = 0020DC64, SP = 0030BF3C, FP = 0030BF44
Frame 1, PC = 0020DC6C, SP = 0030BF38, FP = 0030BF44
Frame 2, PC = 0020DC70, SP = 0030BF34, FP = 0030BF44
Frame 3, PC = 0020DC74, SP = 0030BF30, FP = 0030BF44
Frame 4, PC = 0020DC78, SP = 0030BF2C, FP = 0030BF44
Frame 5, PC = 0020DC7C, SP = 0030BF28, FP = 0030BF44
Frame 6, PC = 0020DC80, SP = 0030BF24, FP = 0030BF44
Frame 7, PC = 0020DC84, SP = 0030BF20, FP = 0030BF44
Frame 8, PC = 0020DC88, SP = 0030BF1C, FP = 0030BF44
Frame 9, PC = 0020DC8E, SP = 0030BF18, FP = 0030BF44
Frame 10, PC = 00203F6C, SP = 0030BE3C, FP = 0030BF14
@end smallexample
Or, if we want to examine the variable @code{X} at each source line in
the buffer:
@smallexample
(@value{GDBP}) @b{tfind start}
(@value{GDBP}) @b{while ($trace_frame != -1)}
> printf "Frame %d, X == %d\n", $trace_frame, X
> tfind line
> end
Frame 0, X = 1
Frame 7, X = 2
Frame 13, X = 255
@end smallexample
@node tdump
@subsection @code{tdump}
@kindex tdump
@cindex dump all data collected at tracepoint
@cindex tracepoint data, display
This command takes no arguments. It prints all the data collected at
the current trace snapshot.
@smallexample
(@value{GDBP}) @b{trace 444}
(@value{GDBP}) @b{actions}
Enter actions for tracepoint #2, one per line:
> collect $regs, $locals, $args, gdb_long_test
> end
(@value{GDBP}) @b{tstart}
(@value{GDBP}) @b{tfind line 444}
#0 gdb_test (p1=0x11, p2=0x22, p3=0x33, p4=0x44, p5=0x55, p6=0x66)
at gdb_test.c:444
444 printp( "%s: arguments = 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", )
(@value{GDBP}) @b{tdump}
Data collected at tracepoint 2, trace frame 1:
d0 0xc4aa0085 -995491707
d1 0x18 24
d2 0x80 128
d3 0x33 51
d4 0x71aea3d 119204413
d5 0x22 34
d6 0xe0 224
d7 0x380035 3670069
a0 0x19e24a 1696330
a1 0x3000668 50333288
a2 0x100 256
a3 0x322000 3284992
a4 0x3000698 50333336
a5 0x1ad3cc 1758156
fp 0x30bf3c 0x30bf3c
sp 0x30bf34 0x30bf34
ps 0x0 0
pc 0x20b2c8 0x20b2c8
fpcontrol 0x0 0
fpstatus 0x0 0
fpiaddr 0x0 0
p = 0x20e5b4 "gdb-test"
p1 = (void *) 0x11
p2 = (void *) 0x22
p3 = (void *) 0x33
p4 = (void *) 0x44
p5 = (void *) 0x55
p6 = (void *) 0x66
gdb_long_test = 17 '\021'
(@value{GDBP})
@end smallexample
@node save-tracepoints
@subsection @code{save-tracepoints @var{filename}}
@kindex save-tracepoints
@cindex save tracepoints for future sessions
This command saves all current tracepoint definitions together with
their actions and passcounts, into a file @file{@var{filename}}
suitable for use in a later debugging session. To read the saved
tracepoint definitions, use the @code{source} command (@pxref{Command
Files}).
@node Tracepoint Variables
@section Convenience Variables for Tracepoints
@cindex tracepoint variables
@cindex convenience variables for tracepoints
@table @code
@vindex $trace_frame
@item (int) $trace_frame
The current trace snapshot (a.k.a.@: @dfn{frame}) number, or -1 if no
snapshot is selected.
@vindex $tracepoint
@item (int) $tracepoint
The tracepoint for the current trace snapshot.
@vindex $trace_line
@item (int) $trace_line
The line number for the current trace snapshot.
@vindex $trace_file
@item (char []) $trace_file
The source file for the current trace snapshot.
@vindex $trace_func
@item (char []) $trace_func
The name of the function containing @code{$tracepoint}.
@end table
Note: @code{$trace_file} is not suitable for use in @code{printf},
use @code{output} instead.
Here's a simple example of using these convenience variables for
stepping through all the trace snapshots and printing some of their
data.
@smallexample
(@value{GDBP}) @b{tfind start}
(@value{GDBP}) @b{while $trace_frame != -1}
> output $trace_file
> printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint
> tfind
> end
@end smallexample
@node Overlays
@chapter Debugging Programs That Use Overlays
@cindex overlays
If your program is too large to fit completely in your target system's
memory, you can sometimes use @dfn{overlays} to work around this
problem. @value{GDBN} provides some support for debugging programs that
use overlays.
@menu
* How Overlays Work:: A general explanation of overlays.
* Overlay Commands:: Managing overlays in @value{GDBN}.
* Automatic Overlay Debugging:: @value{GDBN} can find out which overlays are
mapped by asking the inferior.
* Overlay Sample Program:: A sample program using overlays.
@end menu
@node How Overlays Work
@section How Overlays Work
@cindex mapped overlays
@cindex unmapped overlays
@cindex load address, overlay's
@cindex mapped address
@cindex overlay area
Suppose you have a computer whose instruction address space is only 64
kilobytes long, but which has much more memory which can be accessed by
other means: special instructions, segment registers, or memory
management hardware, for example. Suppose further that you want to
adapt a program which is larger than 64 kilobytes to run on this system.
One solution is to identify modules of your program which are relatively
independent, and need not call each other directly; call these modules
@dfn{overlays}. Separate the overlays from the main program, and place
their machine code in the larger memory. Place your main program in
instruction memory, but leave at least enough space there to hold the
largest overlay as well.
Now, to call a function located in an overlay, you must first copy that
overlay's machine code from the large memory into the space set aside
for it in the instruction memory, and then jump to its entry point
there.
@c NB: In the below the mapped area's size is greater or equal to the
@c size of all overlays. This is intentional to remind the developer
@c that overlays don't necessarily need to be the same size.
@smallexample
@group
Data Instruction Larger
Address Space Address Space Address Space
+-----------+ +-----------+ +-----------+
| | | | | |
+-----------+ +-----------+ +-----------+<-- overlay 1
| program | | main | .----| overlay 1 | load address
| variables | | program | | +-----------+
| and heap | | | | | |
+-----------+ | | | +-----------+<-- overlay 2
| | +-----------+ | | | load address
+-----------+ | | | .-| overlay 2 |
| | | | | |
mapped --->+-----------+ | | +-----------+
address | | | | | |
| overlay | <-' | | |
| area | <---' +-----------+<-- overlay 3
| | <---. | | load address
+-----------+ `--| overlay 3 |
| | | |
+-----------+ | |
+-----------+
| |
+-----------+
@anchor{A code overlay}A code overlay
@end group
@end smallexample
The diagram (@pxref{A code overlay}) shows a system with separate data
and instruction address spaces. To map an overlay, the program copies
its code from the larger address space to the instruction address space.
Since the overlays shown here all use the same mapped address, only one
may be mapped at a time. For a system with a single address space for
data and instructions, the diagram would be similar, except that the
program variables and heap would share an address space with the main
program and the overlay area.
An overlay loaded into instruction memory and ready for use is called a
@dfn{mapped} overlay; its @dfn{mapped address} is its address in the
instruction memory. An overlay not present (or only partially present)
in instruction memory is called @dfn{unmapped}; its @dfn{load address}
is its address in the larger memory. The mapped address is also called
the @dfn{virtual memory address}, or @dfn{VMA}; the load address is also
called the @dfn{load memory address}, or @dfn{LMA}.
Unfortunately, overlays are not a completely transparent way to adapt a
program to limited instruction memory. They introduce a new set of
global constraints you must keep in mind as you design your program:
@itemize @bullet
@item
Before calling or returning to a function in an overlay, your program
must make sure that overlay is actually mapped. Otherwise, the call or
return will transfer control to the right address, but in the wrong
overlay, and your program will probably crash.
@item
If the process of mapping an overlay is expensive on your system, you
will need to choose your overlays carefully to minimize their effect on
your program's performance.
@item
The executable file you load onto your system must contain each
overlay's instructions, appearing at the overlay's load address, not its
mapped address. However, each overlay's instructions must be relocated
and its symbols defined as if the overlay were at its mapped address.
You can use GNU linker scripts to specify different load and relocation
addresses for pieces of your program; see @ref{Overlay Description,,,
ld.info, Using ld: the GNU linker}.
@item
The procedure for loading executable files onto your system must be able
to load their contents into the larger address space as well as the
instruction and data spaces.
@end itemize
The overlay system described above is rather simple, and could be
improved in many ways:
@itemize @bullet
@item
If your system has suitable bank switch registers or memory management
hardware, you could use those facilities to make an overlay's load area
contents simply appear at their mapped address in instruction space.
This would probably be faster than copying the overlay to its mapped
area in the usual way.
@item
If your overlays are small enough, you could set aside more than one
overlay area, and have more than one overlay mapped at a time.
@item
You can use overlays to manage data, as well as instructions. In
general, data overlays are even less transparent to your design than
code overlays: whereas code overlays only require care when you call or
return to functions, data overlays require care every time you access
the data. Also, if you change the contents of a data overlay, you
must copy its contents back out to its load address before you can copy a
different data overlay into the same mapped area.
@end itemize
@node Overlay Commands
@section Overlay Commands
To use @value{GDBN}'s overlay support, each overlay in your program must
correspond to a separate section of the executable file. The section's
virtual memory address and load memory address must be the overlay's
mapped and load addresses. Identifying overlays with sections allows
@value{GDBN} to determine the appropriate address of a function or
variable, depending on whether the overlay is mapped or not.
@value{GDBN}'s overlay commands all start with the word @code{overlay};
you can abbreviate this as @code{ov} or @code{ovly}. The commands are:
@table @code
@item overlay off
@kindex overlay off
Disable @value{GDBN}'s overlay support. When overlay support is
disabled, @value{GDBN} assumes that all functions and variables are
always present at their mapped addresses. By default, @value{GDBN}'s
overlay support is disabled.
@item overlay manual
@kindex overlay manual
@cindex manual overlay debugging
Enable @dfn{manual} overlay debugging. In this mode, @value{GDBN}
relies on you to tell it which overlays are mapped, and which are not,
using the @code{overlay map-overlay} and @code{overlay unmap-overlay}
commands described below.
@item overlay map-overlay @var{overlay}
@itemx overlay map @var{overlay}
@kindex overlay map-overlay
@cindex map an overlay
Tell @value{GDBN} that @var{overlay} is now mapped; @var{overlay} must
be the name of the object file section containing the overlay. When an
overlay is mapped, @value{GDBN} assumes it can find the overlay's
functions and variables at their mapped addresses. @value{GDBN} assumes
that any other overlays whose mapped ranges overlap that of
@var{overlay} are now unmapped.
@item overlay unmap-overlay @var{overlay}
@itemx overlay unmap @var{overlay}
@kindex overlay unmap-overlay
@cindex unmap an overlay
Tell @value{GDBN} that @var{overlay} is no longer mapped; @var{overlay}
must be the name of the object file section containing the overlay.
When an overlay is unmapped, @value{GDBN} assumes it can find the
overlay's functions and variables at their load addresses.
@item overlay auto
@kindex overlay auto
Enable @dfn{automatic} overlay debugging. In this mode, @value{GDBN}
consults a data structure the overlay manager maintains in the inferior
to see which overlays are mapped. For details, see @ref{Automatic
Overlay Debugging}.
@item overlay load-target
@itemx overlay load
@kindex overlay load-target
@cindex reloading the overlay table
Re-read the overlay table from the inferior. Normally, @value{GDBN}
re-reads the table @value{GDBN} automatically each time the inferior
stops, so this command should only be necessary if you have changed the
overlay mapping yourself using @value{GDBN}. This command is only
useful when using automatic overlay debugging.
@item overlay list-overlays
@itemx overlay list
@cindex listing mapped overlays
Display a list of the overlays currently mapped, along with their mapped
addresses, load addresses, and sizes.
@end table
Normally, when @value{GDBN} prints a code address, it includes the name
of the function the address falls in:
@smallexample
(gdb) print main
$3 = @{int ()@} 0x11a0 <main>
@end smallexample
@noindent
When overlay debugging is enabled, @value{GDBN} recognizes code in
unmapped overlays, and prints the names of unmapped functions with
asterisks around them. For example, if @code{foo} is a function in an
unmapped overlay, @value{GDBN} prints it this way:
@smallexample
(gdb) overlay list
No sections are mapped.
(gdb) print foo
$5 = @{int (int)@} 0x100000 <*foo*>
@end smallexample
@noindent
When @code{foo}'s overlay is mapped, @value{GDBN} prints the function's
name normally:
@smallexample
(gdb) overlay list
Section .ov.foo.text, loaded at 0x100000 - 0x100034,
mapped at 0x1016 - 0x104a
(gdb) print foo
$6 = @{int (int)@} 0x1016 <foo>
@end smallexample
When overlay debugging is enabled, @value{GDBN} can find the correct
address for functions and variables in an overlay, whether or not the
overlay is mapped. This allows most @value{GDBN} commands, like
@code{break} and @code{disassemble}, to work normally, even on unmapped
code. However, @value{GDBN}'s breakpoint support has some limitations:
@itemize @bullet
@item
@cindex breakpoints in overlays
@cindex overlays, setting breakpoints in
You can set breakpoints in functions in unmapped overlays, as long as
@value{GDBN} can write to the overlay at its load address.
@item
@value{GDBN} can not set hardware or simulator-based breakpoints in
unmapped overlays. However, if you set a breakpoint at the end of your
overlay manager (and tell @value{GDBN} which overlays are now mapped, if
you are using manual overlay management), @value{GDBN} will re-set its
breakpoints properly.
@end itemize
@node Automatic Overlay Debugging
@section Automatic Overlay Debugging
@cindex automatic overlay debugging
@value{GDBN} can automatically track which overlays are mapped and which
are not, given some simple co-operation from the overlay manager in the
inferior. If you enable automatic overlay debugging with the
@code{overlay auto} command (@pxref{Overlay Commands}), @value{GDBN}
looks in the inferior's memory for certain variables describing the
current state of the overlays.
Here are the variables your overlay manager must define to support
@value{GDBN}'s automatic overlay debugging:
@table @asis
@item @code{_ovly_table}:
This variable must be an array of the following structures:
@smallexample
struct
@{
/* The overlay's mapped address. */
unsigned long vma;
/* The size of the overlay, in bytes. */
unsigned long size;
/* The overlay's load address. */
unsigned long lma;
/* Non-zero if the overlay is currently mapped;
zero otherwise. */
unsigned long mapped;
@}
@end smallexample
@item @code{_novlys}:
This variable must be a four-byte signed integer, holding the total
number of elements in @code{_ovly_table}.
@end table
To decide whether a particular overlay is mapped or not, @value{GDBN}
looks for an entry in @w{@code{_ovly_table}} whose @code{vma} and
@code{lma} members equal the VMA and LMA of the overlay's section in the
executable file. When @value{GDBN} finds a matching entry, it consults
the entry's @code{mapped} member to determine whether the overlay is
currently mapped.
In addition, your overlay manager may define a function called
@code{_ovly_debug_event}. If this function is defined, @value{GDBN}
will silently set a breakpoint there. If the overlay manager then
calls this function whenever it has changed the overlay table, this
will enable @value{GDBN} to accurately keep track of which overlays
are in program memory, and update any breakpoints that may be set
in overlays. This will allow breakpoints to work even if the
overlays are kept in ROM or other non-writable memory while they
are not being executed.
@node Overlay Sample Program
@section Overlay Sample Program
@cindex overlay example program
When linking a program which uses overlays, you must place the overlays
at their load addresses, while relocating them to run at their mapped
addresses. To do this, you must write a linker script (@pxref{Overlay
Description,,, ld.info, Using ld: the GNU linker}). Unfortunately,
since linker scripts are specific to a particular host system, target
architecture, and target memory layout, this manual cannot provide
portable sample code demonstrating @value{GDBN}'s overlay support.
However, the @value{GDBN} source distribution does contain an overlaid
program, with linker scripts for a few systems, as part of its test
suite. The program consists of the following files from
@file{gdb/testsuite/gdb.base}:
@table @file
@item overlays.c
The main program file.
@item ovlymgr.c
A simple overlay manager, used by @file{overlays.c}.
@item foo.c
@itemx bar.c
@itemx baz.c
@itemx grbx.c
Overlay modules, loaded and used by @file{overlays.c}.
@item d10v.ld
@itemx m32r.ld
Linker scripts for linking the test program on the @code{d10v-elf}
and @code{m32r-elf} targets.
@end table
You can build the test program using the @code{d10v-elf} GCC
cross-compiler like this:
@smallexample
$ d10v-elf-gcc -g -c overlays.c
$ d10v-elf-gcc -g -c ovlymgr.c
$ d10v-elf-gcc -g -c foo.c
$ d10v-elf-gcc -g -c bar.c
$ d10v-elf-gcc -g -c baz.c
$ d10v-elf-gcc -g -c grbx.c
$ d10v-elf-gcc -g overlays.o ovlymgr.o foo.o bar.o \
baz.o grbx.o -Wl,-Td10v.ld -o overlays
@end smallexample
The build process is identical for any other architecture, except that
you must substitute the appropriate compiler and linker script for the
target system for @code{d10v-elf-gcc} and @code{d10v.ld}.
@node Languages
@chapter Using @value{GDBN} with Different Languages
@cindex languages
Although programming languages generally have common aspects, they are
rarely expressed in the same manner. For instance, in ANSI C,
dereferencing a pointer @code{p} is accomplished by @code{*p}, but in
Modula-2, it is accomplished by @code{p^}. Values can also be
represented (and displayed) differently. Hex numbers in C appear as
@samp{0x1ae}, while in Modula-2 they appear as @samp{1AEH}.
@cindex working language
Language-specific information is built into @value{GDBN} for some languages,
allowing you to express operations like the above in your program's
native language, and allowing @value{GDBN} to output values in a manner
consistent with the syntax of your program's native language. The
language you use to build expressions is called the @dfn{working
language}.
@menu
* Setting:: Switching between source languages
* Show:: Displaying the language
* Checks:: Type and range checks
* Support:: Supported languages
@end menu
@node Setting
@section Switching between source languages
There are two ways to control the working language---either have @value{GDBN}
set it automatically, or select it manually yourself. You can use the
@code{set language} command for either purpose. On startup, @value{GDBN}
defaults to setting the language automatically. The working language is
used to determine how expressions you type are interpreted, how values
are printed, etc.
In addition to the working language, every source file that
@value{GDBN} knows about has its own working language. For some object
file formats, the compiler might indicate which language a particular
source file is in. However, most of the time @value{GDBN} infers the
language from the name of the file. The language of a source file
controls whether C@t{++} names are demangled---this way @code{backtrace} can
show each frame appropriately for its own language. There is no way to
set the language of a source file from within @value{GDBN}, but you can
set the language associated with a filename extension. @xref{Show, ,
Displaying the language}.
This is most commonly a problem when you use a program, such
as @code{cfront} or @code{f2c}, that generates C but is written in
another language. In that case, make the
program use @code{#line} directives in its C output; that way
@value{GDBN} will know the correct language of the source code of the original
program, and will display that source code, not the generated C code.
@menu
* Filenames:: Filename extensions and languages.
* Manually:: Setting the working language manually
* Automatically:: Having @value{GDBN} infer the source language
@end menu
@node Filenames
@subsection List of filename extensions and languages
If a source file name ends in one of the following extensions, then
@value{GDBN} infers that its language is the one indicated.
@table @file
@item .ada
@itemx .ads
@itemx .adb
@itemx .a
Ada source file.
@item .c
C source file
@item .C
@itemx .cc
@itemx .cp
@itemx .cpp
@itemx .cxx
@itemx .c++
C@t{++} source file
@item .f
@itemx .F
Fortran source file
@c OBSOLETE @item .ch
@c OBSOLETE @itemx .c186
@c OBSOLETE @itemx .c286
@c OBSOLETE CHILL source file
@item .mod
Modula-2 source file
@item .s
@itemx .S
Assembler source file. This actually behaves almost like C, but
@value{GDBN} does not skip over function prologues when stepping.
@end table
In addition, you may set the language associated with a filename
extension. @xref{Show, , Displaying the language}.
@node Manually
@subsection Setting the working language
If you allow @value{GDBN} to set the language automatically,
expressions are interpreted the same way in your debugging session and
your program.
@kindex set language
If you wish, you may set the language manually. To do this, issue the
command @samp{set language @var{lang}}, where @var{lang} is the name of
a language, such as
@code{c} or @code{modula-2}.
For a list of the supported languages, type @samp{set language}.
Setting the language manually prevents @value{GDBN} from updating the working
language automatically. This can lead to confusion if you try
to debug a program when the working language is not the same as the
source language, when an expression is acceptable to both
languages---but means different things. For instance, if the current
source file were written in C, and @value{GDBN} was parsing Modula-2, a
command such as:
@smallexample
print a = b + c
@end smallexample
@noindent
might not have the effect you intended. In C, this means to add
@code{b} and @code{c} and place the result in @code{a}. The result
printed would be the value of @code{a}. In Modula-2, this means to compare
@code{a} to the result of @code{b+c}, yielding a @code{BOOLEAN} value.
@node Automatically
@subsection Having @value{GDBN} infer the source language
To have @value{GDBN} set the working language automatically, use
@samp{set language local} or @samp{set language auto}. @value{GDBN}
then infers the working language. That is, when your program stops in a
frame (usually by encountering a breakpoint), @value{GDBN} sets the
working language to the language recorded for the function in that
frame. If the language for a frame is unknown (that is, if the function
or block corresponding to the frame was defined in a source file that
does not have a recognized extension), the current working language is
not changed, and @value{GDBN} issues a warning.
This may not seem necessary for most programs, which are written
entirely in one source language. However, program modules and libraries
written in one source language can be used by a main program written in
a different source language. Using @samp{set language auto} in this
case frees you from having to set the working language manually.
@node Show
@section Displaying the language
The following commands help you find out which language is the
working language, and also what language source files were written in.
@kindex show language
@kindex info frame@r{, show the source language}
@kindex info source@r{, show the source language}
@table @code
@item show language
Display the current working language. This is the
language you can use with commands such as @code{print} to
build and compute expressions that may involve variables in your program.
@item info frame
Display the source language for this frame. This language becomes the
working language if you use an identifier from this frame.
@xref{Frame Info, ,Information about a frame}, to identify the other
information listed here.
@item info source
Display the source language of this source file.
@xref{Symbols, ,Examining the Symbol Table}, to identify the other
information listed here.
@end table
In unusual circumstances, you may have source files with extensions
not in the standard list. You can then set the extension associated
with a language explicitly:
@kindex set extension-language
@kindex info extensions
@table @code
@item set extension-language @var{.ext} @var{language}
Set source files with extension @var{.ext} to be assumed to be in
the source language @var{language}.
@item info extensions
List all the filename extensions and the associated languages.
@end table
@node Checks
@section Type and range checking
@quotation
@emph{Warning:} In this release, the @value{GDBN} commands for type and range
checking are included, but they do not yet have any effect. This
section documents the intended facilities.
@end quotation
@c FIXME remove warning when type/range code added
Some languages are designed to guard you against making seemingly common
errors through a series of compile- and run-time checks. These include
checking the type of arguments to functions and operators, and making
sure mathematical overflows are caught at run time. Checks such as
these help to ensure a program's correctness once it has been compiled
by eliminating type mismatches, and providing active checks for range
errors when your program is running.
@value{GDBN} can check for conditions like the above if you wish.
Although @value{GDBN} does not check the statements in your program, it
can check expressions entered directly into @value{GDBN} for evaluation via
the @code{print} command, for example. As with the working language,
@value{GDBN} can also decide whether or not to check automatically based on
your program's source language. @xref{Support, ,Supported languages},
for the default settings of supported languages.
@menu
* Type Checking:: An overview of type checking
* Range Checking:: An overview of range checking
@end menu
@cindex type checking
@cindex checks, type
@node Type Checking
@subsection An overview of type checking
Some languages, such as Modula-2, are strongly typed, meaning that the
arguments to operators and functions have to be of the correct type,
otherwise an error occurs. These checks prevent type mismatch
errors from ever causing any run-time problems. For example,
@smallexample
1 + 2 @result{} 3
@exdent but
@error{} 1 + 2.3
@end smallexample
The second example fails because the @code{CARDINAL} 1 is not
type-compatible with the @code{REAL} 2.3.
For the expressions you use in @value{GDBN} commands, you can tell the
@value{GDBN} type checker to skip checking;
to treat any mismatches as errors and abandon the expression;
or to only issue warnings when type mismatches occur,
but evaluate the expression anyway. When you choose the last of
these, @value{GDBN} evaluates expressions like the second example above, but
also issues a warning.
Even if you turn type checking off, there may be other reasons
related to type that prevent @value{GDBN} from evaluating an expression.
For instance, @value{GDBN} does not know how to add an @code{int} and
a @code{struct foo}. These particular type errors have nothing to do
with the language in use, and usually arise from expressions, such as
the one described above, which make little sense to evaluate anyway.
Each language defines to what degree it is strict about type. For
instance, both Modula-2 and C require the arguments to arithmetical
operators to be numbers. In C, enumerated types and pointers can be
represented as numbers, so that they are valid arguments to mathematical
operators. @xref{Support, ,Supported languages}, for further
details on specific languages.
@value{GDBN} provides some additional commands for controlling the type checker:
@kindex set check@r{, type}
@kindex set check type
@kindex show check type
@table @code
@item set check type auto
Set type checking on or off based on the current working language.
@xref{Support, ,Supported languages}, for the default settings for
each language.
@item set check type on
@itemx set check type off
Set type checking on or off, overriding the default setting for the
current working language. Issue a warning if the setting does not
match the language default. If any type mismatches occur in
evaluating an expression while type checking is on, @value{GDBN} prints a
message and aborts evaluation of the expression.
@item set check type warn
Cause the type checker to issue warnings, but to always attempt to
evaluate the expression. Evaluating the expression may still
be impossible for other reasons. For example, @value{GDBN} cannot add
numbers and structures.
@item show type
Show the current setting of the type checker, and whether or not @value{GDBN}
is setting it automatically.
@end table
@cindex range checking
@cindex checks, range
@node Range Checking
@subsection An overview of range checking
In some languages (such as Modula-2), it is an error to exceed the
bounds of a type; this is enforced with run-time checks. Such range
checking is meant to ensure program correctness by making sure
computations do not overflow, or indices on an array element access do
not exceed the bounds of the array.
For expressions you use in @value{GDBN} commands, you can tell
@value{GDBN} to treat range errors in one of three ways: ignore them,
always treat them as errors and abandon the expression, or issue
warnings but evaluate the expression anyway.
A range error can result from numerical overflow, from exceeding an
array index bound, or when you type a constant that is not a member
of any type. Some languages, however, do not treat overflows as an
error. In many implementations of C, mathematical overflow causes the
result to ``wrap around'' to lower values---for example, if @var{m} is
the largest integer value, and @var{s} is the smallest, then
@smallexample
@var{m} + 1 @result{} @var{s}
@end smallexample
This, too, is specific to individual languages, and in some cases
specific to individual compilers or machines. @xref{Support, ,
Supported languages}, for further details on specific languages.
@value{GDBN} provides some additional commands for controlling the range checker:
@kindex set check@r{, range}
@kindex set check range
@kindex show check range
@table @code
@item set check range auto
Set range checking on or off based on the current working language.
@xref{Support, ,Supported languages}, for the default settings for
each language.
@item set check range on
@itemx set check range off
Set range checking on or off, overriding the default setting for the
current working language. A warning is issued if the setting does not
match the language default. If a range error occurs and range checking is on,
then a message is printed and evaluation of the expression is aborted.
@item set check range warn
Output messages when the @value{GDBN} range checker detects a range error,
but attempt to evaluate the expression anyway. Evaluating the
expression may still be impossible for other reasons, such as accessing
memory that the process does not own (a typical example from many Unix
systems).
@item show range
Show the current setting of the range checker, and whether or not it is
being set automatically by @value{GDBN}.
@end table
@node Support
@section Supported languages
@value{GDBN} supports C, C@t{++}, Fortran, Java,
@c OBSOLETE Chill,
assembly, Ada, and Modula-2.
@c This is false ...
Some @value{GDBN} features may be used in expressions regardless of the
language you use: the @value{GDBN} @code{@@} and @code{::} operators,
and the @samp{@{type@}addr} construct (@pxref{Expressions,
,Expressions}) can be used with the constructs of any supported
language.
The following sections detail to what degree each source language is
supported by @value{GDBN}. These sections are not meant to be language
tutorials or references, but serve only as a reference guide to what the
@value{GDBN} expression parser accepts, and what input and output
formats should look like for different languages. There are many good
books written on each of these languages; please look to these for a
language reference or tutorial.
@menu
* C:: C and C@t{++}
* Modula-2:: Modula-2
@c OBSOLETE * Chill:: Chill
* Ada:: Ada
@end menu
@node C
@subsection C and C@t{++}
@cindex C and C@t{++}
@cindex expressions in C or C@t{++}
Since C and C@t{++} are so closely related, many features of @value{GDBN} apply
to both languages. Whenever this is the case, we discuss those languages
together.
@cindex C@t{++}
@cindex @code{g++}, @sc{gnu} C@t{++} compiler
@cindex @sc{gnu} C@t{++}
The C@t{++} debugging facilities are jointly implemented by the C@t{++}
compiler and @value{GDBN}. Therefore, to debug your C@t{++} code
effectively, you must compile your C@t{++} programs with a supported
C@t{++} compiler, such as @sc{gnu} @code{g++}, or the HP ANSI C@t{++}
compiler (@code{aCC}).
For best results when using @sc{gnu} C@t{++}, use the stabs debugging
format. You can select that format explicitly with the @code{g++}
command-line options @samp{-gstabs} or @samp{-gstabs+}. See
@ref{Debugging Options,,Options for Debugging Your Program or @sc{gnu}
CC, gcc.info, Using @sc{gnu} CC}, for more information.
@menu
* C Operators:: C and C@t{++} operators
* C Constants:: C and C@t{++} constants
* C plus plus expressions:: C@t{++} expressions
* C Defaults:: Default settings for C and C@t{++}
* C Checks:: C and C@t{++} type and range checks
* Debugging C:: @value{GDBN} and C
* Debugging C plus plus:: @value{GDBN} features for C@t{++}
@end menu
@node C Operators
@subsubsection C and C@t{++} operators
@cindex C and C@t{++} operators
Operators must be defined on values of specific types. For instance,
@code{+} is defined on numbers, but not on structures. Operators are
often defined on groups of types.
For the purposes of C and C@t{++}, the following definitions hold:
@itemize @bullet
@item
@emph{Integral types} include @code{int} with any of its storage-class
specifiers; @code{char}; @code{enum}; and, for C@t{++}, @code{bool}.
@item
@emph{Floating-point types} include @code{float}, @code{double}, and
@code{long double} (if supported by the target platform).
@item
@emph{Pointer types} include all types defined as @code{(@var{type} *)}.
@item
@emph{Scalar types} include all of the above.
@end itemize
@noindent
The following operators are supported. They are listed here
in order of increasing precedence:
@table @code
@item ,
The comma or sequencing operator. Expressions in a comma-separated list
are evaluated from left to right, with the result of the entire
expression being the last expression evaluated.
@item =
Assignment. The value of an assignment expression is the value
assigned. Defined on scalar types.
@item @var{op}=
Used in an expression of the form @w{@code{@var{a} @var{op}= @var{b}}},
and translated to @w{@code{@var{a} = @var{a op b}}}.
@w{@code{@var{op}=}} and @code{=} have the same precedence.
@var{op} is any one of the operators @code{|}, @code{^}, @code{&},
@code{<<}, @code{>>}, @code{+}, @code{-}, @code{*}, @code{/}, @code{%}.
@item ?:
The ternary operator. @code{@var{a} ? @var{b} : @var{c}} can be thought
of as: if @var{a} then @var{b} else @var{c}. @var{a} should be of an
integral type.
@item ||
Logical @sc{or}. Defined on integral types.
@item &&
Logical @sc{and}. Defined on integral types.
@item |
Bitwise @sc{or}. Defined on integral types.
@item ^
Bitwise exclusive-@sc{or}. Defined on integral types.
@item &
Bitwise @sc{and}. Defined on integral types.
@item ==@r{, }!=
Equality and inequality. Defined on scalar types. The value of these
expressions is 0 for false and non-zero for true.
@item <@r{, }>@r{, }<=@r{, }>=
Less than, greater than, less than or equal, greater than or equal.
Defined on scalar types. The value of these expressions is 0 for false
and non-zero for true.
@item <<@r{, }>>
left shift, and right shift. Defined on integral types.
@item @@
The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}).
@item +@r{, }-
Addition and subtraction. Defined on integral types, floating-point types and
pointer types.
@item *@r{, }/@r{, }%
Multiplication, division, and modulus. Multiplication and division are
defined on integral and floating-point types. Modulus is defined on
integral types.
@item ++@r{, }--
Increment and decrement. When appearing before a variable, the
operation is performed before the variable is used in an expression;
when appearing after it, the variable's value is used before the
operation takes place.
@item *
Pointer dereferencing. Defined on pointer types. Same precedence as
@code{++}.
@item &
Address operator. Defined on variables. Same precedence as @code{++}.
For debugging C@t{++}, @value{GDBN} implements a use of @samp{&} beyond what is
allowed in the C@t{++} language itself: you can use @samp{&(&@var{ref})}
(or, if you prefer, simply @samp{&&@var{ref}}) to examine the address
where a C@t{++} reference variable (declared with @samp{&@var{ref}}) is
stored.
@item -
Negative. Defined on integral and floating-point types. Same
precedence as @code{++}.
@item !
Logical negation. Defined on integral types. Same precedence as
@code{++}.
@item ~
Bitwise complement operator. Defined on integral types. Same precedence as
@code{++}.
@item .@r{, }->
Structure member, and pointer-to-structure member. For convenience,
@value{GDBN} regards the two as equivalent, choosing whether to dereference a
pointer based on the stored type information.
Defined on @code{struct} and @code{union} data.
@item .*@r{, }->*
Dereferences of pointers to members.
@item []
Array indexing. @code{@var{a}[@var{i}]} is defined as
@code{*(@var{a}+@var{i})}. Same precedence as @code{->}.
@item ()
Function parameter list. Same precedence as @code{->}.
@item ::
C@t{++} scope resolution operator. Defined on @code{struct}, @code{union},
and @code{class} types.
@item ::
Doubled colons also represent the @value{GDBN} scope operator
(@pxref{Expressions, ,Expressions}). Same precedence as @code{::},
above.
@end table
If an operator is redefined in the user code, @value{GDBN} usually
attempts to invoke the redefined version instead of using the operator's
predefined meaning.
@menu
* C Constants::
@end menu
@node C Constants
@subsubsection C and C@t{++} constants
@cindex C and C@t{++} constants
@value{GDBN} allows you to express the constants of C and C@t{++} in the
following ways:
@itemize @bullet
@item
Integer constants are a sequence of digits. Octal constants are
specified by a leading @samp{0} (i.e.@: zero), and hexadecimal constants
by a leading @samp{0x} or @samp{0X}. Constants may also end with a letter
@samp{l}, specifying that the constant should be treated as a
@code{long} value.
@item
Floating point constants are a sequence of digits, followed by a decimal
point, followed by a sequence of digits, and optionally followed by an
exponent. An exponent is of the form:
@samp{@w{e@r{[[}+@r{]|}-@r{]}@var{nnn}}}, where @var{nnn} is another
sequence of digits. The @samp{+} is optional for positive exponents.
A floating-point constant may also end with a letter @samp{f} or
@samp{F}, specifying that the constant should be treated as being of
the @code{float} (as opposed to the default @code{double}) type; or with
a letter @samp{l} or @samp{L}, which specifies a @code{long double}
constant.
@item
Enumerated constants consist of enumerated identifiers, or their
integral equivalents.
@item
Character constants are a single character surrounded by single quotes
(@code{'}), or a number---the ordinal value of the corresponding character
(usually its @sc{ascii} value). Within quotes, the single character may
be represented by a letter or by @dfn{escape sequences}, which are of
the form @samp{\@var{nnn}}, where @var{nnn} is the octal representation
of the character's ordinal value; or of the form @samp{\@var{x}}, where
@samp{@var{x}} is a predefined special character---for example,
@samp{\n} for newline.
@item
String constants are a sequence of character constants surrounded by
double quotes (@code{"}). Any valid character constant (as described
above) may appear. Double quotes within the string must be preceded by
a backslash, so for instance @samp{"a\"b'c"} is a string of five
characters.
@item
Pointer constants are an integral value. You can also write pointers
to constants using the C operator @samp{&}.
@item
Array constants are comma-separated lists surrounded by braces @samp{@{}
and @samp{@}}; for example, @samp{@{1,2,3@}} is a three-element array of
integers, @samp{@{@{1,2@}, @{3,4@}, @{5,6@}@}} is a three-by-two array,
and @samp{@{&"hi", &"there", &"fred"@}} is a three-element array of pointers.
@end itemize
@menu
* C plus plus expressions::
* C Defaults::
* C Checks::
* Debugging C::
@end menu
@node C plus plus expressions
@subsubsection C@t{++} expressions
@cindex expressions in C@t{++}
@value{GDBN} expression handling can interpret most C@t{++} expressions.
@cindex C@t{++} support, not in @sc{coff}
@cindex @sc{coff} versus C@t{++}
@cindex C@t{++} and object formats
@cindex object formats and C@t{++}
@cindex a.out and C@t{++}
@cindex @sc{ecoff} and C@t{++}
@cindex @sc{xcoff} and C@t{++}
@cindex @sc{elf}/stabs and C@t{++}
@cindex @sc{elf}/@sc{dwarf} and C@t{++}
@c FIXME!! GDB may eventually be able to debug C++ using DWARF; check
@c periodically whether this has happened...
@quotation
@emph{Warning:} @value{GDBN} can only debug C@t{++} code if you use the
proper compiler. Typically, C@t{++} debugging depends on the use of
additional debugging information in the symbol table, and thus requires
special support. In particular, if your compiler generates a.out, MIPS
@sc{ecoff}, RS/6000 @sc{xcoff}, or @sc{elf} with stabs extensions to the
symbol table, these facilities are all available. (With @sc{gnu} CC,
you can use the @samp{-gstabs} option to request stabs debugging
extensions explicitly.) Where the object code format is standard
@sc{coff} or @sc{dwarf} in @sc{elf}, on the other hand, most of the C@t{++}
support in @value{GDBN} does @emph{not} work.
@end quotation
@enumerate
@cindex member functions
@item
Member function calls are allowed; you can use expressions like
@smallexample
count = aml->GetOriginal(x, y)
@end smallexample
@vindex this@r{, inside C@t{++} member functions}
@cindex namespace in C@t{++}
@item
While a member function is active (in the selected stack frame), your
expressions have the same namespace available as the member function;
that is, @value{GDBN} allows implicit references to the class instance
pointer @code{this} following the same rules as C@t{++}.
@cindex call overloaded functions
@cindex overloaded functions, calling
@cindex type conversions in C@t{++}
@item
You can call overloaded functions; @value{GDBN} resolves the function
call to the right definition, with some restrictions. @value{GDBN} does not
perform overload resolution involving user-defined type conversions,
calls to constructors, or instantiations of templates that do not exist
in the program. It also cannot handle ellipsis argument lists or
default arguments.
It does perform integral conversions and promotions, floating-point
promotions, arithmetic conversions, pointer conversions, conversions of
class objects to base classes, and standard conversions such as those of
functions or arrays to pointers; it requires an exact match on the
number of function arguments.
Overload resolution is always performed, unless you have specified
@code{set overload-resolution off}. @xref{Debugging C plus plus,
,@value{GDBN} features for C@t{++}}.
You must specify @code{set overload-resolution off} in order to use an
explicit function signature to call an overloaded function, as in
@smallexample
p 'foo(char,int)'('x', 13)
@end smallexample
The @value{GDBN} command-completion facility can simplify this;
see @ref{Completion, ,Command completion}.
@cindex reference declarations
@item
@value{GDBN} understands variables declared as C@t{++} references; you can use
them in expressions just as you do in C@t{++} source---they are automatically
dereferenced.
In the parameter list shown when @value{GDBN} displays a frame, the values of
reference variables are not displayed (unlike other variables); this
avoids clutter, since references are often used for large structures.
The @emph{address} of a reference variable is always shown, unless
you have specified @samp{set print address off}.
@item
@value{GDBN} supports the C@t{++} name resolution operator @code{::}---your
expressions can use it just as expressions in your program do. Since
one scope may be defined in another, you can use @code{::} repeatedly if
necessary, for example in an expression like
@samp{@var{scope1}::@var{scope2}::@var{name}}. @value{GDBN} also allows
resolving name scope by reference to source files, in both C and C@t{++}
debugging (@pxref{Variables, ,Program variables}).
@end enumerate
In addition, when used with HP's C@t{++} compiler, @value{GDBN} supports
calling virtual functions correctly, printing out virtual bases of
objects, calling functions in a base subobject, casting objects, and
invoking user-defined operators.
@node C Defaults
@subsubsection C and C@t{++} defaults
@cindex C and C@t{++} defaults
If you allow @value{GDBN} to set type and range checking automatically, they
both default to @code{off} whenever the working language changes to
C or C@t{++}. This happens regardless of whether you or @value{GDBN}
selects the working language.
If you allow @value{GDBN} to set the language automatically, it
recognizes source files whose names end with @file{.c}, @file{.C}, or
@file{.cc}, etc, and when @value{GDBN} enters code compiled from one of
these files, it sets the working language to C or C@t{++}.
@xref{Automatically, ,Having @value{GDBN} infer the source language},
for further details.
@c Type checking is (a) primarily motivated by Modula-2, and (b)
@c unimplemented. If (b) changes, it might make sense to let this node
@c appear even if Mod-2 does not, but meanwhile ignore it. roland 16jul93.
@node C Checks
@subsubsection C and C@t{++} type and range checks
@cindex C and C@t{++} checks
By default, when @value{GDBN} parses C or C@t{++} expressions, type checking
is not used. However, if you turn type checking on, @value{GDBN}
considers two variables type equivalent if:
@itemize @bullet
@item
The two variables are structured and have the same structure, union, or
enumerated tag.
@item
The two variables have the same type name, or types that have been
declared equivalent through @code{typedef}.
@ignore
@c leaving this out because neither J Gilmore nor R Pesch understand it.
@c FIXME--beers?
@item
The two @code{struct}, @code{union}, or @code{enum} variables are
declared in the same declaration. (Note: this may not be true for all C
compilers.)
@end ignore
@end itemize
Range checking, if turned on, is done on mathematical operations. Array
indices are not checked, since they are often used to index a pointer
that is not itself an array.
@node Debugging C
@subsubsection @value{GDBN} and C
The @code{set print union} and @code{show print union} commands apply to
the @code{union} type. When set to @samp{on}, any @code{union} that is
inside a @code{struct} or @code{class} is also printed. Otherwise, it
appears as @samp{@{...@}}.
The @code{@@} operator aids in the debugging of dynamic arrays, formed
with pointers and a memory allocation function. @xref{Expressions,
,Expressions}.
@menu
* Debugging C plus plus::
@end menu
@node Debugging C plus plus
@subsubsection @value{GDBN} features for C@t{++}
@cindex commands for C@t{++}
Some @value{GDBN} commands are particularly useful with C@t{++}, and some are
designed specifically for use with C@t{++}. Here is a summary:
@table @code
@cindex break in overloaded functions
@item @r{breakpoint menus}
When you want a breakpoint in a function whose name is overloaded,
@value{GDBN} breakpoint menus help you specify which function definition
you want. @xref{Breakpoint Menus,,Breakpoint menus}.
@cindex overloading in C@t{++}
@item rbreak @var{regex}
Setting breakpoints using regular expressions is helpful for setting
breakpoints on overloaded functions that are not members of any special
classes.
@xref{Set Breaks, ,Setting breakpoints}.
@cindex C@t{++} exception handling
@item catch throw
@itemx catch catch
Debug C@t{++} exception handling using these commands. @xref{Set
Catchpoints, , Setting catchpoints}.
@cindex inheritance
@item ptype @var{typename}
Print inheritance relationships as well as other information for type
@var{typename}.
@xref{Symbols, ,Examining the Symbol Table}.
@cindex C@t{++} symbol display
@item set print demangle
@itemx show print demangle
@itemx set print asm-demangle
@itemx show print asm-demangle
Control whether C@t{++} symbols display in their source form, both when
displaying code as C@t{++} source and when displaying disassemblies.
@xref{Print Settings, ,Print settings}.
@item set print object
@itemx show print object
Choose whether to print derived (actual) or declared types of objects.
@xref{Print Settings, ,Print settings}.
@item set print vtbl
@itemx show print vtbl
Control the format for printing virtual function tables.
@xref{Print Settings, ,Print settings}.
(The @code{vtbl} commands do not work on programs compiled with the HP
ANSI C@t{++} compiler (@code{aCC}).)
@kindex set overload-resolution
@cindex overloaded functions, overload resolution
@item set overload-resolution on
Enable overload resolution for C@t{++} expression evaluation. The default
is on. For overloaded functions, @value{GDBN} evaluates the arguments
and searches for a function whose signature matches the argument types,
using the standard C@t{++} conversion rules (see @ref{C plus plus expressions, ,C@t{++}
expressions}, for details). If it cannot find a match, it emits a
message.
@item set overload-resolution off
Disable overload resolution for C@t{++} expression evaluation. For
overloaded functions that are not class member functions, @value{GDBN}
chooses the first function of the specified name that it finds in the
symbol table, whether or not its arguments are of the correct type. For
overloaded functions that are class member functions, @value{GDBN}
searches for a function whose signature @emph{exactly} matches the
argument types.
@item @r{Overloaded symbol names}
You can specify a particular definition of an overloaded symbol, using
the same notation that is used to declare such symbols in C@t{++}: type
@code{@var{symbol}(@var{types})} rather than just @var{symbol}. You can
also use the @value{GDBN} command-line word completion facilities to list the
available choices, or to finish the type list for you.
@xref{Completion,, Command completion}, for details on how to do this.
@end table
@node Modula-2
@subsection Modula-2
@cindex Modula-2, @value{GDBN} support
The extensions made to @value{GDBN} to support Modula-2 only support
output from the @sc{gnu} Modula-2 compiler (which is currently being
developed). Other Modula-2 compilers are not currently supported, and
attempting to debug executables produced by them is most likely
to give an error as @value{GDBN} reads in the executable's symbol
table.
@cindex expressions in Modula-2
@menu
* M2 Operators:: Built-in operators
* Built-In Func/Proc:: Built-in functions and procedures
* M2 Constants:: Modula-2 constants
* M2 Defaults:: Default settings for Modula-2
* Deviations:: Deviations from standard Modula-2
* M2 Checks:: Modula-2 type and range checks
* M2 Scope:: The scope operators @code{::} and @code{.}
* GDB/M2:: @value{GDBN} and Modula-2
@end menu
@node M2 Operators
@subsubsection Operators
@cindex Modula-2 operators
Operators must be defined on values of specific types. For instance,
@code{+} is defined on numbers, but not on structures. Operators are
often defined on groups of types. For the purposes of Modula-2, the
following definitions hold:
@itemize @bullet
@item
@emph{Integral types} consist of @code{INTEGER}, @code{CARDINAL}, and
their subranges.
@item
@emph{Character types} consist of @code{CHAR} and its subranges.
@item
@emph{Floating-point types} consist of @code{REAL}.
@item
@emph{Pointer types} consist of anything declared as @code{POINTER TO
@var{type}}.
@item
@emph{Scalar types} consist of all of the above.
@item
@emph{Set types} consist of @code{SET} and @code{BITSET} types.
@item
@emph{Boolean types} consist of @code{BOOLEAN}.
@end itemize
@noindent
The following operators are supported, and appear in order of
increasing precedence:
@table @code
@item ,
Function argument or array index separator.
@item :=
Assignment. The value of @var{var} @code{:=} @var{value} is
@var{value}.
@item <@r{, }>
Less than, greater than on integral, floating-point, or enumerated
types.
@item <=@r{, }>=
Less than or equal to, greater than or equal to
on integral, floating-point and enumerated types, or set inclusion on
set types. Same precedence as @code{<}.
@item =@r{, }<>@r{, }#
Equality and two ways of expressing inequality, valid on scalar types.
Same precedence as @code{<}. In @value{GDBN} scripts, only @code{<>} is
available for inequality, since @code{#} conflicts with the script
comment character.
@item IN
Set membership. Defined on set types and the types of their members.
Same precedence as @code{<}.
@item OR
Boolean disjunction. Defined on boolean types.
@item AND@r{, }&
Boolean conjunction. Defined on boolean types.
@item @@
The @value{GDBN} ``artificial array'' operator (@pxref{Expressions, ,Expressions}).
@item +@r{, }-
Addition and subtraction on integral and floating-point types, or union
and difference on set types.
@item *
Multiplication on integral and floating-point types, or set intersection
on set types.
@item /
Division on floating-point types, or symmetric set difference on set
types. Same precedence as @code{*}.
@item DIV@r{, }MOD
Integer division and remainder. Defined on integral types. Same
precedence as @code{*}.
@item -
Negative. Defined on @code{INTEGER} and @code{REAL} data.
@item ^
Pointer dereferencing. Defined on pointer types.
@item NOT
Boolean negation. Defined on boolean types. Same precedence as
@code{^}.
@item .
@code{RECORD} field selector. Defined on @code{RECORD} data. Same
precedence as @code{^}.
@item []
Array indexing. Defined on @code{ARRAY} data. Same precedence as @code{^}.
@item ()
Procedure argument list. Defined on @code{PROCEDURE} objects. Same precedence
as @code{^}.
@item ::@r{, }.
@value{GDBN} and Modula-2 scope operators.
@end table
@quotation
@emph{Warning:} Sets and their operations are not yet supported, so @value{GDBN}
treats the use of the operator @code{IN}, or the use of operators
@code{+}, @code{-}, @code{*}, @code{/}, @code{=}, , @code{<>}, @code{#},
@code{<=}, and @code{>=} on sets as an error.
@end quotation
@node Built-In Func/Proc
@subsubsection Built-in functions and procedures
@cindex Modula-2 built-ins
Modula-2 also makes available several built-in procedures and functions.
In describing these, the following metavariables are used:
@table @var
@item a
represents an @code{ARRAY} variable.
@item c
represents a @code{CHAR} constant or variable.
@item i
represents a variable or constant of integral type.
@item m
represents an identifier that belongs to a set. Generally used in the
same function with the metavariable @var{s}. The type of @var{s} should
be @code{SET OF @var{mtype}} (where @var{mtype} is the type of @var{m}).
@item n
represents a variable or constant of integral or floating-point type.
@item r
represents a variable or constant of floating-point type.
@item t
represents a type.
@item v
represents a variable.
@item x
represents a variable or constant of one of many types. See the
explanation of the function for details.
@end table
All Modula-2 built-in procedures also return a result, described below.
@table @code
@item ABS(@var{n})
Returns the absolute value of @var{n}.
@item CAP(@var{c})
If @var{c} is a lower case letter, it returns its upper case
equivalent, otherwise it returns its argument.
@item CHR(@var{i})
Returns the character whose ordinal value is @var{i}.
@item DEC(@var{v})
Decrements the value in the variable @var{v} by one. Returns the new value.
@item DEC(@var{v},@var{i})
Decrements the value in the variable @var{v} by @var{i}. Returns the
new value.
@item EXCL(@var{m},@var{s})
Removes the element @var{m} from the set @var{s}. Returns the new
set.
@item FLOAT(@var{i})
Returns the floating point equivalent of the integer @var{i}.
@item HIGH(@var{a})
Returns the index of the last member of @var{a}.
@item INC(@var{v})
Increments the value in the variable @var{v} by one. Returns the new value.
@item INC(@var{v},@var{i})
Increments the value in the variable @var{v} by @var{i}. Returns the
new value.
@item INCL(@var{m},@var{s})
Adds the element @var{m} to the set @var{s} if it is not already
there. Returns the new set.
@item MAX(@var{t})
Returns the maximum value of the type @var{t}.
@item MIN(@var{t})
Returns the minimum value of the type @var{t}.
@item ODD(@var{i})
Returns boolean TRUE if @var{i} is an odd number.
@item ORD(@var{x})
Returns the ordinal value of its argument. For example, the ordinal
value of a character is its @sc{ascii} value (on machines supporting the
@sc{ascii} character set). @var{x} must be of an ordered type, which include
integral, character and enumerated types.
@item SIZE(@var{x})
Returns the size of its argument. @var{x} can be a variable or a type.
@item TRUNC(@var{r})
Returns the integral part of @var{r}.
@item VAL(@var{t},@var{i})
Returns the member of the type @var{t} whose ordinal value is @var{i}.
@end table
@quotation
@emph{Warning:} Sets and their operations are not yet supported, so
@value{GDBN} treats the use of procedures @code{INCL} and @code{EXCL} as
an error.
@end quotation
@cindex Modula-2 constants
@node M2 Constants
@subsubsection Constants
@value{GDBN} allows you to express the constants of Modula-2 in the following
ways:
@itemize @bullet
@item
Integer constants are simply a sequence of digits. When used in an
expression, a constant is interpreted to be type-compatible with the
rest of the expression. Hexadecimal integers are specified by a
trailing @samp{H}, and octal integers by a trailing @samp{B}.
@item
Floating point constants appear as a sequence of digits, followed by a
decimal point and another sequence of digits. An optional exponent can
then be specified, in the form @samp{E@r{[}+@r{|}-@r{]}@var{nnn}}, where
@samp{@r{[}+@r{|}-@r{]}@var{nnn}} is the desired exponent. All of the
digits of the floating point constant must be valid decimal (base 10)
digits.
@item
Character constants consist of a single character enclosed by a pair of
like quotes, either single (@code{'}) or double (@code{"}). They may
also be expressed by their ordinal value (their @sc{ascii} value, usually)
followed by a @samp{C}.
@item
String constants consist of a sequence of characters enclosed by a
pair of like quotes, either single (@code{'}) or double (@code{"}).
Escape sequences in the style of C are also allowed. @xref{C
Constants, ,C and C@t{++} constants}, for a brief explanation of escape
sequences.
@item
Enumerated constants consist of an enumerated identifier.
@item
Boolean constants consist of the identifiers @code{TRUE} and
@code{FALSE}.
@item
Pointer constants consist of integral values only.
@item
Set constants are not yet supported.
@end itemize
@node M2 Defaults
@subsubsection Modula-2 defaults
@cindex Modula-2 defaults
If type and range checking are set automatically by @value{GDBN}, they
both default to @code{on} whenever the working language changes to
Modula-2. This happens regardless of whether you or @value{GDBN}
selected the working language.
If you allow @value{GDBN} to set the language automatically, then entering
code compiled from a file whose name ends with @file{.mod} sets the
working language to Modula-2. @xref{Automatically, ,Having @value{GDBN} set
the language automatically}, for further details.
@node Deviations
@subsubsection Deviations from standard Modula-2
@cindex Modula-2, deviations from
A few changes have been made to make Modula-2 programs easier to debug.
This is done primarily via loosening its type strictness:
@itemize @bullet
@item
Unlike in standard Modula-2, pointer constants can be formed by
integers. This allows you to modify pointer variables during
debugging. (In standard Modula-2, the actual address contained in a
pointer variable is hidden from you; it can only be modified
through direct assignment to another pointer variable or expression that
returned a pointer.)
@item
C escape sequences can be used in strings and characters to represent
non-printable characters. @value{GDBN} prints out strings with these
escape sequences embedded. Single non-printable characters are
printed using the @samp{CHR(@var{nnn})} format.
@item
The assignment operator (@code{:=}) returns the value of its right-hand
argument.
@item
All built-in procedures both modify @emph{and} return their argument.
@end itemize
@node M2 Checks
@subsubsection Modula-2 type and range checks
@cindex Modula-2 checks
@quotation
@emph{Warning:} in this release, @value{GDBN} does not yet perform type or
range checking.
@end quotation
@c FIXME remove warning when type/range checks added
@value{GDBN} considers two Modula-2 variables type equivalent if:
@itemize @bullet
@item
They are of types that have been declared equivalent via a @code{TYPE
@var{t1} = @var{t2}} statement
@item
They have been declared on the same line. (Note: This is true of the
@sc{gnu} Modula-2 compiler, but it may not be true of other compilers.)
@end itemize
As long as type checking is enabled, any attempt to combine variables
whose types are not equivalent is an error.
Range checking is done on all mathematical operations, assignment, array
index bounds, and all built-in functions and procedures.
@node M2 Scope
@subsubsection The scope operators @code{::} and @code{.}
@cindex scope
@cindex @code{.}, Modula-2 scope operator
@cindex colon, doubled as scope operator
@ifinfo
@vindex colon-colon@r{, in Modula-2}
@c Info cannot handle :: but TeX can.
@end ifinfo
@iftex
@vindex ::@r{, in Modula-2}
@end iftex
There are a few subtle differences between the Modula-2 scope operator
(@code{.}) and the @value{GDBN} scope operator (@code{::}). The two have
similar syntax:
@smallexample
@var{module} . @var{id}
@var{scope} :: @var{id}
@end smallexample
@noindent
where @var{scope} is the name of a module or a procedure,
@var{module} the name of a module, and @var{id} is any declared
identifier within your program, except another module.
Using the @code{::} operator makes @value{GDBN} search the scope
specified by @var{scope} for the identifier @var{id}. If it is not
found in the specified scope, then @value{GDBN} searches all scopes
enclosing the one specified by @var{scope}.
Using the @code{.} operator makes @value{GDBN} search the current scope for
the identifier specified by @var{id} that was imported from the
definition module specified by @var{module}. With this operator, it is
an error if the identifier @var{id} was not imported from definition
module @var{module}, or if @var{id} is not an identifier in
@var{module}.
@node GDB/M2
@subsubsection @value{GDBN} and Modula-2
Some @value{GDBN} commands have little use when debugging Modula-2 programs.
Five subcommands of @code{set print} and @code{show print} apply
specifically to C and C@t{++}: @samp{vtbl}, @samp{demangle},
@samp{asm-demangle}, @samp{object}, and @samp{union}. The first four
apply to C@t{++}, and the last to the C @code{union} type, which has no direct
analogue in Modula-2.
The @code{@@} operator (@pxref{Expressions, ,Expressions}), while available
with any language, is not useful with Modula-2. Its
intent is to aid the debugging of @dfn{dynamic arrays}, which cannot be
created in Modula-2 as they can in C or C@t{++}. However, because an
address can be specified by an integral constant, the construct
@samp{@{@var{type}@}@var{adrexp}} is still useful.
@cindex @code{#} in Modula-2
In @value{GDBN} scripts, the Modula-2 inequality operator @code{#} is
interpreted as the beginning of a comment. Use @code{<>} instead.
@c OBSOLETE @node Chill
@c OBSOLETE @subsection Chill
@c OBSOLETE
@c OBSOLETE The extensions made to @value{GDBN} to support Chill only support output
@c OBSOLETE from the @sc{gnu} Chill compiler. Other Chill compilers are not currently
@c OBSOLETE supported, and attempting to debug executables produced by them is most
@c OBSOLETE likely to give an error as @value{GDBN} reads in the executable's symbol
@c OBSOLETE table.
@c OBSOLETE
@c OBSOLETE @c This used to say "... following Chill related topics ...", but since
@c OBSOLETE @c menus are not shown in the printed manual, it would look awkward.
@c OBSOLETE This section covers the Chill related topics and the features
@c OBSOLETE of @value{GDBN} which support these topics.
@c OBSOLETE
@c OBSOLETE @menu
@c OBSOLETE * How modes are displayed:: How modes are displayed
@c OBSOLETE * Locations:: Locations and their accesses
@c OBSOLETE * Values and their Operations:: Values and their Operations
@c OBSOLETE * Chill type and range checks::
@c OBSOLETE * Chill defaults::
@c OBSOLETE @end menu
@c OBSOLETE
@c OBSOLETE @node How modes are displayed
@c OBSOLETE @subsubsection How modes are displayed
@c OBSOLETE
@c OBSOLETE The Chill Datatype- (Mode) support of @value{GDBN} is directly related
@c OBSOLETE with the functionality of the @sc{gnu} Chill compiler, and therefore deviates
@c OBSOLETE slightly from the standard specification of the Chill language. The
@c OBSOLETE provided modes are:
@c OBSOLETE
@c OBSOLETE @c FIXME: this @table's contents effectively disable @code by using @r
@c OBSOLETE @c on every @item. So why does it need @code?
@c OBSOLETE @table @code
@c OBSOLETE @item @r{@emph{Discrete modes:}}
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Integer Modes} which are predefined by @code{BYTE, UBYTE, INT,
@c OBSOLETE UINT, LONG, ULONG},
@c OBSOLETE @item
@c OBSOLETE @emph{Boolean Mode} which is predefined by @code{BOOL},
@c OBSOLETE @item
@c OBSOLETE @emph{Character Mode} which is predefined by @code{CHAR},
@c OBSOLETE @item
@c OBSOLETE @emph{Set Mode} which is displayed by the keyword @code{SET}.
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) ptype x
@c OBSOLETE type = SET (karli = 10, susi = 20, fritzi = 100)
@c OBSOLETE @end smallexample
@c OBSOLETE If the type is an unnumbered set the set element values are omitted.
@c OBSOLETE @item
@c OBSOLETE @emph{Range Mode} which is displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{type = <basemode>(<lower bound> : <upper bound>)}
@c OBSOLETE @end smallexample
@c OBSOLETE where @code{<lower bound>, <upper bound>} can be of any discrete literal
@c OBSOLETE expression (e.g. set element names).
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Powerset Mode:}}
@c OBSOLETE A Powerset Mode is displayed by the keyword @code{POWERSET} followed by
@c OBSOLETE the member mode of the powerset. The member mode can be any discrete mode.
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) ptype x
@c OBSOLETE type = POWERSET SET (egon, hugo, otto)
@c OBSOLETE @end smallexample
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Reference Modes:}}
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Bound Reference Mode} which is displayed by the keyword @code{REF}
@c OBSOLETE followed by the mode name to which the reference is bound.
@c OBSOLETE @item
@c OBSOLETE @emph{Free Reference Mode} which is displayed by the keyword @code{PTR}.
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Procedure mode}}
@c OBSOLETE The procedure mode is displayed by @code{type = PROC(<parameter list>)
@c OBSOLETE <return mode> EXCEPTIONS (<exception list>)}. The @code{<parameter
@c OBSOLETE list>} is a list of the parameter modes. @code{<return mode>} indicates
@c OBSOLETE the mode of the result of the procedure if any. The exceptionlist lists
@c OBSOLETE all possible exceptions which can be raised by the procedure.
@c OBSOLETE
@c OBSOLETE @ignore
@c OBSOLETE @item @r{@emph{Instance mode}}
@c OBSOLETE The instance mode is represented by a structure, which has a static
@c OBSOLETE type, and is therefore not really of interest.
@c OBSOLETE @end ignore
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Synchronization Modes:}}
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Event Mode} which is displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{EVENT (<event length>)}
@c OBSOLETE @end smallexample
@c OBSOLETE where @code{(<event length>)} is optional.
@c OBSOLETE @item
@c OBSOLETE @emph{Buffer Mode} which is displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{BUFFER (<buffer length>)<buffer element mode>}
@c OBSOLETE @end smallexample
@c OBSOLETE where @code{(<buffer length>)} is optional.
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Timing Modes:}}
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Duration Mode} which is predefined by @code{DURATION}
@c OBSOLETE @item
@c OBSOLETE @emph{Absolute Time Mode} which is predefined by @code{TIME}
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Real Modes:}}
@c OBSOLETE Real Modes are predefined with @code{REAL} and @code{LONG_REAL}.
@c OBSOLETE
@c OBSOLETE @item @r{@emph{String Modes:}}
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Character String Mode} which is displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{CHARS(<string length>)}
@c OBSOLETE @end smallexample
@c OBSOLETE followed by the keyword @code{VARYING} if the String Mode is a varying
@c OBSOLETE mode
@c OBSOLETE @item
@c OBSOLETE @emph{Bit String Mode} which is displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{BOOLS(<string
@c OBSOLETE length>)}
@c OBSOLETE @end smallexample
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Array Mode:}}
@c OBSOLETE The Array Mode is displayed by the keyword @code{ARRAY(<range>)}
@c OBSOLETE followed by the element mode (which may in turn be an array mode).
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) ptype x
@c OBSOLETE type = ARRAY (1:42)
@c OBSOLETE ARRAY (1:20)
@c OBSOLETE SET (karli = 10, susi = 20, fritzi = 100)
@c OBSOLETE @end smallexample
@c OBSOLETE
@c OBSOLETE @item @r{@emph{Structure Mode}}
@c OBSOLETE The Structure mode is displayed by the keyword @code{STRUCT(<field
@c OBSOLETE list>)}. The @code{<field list>} consists of names and modes of fields
@c OBSOLETE of the structure. Variant structures have the keyword @code{CASE <field>
@c OBSOLETE OF <variant fields> ESAC} in their field list. Since the current version
@c OBSOLETE of the GNU Chill compiler doesn't implement tag processing (no runtime
@c OBSOLETE checks of variant fields, and therefore no debugging info), the output
@c OBSOLETE always displays all variant fields.
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) ptype str
@c OBSOLETE type = STRUCT (
@c OBSOLETE as x,
@c OBSOLETE bs x,
@c OBSOLETE CASE bs OF
@c OBSOLETE (karli):
@c OBSOLETE cs a
@c OBSOLETE (ott):
@c OBSOLETE ds x
@c OBSOLETE ESAC
@c OBSOLETE )
@c OBSOLETE @end smallexample
@c OBSOLETE @end table
@c OBSOLETE
@c OBSOLETE @node Locations
@c OBSOLETE @subsubsection Locations and their accesses
@c OBSOLETE
@c OBSOLETE A location in Chill is an object which can contain values.
@c OBSOLETE
@c OBSOLETE A value of a location is generally accessed by the (declared) name of
@c OBSOLETE the location. The output conforms to the specification of values in
@c OBSOLETE Chill programs. How values are specified
@c OBSOLETE is the topic of the next section, @ref{Values and their Operations}.
@c OBSOLETE
@c OBSOLETE The pseudo-location @code{RESULT} (or @code{result}) can be used to
@c OBSOLETE display or change the result of a currently-active procedure:
@c OBSOLETE
@c OBSOLETE @smallexample
@c OBSOLETE set result := EXPR
@c OBSOLETE @end smallexample
@c OBSOLETE
@c OBSOLETE @noindent
@c OBSOLETE This does the same as the Chill action @code{RESULT EXPR} (which
@c OBSOLETE is not available in @value{GDBN}).
@c OBSOLETE
@c OBSOLETE Values of reference mode locations are printed by @code{PTR(<hex
@c OBSOLETE value>)} in case of a free reference mode, and by @code{(REF <reference
@c OBSOLETE mode>) (<hex-value>)} in case of a bound reference. @code{<hex value>}
@c OBSOLETE represents the address where the reference points to. To access the
@c OBSOLETE value of the location referenced by the pointer, use the dereference
@c OBSOLETE operator @samp{->}.
@c OBSOLETE
@c OBSOLETE Values of procedure mode locations are displayed by
@c OBSOLETE @smallexample
@c OBSOLETE @code{@{ PROC
@c OBSOLETE (<argument modes> ) <return mode> @} <address> <name of procedure
@c OBSOLETE location>}
@c OBSOLETE @end smallexample
@c OBSOLETE @code{<argument modes>} is a list of modes according to the parameter
@c OBSOLETE specification of the procedure and @code{<address>} shows the address of
@c OBSOLETE the entry point.
@c OBSOLETE
@c OBSOLETE @ignore
@c OBSOLETE Locations of instance modes are displayed just like a structure with two
@c OBSOLETE fields specifying the @emph{process type} and the @emph{copy number} of
@c OBSOLETE the investigated instance location@footnote{This comes from the current
@c OBSOLETE implementation of instances. They are implemented as a structure (no
@c OBSOLETE na). The output should be something like @code{[<name of the process>;
@c OBSOLETE <instance number>]}.}. The field names are @code{__proc_type} and
@c OBSOLETE @code{__proc_copy}.
@c OBSOLETE
@c OBSOLETE Locations of synchronization modes are displayed like a structure with
@c OBSOLETE the field name @code{__event_data} in case of a event mode location, and
@c OBSOLETE like a structure with the field @code{__buffer_data} in case of a buffer
@c OBSOLETE mode location (refer to previous paragraph).
@c OBSOLETE
@c OBSOLETE Structure Mode locations are printed by @code{[.<field name>: <value>,
@c OBSOLETE ...]}. The @code{<field name>} corresponds to the structure mode
@c OBSOLETE definition and the layout of @code{<value>} varies depending of the mode
@c OBSOLETE of the field. If the investigated structure mode location is of variant
@c OBSOLETE structure mode, the variant parts of the structure are enclosed in curled
@c OBSOLETE braces (@samp{@{@}}). Fields enclosed by @samp{@{,@}} are residing
@c OBSOLETE on the same memory location and represent the current values of the
@c OBSOLETE memory location in their specific modes. Since no tag processing is done
@c OBSOLETE all variants are displayed. A variant field is printed by
@c OBSOLETE @code{(<variant name>) = .<field name>: <value>}. (who implements the
@c OBSOLETE stuff ???)
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) print str1 $4 = [.as: 0, .bs: karli, .<TAG>: { (karli) =
@c OBSOLETE [.cs: []], (susi) = [.ds: susi]}]
@c OBSOLETE @end smallexample
@c OBSOLETE @end ignore
@c OBSOLETE
@c OBSOLETE Substructures of string mode-, array mode- or structure mode-values
@c OBSOLETE (e.g. array slices, fields of structure locations) are accessed using
@c OBSOLETE certain operations which are described in the next section, @ref{Values
@c OBSOLETE and their Operations}.
@c OBSOLETE
@c OBSOLETE A location value may be interpreted as having a different mode using the
@c OBSOLETE location conversion. This mode conversion is written as @code{<mode
@c OBSOLETE name>(<location>)}. The user has to consider that the sizes of the modes
@c OBSOLETE have to be equal otherwise an error occurs. Furthermore, no range
@c OBSOLETE checking of the location against the destination mode is performed, and
@c OBSOLETE therefore the result can be quite confusing.
@c OBSOLETE
@c OBSOLETE @smallexample
@c OBSOLETE (@value{GDBP}) print int (s(3 up 4)) XXX TO be filled in !! XXX
@c OBSOLETE @end smallexample
@c OBSOLETE
@c OBSOLETE @node Values and their Operations
@c OBSOLETE @subsubsection Values and their Operations
@c OBSOLETE
@c OBSOLETE Values are used to alter locations, to investigate complex structures in
@c OBSOLETE more detail or to filter relevant information out of a large amount of
@c OBSOLETE data. There are several (mode dependent) operations defined which enable
@c OBSOLETE such investigations. These operations are not only applicable to
@c OBSOLETE constant values but also to locations, which can become quite useful
@c OBSOLETE when debugging complex structures. During parsing the command line
@c OBSOLETE (e.g. evaluating an expression) @value{GDBN} treats location names as
@c OBSOLETE the values behind these locations.
@c OBSOLETE
@c OBSOLETE This section describes how values have to be specified and which
@c OBSOLETE operations are legal to be used with such values.
@c OBSOLETE
@c OBSOLETE @table @code
@c OBSOLETE @item Literal Values
@c OBSOLETE Literal values are specified in the same manner as in @sc{gnu} Chill programs.
@c OBSOLETE For detailed specification refer to the @sc{gnu} Chill implementation Manual
@c OBSOLETE chapter 1.5.
@c OBSOLETE @c FIXME: if the Chill Manual is a Texinfo documents, the above should
@c OBSOLETE @c be converted to a @ref.
@c OBSOLETE
@c OBSOLETE @ignore
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item
@c OBSOLETE @emph{Integer Literals} are specified in the same manner as in Chill
@c OBSOLETE programs (refer to the Chill Standard z200/88 chpt 5.2.4.2)
@c OBSOLETE @item
@c OBSOLETE @emph{Boolean Literals} are defined by @code{TRUE} and @code{FALSE}.
@c OBSOLETE @item
@c OBSOLETE @emph{Character Literals} are defined by @code{'<character>'}. (e.g.
@c OBSOLETE @code{'M'})
@c OBSOLETE @item
@c OBSOLETE @emph{Set Literals} are defined by a name which was specified in a set
@c OBSOLETE mode. The value delivered by a Set Literal is the set value. This is
@c OBSOLETE comparable to an enumeration in C/C@t{++} language.
@c OBSOLETE @item
@c OBSOLETE @emph{Emptiness Literal} is predefined by @code{NULL}. The value of the
@c OBSOLETE emptiness literal delivers either the empty reference value, the empty
@c OBSOLETE procedure value or the empty instance value.
@c OBSOLETE
@c OBSOLETE @item
@c OBSOLETE @emph{Character String Literals} are defined by a sequence of characters
@c OBSOLETE enclosed in single- or double quotes. If a single- or double quote has
@c OBSOLETE to be part of the string literal it has to be stuffed (specified twice).
@c OBSOLETE @item
@c OBSOLETE @emph{Bitstring Literals} are specified in the same manner as in Chill
@c OBSOLETE programs (refer z200/88 chpt 5.2.4.8).
@c OBSOLETE @item
@c OBSOLETE @emph{Floating point literals} are specified in the same manner as in
@c OBSOLETE (gnu-)Chill programs (refer @sc{gnu} Chill implementation Manual chapter 1.5).
@c OBSOLETE @end itemize
@c OBSOLETE @end ignore
@c OBSOLETE
@c OBSOLETE @item Tuple Values
@c OBSOLETE A tuple is specified by @code{<mode name>[<tuple>]}, where @code{<mode
@c OBSOLETE name>} can be omitted if the mode of the tuple is unambiguous. This
@c OBSOLETE unambiguity is derived from the context of a evaluated expression.
@c OBSOLETE @code{<tuple>} can be one of the following:
@c OBSOLETE
@c OBSOLETE @itemize @bullet
@c OBSOLETE @item @emph{Powerset Tuple}
@c OBSOLETE @item @emph{Array Tuple}
@c OBSOLETE @item @emph{Structure Tuple}
@c OBSOLETE Powerset tuples, array tuples and structure tuples are specified in the
@c OBSOLETE same manner as in Chill programs refer to z200/88 chpt 5.2.5.
@c OBSOLETE @end itemize
@c OBSOLETE
@c OBSOLETE @item String Element Value
@c OBSOLETE A string element value is specified by
@c OBSOLETE @smallexample
@c OBSOLETE @code{<string value>(<index>)}
@c OBSOLETE @end smallexample
@c OBSOLETE where @code{<index>} is a integer expression. It delivers a character
@c OBSOLETE value which is equivalent to the character indexed by @code{<index>} in
@c OBSOLETE the string.
@c OBSOLETE
@c OBSOLETE @item String Slice Value
@c OBSOLETE A string slice value is specified by @code{<string value>(<slice
@c OBSOLETE spec>)}, where @code{<slice spec>} can be either a range of integer
@c OBSOLETE expressions or specified by @code{<start expr> up <size>}.
@c OBSOLETE @code{<size>} denotes the number of elements which the slice contains.
@c OBSOLETE The delivered value is a string value, which is part of the specified
@c OBSOLETE string.
@c OBSOLETE
@c OBSOLETE @item Array Element Values
@c OBSOLETE An array element value is specified by @code{<array value>(<expr>)} and
@c OBSOLETE delivers a array element value of the mode of the specified array.
@c OBSOLETE
@c OBSOLETE @item Array Slice Values
@c OBSOLETE An array slice is specified by @code{<array value>(<slice spec>)}, where
@c OBSOLETE @code{<slice spec>} can be either a range specified by expressions or by
@c OBSOLETE @code{<start expr> up <size>}. @code{<size>} denotes the number of
@c OBSOLETE arrayelements the slice contains. The delivered value is an array value
@c OBSOLETE which is part of the specified array.
@c OBSOLETE
@c OBSOLETE @item Structure Field Values
@c OBSOLETE A structure field value is derived by @code{<structure value>.<field
@c OBSOLETE name>}, where @code{<field name>} indicates the name of a field specified
@c OBSOLETE in the mode definition of the structure. The mode of the delivered value
@c OBSOLETE corresponds to this mode definition in the structure definition.
@c OBSOLETE
@c OBSOLETE @item Procedure Call Value
@c OBSOLETE The procedure call value is derived from the return value of the
@c OBSOLETE procedure@footnote{If a procedure call is used for instance in an
@c OBSOLETE expression, then this procedure is called with all its side
@c OBSOLETE effects. This can lead to confusing results if used carelessly.}.
@c OBSOLETE
@c OBSOLETE Values of duration mode locations are represented by @code{ULONG} literals.
@c OBSOLETE
@c OBSOLETE Values of time mode locations appear as
@c OBSOLETE @smallexample
@c OBSOLETE @code{TIME(<secs>:<nsecs>)}
@c OBSOLETE @end smallexample
@c OBSOLETE
@c OBSOLETE
@c OBSOLETE @ignore
@c OBSOLETE This is not implemented yet:
@c OBSOLETE @item Built-in Value
@c OBSOLETE @noindent
@c OBSOLETE The following built in functions are provided:
@c OBSOLETE
@c OBSOLETE @table @code
@c OBSOLETE @item @code{ADDR()}
@c OBSOLETE @item @code{NUM()}
@c OBSOLETE @item @code{PRED()}
@c OBSOLETE @item @code{SUCC()}
@c OBSOLETE @item @code{ABS()}
@c OBSOLETE @item @code{CARD()}
@c OBSOLETE @item @code{MAX()}
@c OBSOLETE @item @code{MIN()}
@c OBSOLETE @item @code{SIZE()}
@c OBSOLETE @item @code{UPPER()}
@c OBSOLETE @item @code{LOWER()}
@c OBSOLETE @item @code{LENGTH()}
@c OBSOLETE @item @code{SIN()}
@c OBSOLETE @item @code{COS()}
@c OBSOLETE @item @code{TAN()}
@c OBSOLETE @item @code{ARCSIN()}
@c OBSOLETE @item @code{ARCCOS()}
@c OBSOLETE @item @code{ARCTAN()}
@c OBSOLETE @item @code{EXP()}
@c OBSOLETE @item @code{LN()}
@c OBSOLETE @item @code{LOG()}
@c OBSOLETE @item @code{SQRT()}
@c OBSOLETE @end table
@c OBSOLETE
@c OBSOLETE For a detailed description refer to the GNU Chill implementation manual
@c OBSOLETE chapter 1.6.
@c OBSOLETE @end ignore
@c OBSOLETE
@c OBSOLETE @item Zero-adic Operator Value
@c OBSOLETE The zero-adic operator value is derived from the instance value for the
@c OBSOLETE current active process.
@c OBSOLETE
@c OBSOLETE @item Expression Values
@c OBSOLETE The value delivered by an expression is the result of the evaluation of
@c OBSOLETE the specified expression. If there are error conditions (mode
@c OBSOLETE incompatibility, etc.) the evaluation of expressions is aborted with a
@c OBSOLETE corresponding error message. Expressions may be parenthesised which
@c OBSOLETE causes the evaluation of this expression before any other expression
@c OBSOLETE which uses the result of the parenthesised expression. The following
@c OBSOLETE operators are supported by @value{GDBN}:
@c OBSOLETE
@c OBSOLETE @table @code
@c OBSOLETE @item @code{OR, ORIF, XOR}
@c OBSOLETE @itemx @code{AND, ANDIF}
@c OBSOLETE @itemx @code{NOT}
@c OBSOLETE Logical operators defined over operands of boolean mode.
@c OBSOLETE
@c OBSOLETE @item @code{=, /=}
@c OBSOLETE Equality and inequality operators defined over all modes.
@c OBSOLETE
@c OBSOLETE @item @code{>, >=}
@c OBSOLETE @itemx @code{<, <=}
@c OBSOLETE Relational operators defined over predefined modes.
@c OBSOLETE
@c OBSOLETE @item @code{+, -}
@c OBSOLETE @itemx @code{*, /, MOD, REM}
@c OBSOLETE Arithmetic operators defined over predefined modes.
@c OBSOLETE
@c OBSOLETE @item @code{-}
@c OBSOLETE Change sign operator.
@c OBSOLETE
@c OBSOLETE @item @code{//}
@c OBSOLETE String concatenation operator.
@c OBSOLETE
@c OBSOLETE @item @code{()}
@c OBSOLETE String repetition operator.
@c OBSOLETE
@c OBSOLETE @item @code{->}
@c OBSOLETE Referenced location operator which can be used either to take the
@c OBSOLETE address of a location (@code{->loc}), or to dereference a reference
@c OBSOLETE location (@code{loc->}).
@c OBSOLETE
@c OBSOLETE @item @code{OR, XOR}
@c OBSOLETE @itemx @code{AND}
@c OBSOLETE @itemx @code{NOT}
@c OBSOLETE Powerset and bitstring operators.
@c OBSOLETE
@c OBSOLETE @item @code{>, >=}
@c OBSOLETE @itemx @code{<, <=}
@c OBSOLETE Powerset inclusion operators.
@c OBSOLETE
@c OBSOLETE @item @code{IN}
@c OBSOLETE Membership operator.
@c OBSOLETE @end table
@c OBSOLETE @end table
@c OBSOLETE
@c OBSOLETE @node Chill type and range checks
@c OBSOLETE @subsubsection Chill type and range checks
@c OBSOLETE
@c OBSOLETE @value{GDBN} considers two Chill variables mode equivalent if the sizes
@c OBSOLETE of the two modes are equal. This rule applies recursively to more
@c OBSOLETE complex datatypes which means that complex modes are treated
@c OBSOLETE equivalent if all element modes (which also can be complex modes like
@c OBSOLETE structures, arrays, etc.) have the same size.
@c OBSOLETE
@c OBSOLETE Range checking is done on all mathematical operations, assignment, array
@c OBSOLETE index bounds and all built in procedures.
@c OBSOLETE
@c OBSOLETE Strong type checks are forced using the @value{GDBN} command @code{set
@c OBSOLETE check strong}. This enforces strong type and range checks on all
@c OBSOLETE operations where Chill constructs are used (expressions, built in
@c OBSOLETE functions, etc.) in respect to the semantics as defined in the z.200
@c OBSOLETE language specification.
@c OBSOLETE
@c OBSOLETE All checks can be disabled by the @value{GDBN} command @code{set check
@c OBSOLETE off}.
@c OBSOLETE
@c OBSOLETE @ignore
@c OBSOLETE @c Deviations from the Chill Standard Z200/88
@c OBSOLETE see last paragraph ?
@c OBSOLETE @end ignore
@c OBSOLETE
@c OBSOLETE @node Chill defaults
@c OBSOLETE @subsubsection Chill defaults
@c OBSOLETE
@c OBSOLETE If type and range checking are set automatically by @value{GDBN}, they
@c OBSOLETE both default to @code{on} whenever the working language changes to
@c OBSOLETE Chill. This happens regardless of whether you or @value{GDBN}
@c OBSOLETE selected the working language.
@c OBSOLETE
@c OBSOLETE If you allow @value{GDBN} to set the language automatically, then entering
@c OBSOLETE code compiled from a file whose name ends with @file{.ch} sets the
@c OBSOLETE working language to Chill. @xref{Automatically, ,Having @value{GDBN} set
@c OBSOLETE the language automatically}, for further details.
@node Ada
@subsection Ada
@cindex Ada
The extensions made to @value{GDBN} for Ada only support
output from the @sc{gnu} Ada (GNAT) compiler.
Other Ada compilers are not currently supported, and
attempting to debug executables produced by them is most likely
to be difficult.
@cindex expressions in Ada
@menu
* Ada Mode Intro:: General remarks on the Ada syntax
and semantics supported by Ada mode
in @value{GDBN}
* Omissions from Ada:: Restrictions on the Ada expression syntax.
* Additions to Ada:: Extensions of the Ada expression syntax.
* Stopping at Main Program:: Executing to the beginning of the main program.
* Ada Exceptions:: Setting breakpoints on exception handlers.
* Ada Tasks:: Listing and setting breakpoints in tasks.
* Ada Generic Units:: Dealing with generic instantiations.
* Ada Set Commands:: New settable GDB parameters for Ada.
* Ada Glitches:: Known peculiarities of Ada mode.
@end menu
@node Ada Mode Intro
@subsubsection Introduction
@cindex Ada mode, general
The Ada mode of @value{GDBN} supports a fairly large subset of Ada expression
syntax, with some extensions.
The philosophy behind the design of this subset is
@itemize @bullet
@item
That @value{GDBN} should provide basic literals and access to operations for
arithmetic, dereferencing, field selection, indexing, and subprogram calls,
leaving more sophisticated computations to subprograms written into the
program (which therefore may be called from @value{GDBN}).
@item
That type safety and strict adherence to Ada language restrictions
are not particularly important to the @value{GDBN} user.
@item
That brevity is important to the @value{GDBN} user.
@end itemize
Thus, for brevity, the debugger acts as if there were
implicit @code{with} and @code{use} clauses in effect for all user-written
packages, making it unnecessary to fully qualify most names with
their packages, regardless of context. Where this causes ambiguity,
@value{GDBN} asks the user's intent.
The debugger will start in Ada mode if it detects an Ada main program.
As for other languages, it will enter Ada mode when stopped in a program that
was translated from an Ada source file.
While in Ada mode, you may use `@t{-}@t{-}' for comments. This is useful
mostly for documenting command files. The standard @value{GDBN} comment
(@code{#}) still works at the beginning of a line in Ada mode, but not in the
middle (to allow based literals).
The debugger supports limited overloading. Given a subprogram call in which
the function symbol has multiple definitions, it will use the number of
actual parameters and some information about their types to attempt to narrow
the set of definitions. It also makes very limited use of context, preferring
procedures to functions in the context of the @code{call} command, and
functions to procedures elsewhere.
@node Omissions from Ada
@subsubsection Omissions from Ada
@cindex Ada, omissions from
Here are the notable omissions from the subset:
@itemize @bullet
@item
Only a subset of the attributes are supported:
@itemize @minus
@item
@t{'First}, @t{'Last}, and @t{'Length}
on array objects (not on types and subtypes).
@item
@t{'Min} and @t{'Max}.
@item
@t{'Pos} and @t{'Val}.
@item
@t{'Tag}.
@item
@t{'Range} on array objects (not subtypes), but only as the right
operand of the membership (@code{in}) operator.
@item
@t{'Access}, @t{'Unchecked_Access}, and
@t{'Unrestricted_Access} (a GNAT extension).
@item
@t{'Address}.
@end itemize
@item
The names in
@code{Characters.Latin_1} are not available and
concatenation is not implemented. Thus, escape characters in strings are
not currently available.
@item
The component-by-component array operations (@b{and}, @b{or},
@b{xor}, @b{not}, and relational and equality tests) are not implemented.
@item
There are no record or array aggregates.
@item
Dispatching subprogram calls are not implemented.
@item
The overloading algorithm is much more limited (i.e., less selective)
than that of real Ada. It makes only limited use of the context in which a subexpression
appears to resolve its meaning, and it is much looser in its rules for allowing
type matches. As a result, some function calls will be ambiguous, and the user
will be asked to choose the proper resolution.
@item
The @b{new} operator is not implemented.
@item
Entry calls are not implemented.
@item
Aside from printing, arithmetic operations on the native VAX floating-point
formats are not supported.
@end itemize
@node Additions to Ada
@subsubsection Additions to Ada
@cindex Ada, deviations from
As it does for other languages, @value{GDBN} makes certain generic
extensions to Ada (@pxref{Expressions}):
@itemize @bullet
@item
If the expression @var{E} is a variable residing in memory
(typically a local variable or array element) and @var{N} is
a positive integer, then @code{@var{E}@@@var{N}} displays the values of
@var{E} and the @var{N}-1 adjacent variables following it in memory as an array.
In Ada, this operator is generally not necessary, since its prime use
is in displaying parts of an array, and slicing will usually do this in Ada.
However, there are occasional uses when debugging programs
in which certain debugging information has been optimized away.
@item
@code{@var{B}::@var{var}} means ``the variable named @var{var} that appears
in function or file @var{B}.'' When @var{B} is a file name, you must typically
surround it in single quotes.
@item
The expression @code{@{@var{type}@} @var{addr}} means ``the variable of type
@var{type} that appears at address @var{addr}.''
@item
A name starting with @code{$} is a convenience variable
(@pxref{Convenience Vars}) or a machine register (@pxref{Registers}).
@end itemize
In addition, GDB provides a few other shortcuts and outright additions specific
to Ada:
@itemize @bullet
@item
The assignment statement is allowed as an expression, returning
its right-hand operand as its value. Thus, you may enter
@example
set x := y + 3
print A(tmp := y + 1)
@end example
@item
The semicolon is allowed as an ``operator,'' returning as its value
the value of its right-hand operand.
This allows, for example,
complex conditional breaks:
@example
break f
condition 1 (report(i); k += 1; A(k) > 100)
@end example
@item
Rather than use catenation and symbolic character names to introduce special
characters into strings, one may instead use a special bracket notation,
which is also used to print strings. A sequence of characters of the form
@samp{["@var{XX}"]} within a string or character literal denotes the
(single) character whose numeric encoding is @var{XX} in hexadecimal. The
sequence of characters @samp{["""]} also denotes a single quotation mark
in strings. For example,
@example
"One line.["0a"]Next line.["0a"]"
@end example
Contains an ASCII newline character (Ada.Characters.Latin_1.LF) after each
period.
@item
The subtype used as a prefix for the attributes @t{'Pos}, @t{'Min}, and
@t{'Max} is optional (and is ignored in any case). For example, it is legal
to write
@example
print 'max(x, y)
@end example
@item
When printing arrays, @value{GDBN} uses positional notation when the
array has a lower bound of 1, and uses a modified named notation otherwise.
For example, a one-dimensional array of three integers with a lower bound of 3 might print as
@example
(3 => 10, 17, 1)
@end example
@noindent
That is, in contrast to valid Ada, only the first component has a @code{=>}
clause.
@item
You may abbreviate attributes in expressions with any unique,
multi-character subsequence of
their names (an exact match gets preference).
For example, you may use @code{a'len}, @code{a'gth}, or @code{a'lh}
in place of @code{a'length}.
@item
Since Ada is case-insensitive, the debugger normally maps identifiers you type
to lower case. The GNAT compiler uses upper-case characters for
some of its internal identifiers, which are normally of no interest to users.
For the rare occasions when you actually have to look at them,
enclose them in angle brackets to avoid the lower-case mapping.
For example,
@example
(gdb) print <JMPBUF_SAVE>[0]
@end example
@end itemize
@node Stopping at Main Program
@subsubsection Stopping at the Beginning
The main procedure in Ada has no fixed name, and attempts to break on
@code{main} will position you to an utterly unhelpful location, in general.
Therefore, Ada mode provides a convenient way to begin execution of the
program and to stop at the beginning.
@table @code
@item begin
Does the equivalent of setting a temporary breakpoint at the beginning of
the main procedure and then performing @code{run}. Since in general there is
package elaboration code that runs before the main procedure begins, it is
possible that the program will stop before reaching the main procedure.
However, the temporary breakpoint will remain to halt execution.
@end table
It is sometimes necessary to debug the program during elaboration.
In these cases, using the @code{begin} command would stop the
execution of your program too late, as the program would have already
completed the elaboration phase. As defined in the Ada Reference
Manual, the elaboration code is invoked from a procedure called
@code{adainit}. To start your program until the beginning of the
elaboration, simply use the following two commands:
@code{tbreak adainit} and @code{run}.
@node Ada Exceptions
@subsubsection Breaking on Ada Exceptions
@cindex Ada, exceptions
In Ada mode, you can set breakpoints that trip when your program raises
selected exceptions.
@table @code
@item break exception
Set a breakpoint that trips whenever (any task in the) program raises
any exception.
@item break exception @var{name}
Set a breakpoint that trips whenever (any task in the) program raises
the exception @var{name}.
@item break exception unhandled
Set a breakpoint that trips whenever (any task in the) program raises an
exception for which there is no handler.
At the moment,
depending on the implementation of exceptions used on your platform,
this may not have quite the desired effect. Other forms of
exception breaking stop the program at the point the exception is raised.
On Ada implementations that use setjmp and longjmp to implement exception
handling, however, unhandled exceptions are not detected until the
affected task's stack is completely unwound. Thus, you find out that a
task has terminated with an exception, but you aren't told where it was
raised.
@kindex info exceptions
@item info exceptions
@itemx info exceptions @var{regexp}
The @code{info exceptions} command permits the user to examine all defined
exceptions within Ada programs. With a regular expression, @var{regexp}, as
argument, prints out only those exceptions whose name matches @var{regexp}.
@end table
@node Ada Tasks
@subsubsection Extensions for Ada Tasks
@cindex Ada, tasking
Support for Ada tasks is analogous to that for threads (@pxref{Threads}).
When in Ada mode (that is, when the ``current language'' is Ada), @value{GDBN}
allows the following task-related commands:
@table @code
@kindex info tasks
@item info tasks
This command shows a list of current Ada tasks, as in the following example:
@smallexample
@iftex
@leftskip=0.5cm
@end iftex
(gdb) info tasks
ID TID P-ID Pri State Name
1 8088000 0 15 Child Activation Wait main_task
2 80a4000 1 15 Accept Statement b
3 809a800 1 15 Child Activation Wait a
* 4 80ae800 3 15 Running c
@end smallexample
@noindent
In this listing, the asterisk before the first task indicates it to be the
currently running task.
@table @asis
@item ID
Represents gdb's internal task number, used to refer to the task in conditional
breakpoints and task switching.
@item TID
The Ada @code{Task_ID}.
@item P-ID
The parent's task ID (gdb's internal task number).
@item Pri
The base priority of the task.
@item State
Current state of the task.
@itemize @bullet
@item
Unactivated: the task has been created but has not been activated.
It cannot be executing.
@item
Running: the task currently running.
@item
Runnable: the task is not blocked for any reason known to Ada.
(It may be waiting for a mutex, though.)
It is conceptually "executing" in normal mode.
@item
Terminated: the task is terminated, in the sense of ARM 9.3 (5).
Any dependents that were waiting on terminate
alternatives have been awakened and have terminated themselves.
@item
Child Activation Wait: the task is waiting for created tasks to complete
activation.
@item
Accept Statement: the task is waiting on an accept or selective wait statement.
@item
Waiting on entry call: the task is waiting on an entry call.
@item
Async Select Wait: the task is waiting to start the abortable part of an
asynchronous select statement.
@item
Delay Sleep: the task is waiting on a select statement with only a delay
alternative open.
@item
Child Termination Wait: the task is sleeping
having completed a master within itself,
and is waiting for the tasks dependent on that master to become
terminated or waiting on a terminate Phase.
@item
Wait Child in Term Alt: the task is sleeping
waiting for tasks on terminate alternatives to finish terminating.
@item
Accepting RV with @var{taskno}: the task is accepting a rendez-vous with the
task @var{taskno}
@end itemize
@item Name
Name of the task in the program.
@end table
@kindex info task @var{taskno}
@item info task @var{taskno}
This command shows detailled informations on the specified task, as in
the following example:
@smallexample
@iftex
@leftskip=0.5cm
@end iftex
(gdb) info tasks
ID TID P-ID Pri State Name
1 8077880 0 15 Child Activation Wait main_task
* 2 807c468 1 15 Running task_1
(gdb) info task 2
Ada Task: 0x807c468
Name: task_1
Thread: 0x807f378
Parent: 1 (main_task)
Base Priority: 15
State: Runnable
@end smallexample
@item task @var{taskno}
@kindex task @var{taskno}
@cindex task switching
This command is like the @code{thread @var{threadno}}
(@pxref{Thread Stops}). This command is not implemented
on all the targets. Currently supported targets are DEC Unix and Linux.
@smallexample
@iftex
@leftskip=0.5cm
@end iftex
(gdb) info tasks
ID TID P-ID Pri State Name
1 8077870 0 15 Child Activation Wait main_task
* 2 807c458 1 15 Running t
(gdb) task 1
[Switching to task 1]
#0 0x8067726 in pthread_cond_wait ()
(gdb) bt
#0 0x8067726 in pthread_cond_wait ()
#1 0x8056714 in system.os_interface.pthread_cond_wait ()
#2 0x805cb63 in system.task_primitives.operations.sleep ()
#3 0x806153e in system.tasking.stages.activate_tasks ()
#4 0x804aacc in un () at un.adb:5
#5 0x8049d56 in main (argc=1, argv=3221223804, envp=3221223812)
at b~un.adb:163
@end smallexample
@item break @var{linespec} task @var{taskno}
@itemx break @var{linespec} task @var{taskno} if @dots{}
@cindex breakpoints and tasks
@cindex task breakpoints
@kindex break @dots{} task @var{taskno}
These commands are like the @code{break @dots{} thread @dots{}}
(@pxref{Thread Stops}).
@var{linespec} specifies source lines, as described
in @ref{Set Breaks,,Setting breakpoints}.
Use the qualifier @samp{task @var{taskno}} with a breakpoint command
to specify that you only want @value{GDBN} to stop the program when a
particular Ada task reaches this breakpoint. @var{taskno} is one of the
numeric task identifiers assigned by @value{GDBN}, shown in the first
column of the @samp{info tasks} display.
If you do not specify @samp{task @var{taskno}} when you set a
breakpoint, the breakpoint applies to @emph{all} tasks of your
program.
You can use the @code{task} qualifier on conditional breakpoints as
well; in this case, place @samp{task @var{taskno}} before the
breakpoint condition (before the @code{if}).
For example,
@smallexample
@iftex
@leftskip=0.5cm
@end iftex
(gdb) info tasks
ID TID P-ID Pri State Name
1 140022020 0 15 Child Activation Wait main_task
2 140045060 1 15 Accept/Select Wait t2
3 140044840 1 15 Runnable t1
* 4 140056040 1 15 Running t3
(gdb) b 15 task 2
Breakpoint 5 at 0x120044cb0: file test_task_debug.adb, line 15.
(gdb) cont
Continuing.
task # 1 running
task # 2 running
Breakpoint 5, test_task_debug.tB.1 (_task=0x11ffffc60)
at test_task_debug.adb:15
15 flush;
(gdb) info tasks
ID TID P-ID Pri State Name
1 140022020 0 15 Child Activation Wait main_task
* 2 140045060 1 15 Running t2
3 140044840 1 15 Runnable t1
4 140056040 1 15 Delay Sleep t3
@end smallexample
@end table
@node Ada Generic Units
@subsubsection Debugging Generic Units
@cindex Ada, generic units
GNAT always uses code expansion for generic instantiation. This means that
each time an instantiation occurs, a complete copy of the original code is
made with appropriate substitutions.
It is not possible to refer to the original generic entities themselves
in GDB (there is no code to refer to), but it
is certainly possible to debug a particular instance of a generic, simply by
using the appropriate expanded names. For example, suppose that
@code{Gen} is a generic package:
@smallexample
-- In file gen.ads:
generic package Gen is
function F (v1 : Integer) return Integer;
end Gen;
-- In file gen.adb:
package body Gen is
function F (v1 : Integer) return Integer is
begin
return v1+1; -- Line 5
end F;
end Gen;
@end smallexample
@noindent
and we have the following expansions
@smallexample
with Gen;
procedure G is
package Gen1 is new Gen;
package Gen2 is new Gen;
I : Integer := 0;
begin
I := Gen1.F (I);
I := Gen2.F (I);
I := Gen1.F (I);
I := Gen2.F (I);
end;
@end smallexample
@noindent
Then to break on a call to procedure @code{F} in the @code{Gen2} instance, simply
use the command:
@example
break G.Gen2.F
@end example
@noindent
To break at a particular line in a particular generic instance, say the return
statement in @code{G.Gen2}, append the line specification to the file and
function name:
@example
break gen.adb:G.Gen2.F:5
@end example
@noindent
To break on this line line in @emph{all} instances of @code{Gen}, use `@code{*}'
as the function name:
@example
break gen.adb:*:5
@end example
@noindent
This will set individual breakpoints at all instances; they are independent of
each other and you may remove, conditionalize, or otherwise modify them
individually.
When a breakpoint occurs, you can step through the code of the generic
instance in the normal manner. You can also examine values of data in the
normal manner, providing the appropriate generic package qualification to
refer to non-local entities.
@node Ada Set Commands
@subsubsection Set commands for Ada
Ada introduces one new @code{set} command.
@table @code
@kindex set varsize-limit
@item set varsize-limit @var{size}
Limit the size of the types of objects to @var{size} bytes
when those sizes are computed from run-time quantities.
When this limit is set to 0, there is no
limit. By default, it is about 65K. The purpose of having such a limit is
to prevent @value{GDBN} from trying to grab enormous chunks of virtual
memory when asked to evaluate a quantity whose bounds have been corrupted
or have not yet been fully initialized.
The limit applies to the results
of some subexpressions as well as to complete expressions. For example, an
expression denoting a simple integer component, such as @code{x.y.z}, may
fail if the size of @var{x.y} is dynamic and exceeds @var{size}.
On the other hand, @value{GDBN} is sometimes clever;
the expression @code{A(i)}, where @var{A} is an
array variable with non-constant size, will generally succeed regardless of the
bounds on @var{A}, as long as the component size is less than @var{size}.
@kindex show varsize-limit
@item show varsize-limit
Show the limit on types whose size is determined by run-time quantities.
@end table
@node Ada Glitches
@subsubsection Known Peculiarities of Ada Mode
@cindex Ada, problems
Besides the omissions listed previously (@pxref{Omissions from Ada}),
we know of several problems with and limitations of Ada mode in @value{GDBN},
some of which will be fixed with planned future releases of the debugger
and the GNU Ada compiler.
@itemize @bullet
@item
Currently, the debugger
has insufficient information to determine whether certain pointers represent
pointers to objects or the objects themselves.
Thus, the user may have to tack an extra @b{.all} after an expression
to get it printed properly.
@item
Static constants that the compiler chooses not to materialize as objects in
storage are invisible to the debugger.
@item
Named parameter associations in function argument lists are ignored (the
argument lists are treated as positional).
@item
Many useful library packages are currently invisible to the debugger.
@item
Fixed-point arithmetic, conversions, input, and output is carried out using
floating-point arithmetic, and may give results that only approximate those on
the host machine.
@item
The type of the @t{'Address} attribute may not be @t{System.Address}.
@item
When stopped in a particular subprogram, you can access variables defined
in other, lexically
enclosing subprograms by their simple names. At the moment, however, this
may not always work; it depends on whether the compiler happens to have
made the necessary information (the ``static link'') available
at execution time, which it can sometimes avoid. Of course,
even in those cases where
the compiler does not provide the information, you can still look at such
variables by issuing the appropriate number of @code{up} commands to get to
frame containing the variable you wish to see.
Access to non-local variables does not, at the moment, work in
the test expressions for conditional breakpoints
(@pxref{Conditions, ,Break conditions}) unless you happen to specify these
while stopped in the subprogram in which they are to be applied.
@item
Depending on the platform, it is not always possible to set breakpoints
on nested functions by name (e.g., @code{break foo}). In effect, the
nested functions act like local variables of the enclosing function.
On these platforms, you must wait until @value{GDBN} is stopped in
the enclosing function before using this form of @code{break} command.
This is not much of a limitation, since you can still set a breakpoint on
the first line of the desired function using the usual
@code{break @var{file}:@var{line}} syntax.
@end itemize
@node Symbols
@chapter Examining the Symbol Table
The commands described in this chapter allow you to inquire about the
symbols (names of variables, functions and types) defined in your
program. This information is inherent in the text of your program and
does not change as your program executes. @value{GDBN} finds it in your
program's symbol table, in the file indicated when you started @value{GDBN}
(@pxref{File Options, ,Choosing files}), or by one of the
file-management commands (@pxref{Files, ,Commands to specify files}).
@cindex symbol names
@cindex names of symbols
@cindex quoting names
Occasionally, you may need to refer to symbols that contain unusual
characters, which @value{GDBN} ordinarily treats as word delimiters. The
most frequent case is in referring to static variables in other
source files (@pxref{Variables,,Program variables}). File names
are recorded in object files as debugging symbols, but @value{GDBN} would
ordinarily parse a typical file name, like @file{foo.c}, as the three words
@samp{foo} @samp{.} @samp{c}. To allow @value{GDBN} to recognize
@samp{foo.c} as a single symbol, enclose it in single quotes; for example,
@smallexample
p 'foo.c'::x
@end smallexample
@noindent
looks up the value of @code{x} in the scope of the file @file{foo.c}.
@table @code
@kindex info address
@cindex address of a symbol
@item info address @var{symbol}
Describe where the data for @var{symbol} is stored. For a register
variable, this says which register it is kept in. For a non-register
local variable, this prints the stack-frame offset at which the variable
is always stored.
Note the contrast with @samp{print &@var{symbol}}, which does not work
at all for a register variable, and for a stack local variable prints
the exact address of the current instantiation of the variable.
@kindex info symbol
@cindex symbol from address
@item info symbol @var{addr}
Print the name of a symbol which is stored at the address @var{addr}.
If no symbol is stored exactly at @var{addr}, @value{GDBN} prints the
nearest symbol and an offset from it:
@smallexample
(@value{GDBP}) info symbol 0x54320
_initialize_vx + 396 in section .text
@end smallexample
@noindent
This is the opposite of the @code{info address} command. You can use
it to find out the name of a variable or a function given its address.
@kindex whatis
@item whatis @var{expr}
Print the data type of expression @var{expr}. @var{expr} is not
actually evaluated, and any side-effecting operations (such as
assignments or function calls) inside it do not take place.
@xref{Expressions, ,Expressions}.
@item whatis
Print the data type of @code{$}, the last value in the value history.
@kindex ptype
@item ptype @var{typename}
Print a description of data type @var{typename}. @var{typename} may be
the name of a type, or for C code it may have the form @samp{class
@var{class-name}}, @samp{struct @var{struct-tag}}, @samp{union
@var{union-tag}} or @samp{enum @var{enum-tag}}.
@item ptype @var{expr}
@itemx ptype
Print a description of the type of expression @var{expr}. @code{ptype}
differs from @code{whatis} by printing a detailed description, instead
of just the name of the type.
For example, for this variable declaration:
@smallexample
struct complex @{double real; double imag;@} v;
@end smallexample
@noindent
the two commands give this output:
@smallexample
@group
(@value{GDBP}) whatis v
type = struct complex
(@value{GDBP}) ptype v
type = struct complex @{
double real;
double imag;
@}
@end group
@end smallexample
@noindent
As with @code{whatis}, using @code{ptype} without an argument refers to
the type of @code{$}, the last value in the value history.
@kindex info types
@item info types @var{regexp}
@itemx info types
Print a brief description of all types whose names match @var{regexp}
(or all types in your program, if you supply no argument). Each
complete typename is matched as though it were a complete line; thus,
@samp{i type value} gives information on all types in your program whose
names include the string @code{value}, but @samp{i type ^value$} gives
information only on types whose complete name is @code{value}.
This command differs from @code{ptype} in two ways: first, like
@code{whatis}, it does not print a detailed description; second, it
lists all source files where a type is defined.
@kindex info scope
@cindex local variables
@item info scope @var{addr}
List all the variables local to a particular scope. This command
accepts a location---a function name, a source line, or an address
preceded by a @samp{*}, and prints all the variables local to the
scope defined by that location. For example:
@smallexample
(@value{GDBP}) @b{info scope command_line_handler}
Scope for command_line_handler:
Symbol rl is an argument at stack/frame offset 8, length 4.
Symbol linebuffer is in static storage at address 0x150a18, length 4.
Symbol linelength is in static storage at address 0x150a1c, length 4.
Symbol p is a local variable in register $esi, length 4.
Symbol p1 is a local variable in register $ebx, length 4.
Symbol nline is a local variable in register $edx, length 4.
Symbol repeat is a local variable at frame offset -8, length 4.
@end smallexample
@noindent
This command is especially useful for determining what data to collect
during a @dfn{trace experiment}, see @ref{Tracepoint Actions,
collect}.
@kindex info source
@item info source
Show information about the current source file---that is, the source file for
the function containing the current point of execution:
@itemize @bullet
@item
the name of the source file, and the directory containing it,
@item
the directory it was compiled in,
@item
its length, in lines,
@item
which programming language it is written in,
@item
whether the executable includes debugging information for that file, and
if so, what format the information is in (e.g., STABS, Dwarf 2, etc.), and
@item
whether the debugging information includes information about
preprocessor macros.
@end itemize
@kindex info sources
@item info sources
Print the names of all source files in your program for which there is
debugging information, organized into two lists: files whose symbols
have already been read, and files whose symbols will be read when needed.
@kindex info functions
@item info functions
Print the names and data types of all defined functions.
@item info functions @var{regexp}
Print the names and data types of all defined functions
whose names contain a match for regular expression @var{regexp}.
Thus, @samp{info fun step} finds all functions whose names
include @code{step}; @samp{info fun ^step} finds those whose names
start with @code{step}. If a function name contains characters
that conflict with the regular expression language (eg.
@samp{operator*()}), they may be quoted with a backslash.
@kindex info variables
@item info variables
Print the names and data types of all variables that are declared
outside of functions (i.e.@: excluding local variables).
@item info variables @var{regexp}
Print the names and data types of all variables (except for local
variables) whose names contain a match for regular expression
@var{regexp}.
@ignore
This was never implemented.
@kindex info methods
@item info methods
@itemx info methods @var{regexp}
The @code{info methods} command permits the user to examine all defined
methods within C@t{++} program, or (with the @var{regexp} argument) a
specific set of methods found in the various C@t{++} classes. Many
C@t{++} classes provide a large number of methods. Thus, the output
from the @code{ptype} command can be overwhelming and hard to use. The
@code{info-methods} command filters the methods, printing only those
which match the regular-expression @var{regexp}.
@end ignore
@cindex reloading symbols
Some systems allow individual object files that make up your program to
be replaced without stopping and restarting your program. For example,
in VxWorks you can simply recompile a defective object file and keep on
running. If you are running on one of these systems, you can allow
@value{GDBN} to reload the symbols for automatically relinked modules:
@table @code
@kindex set symbol-reloading
@item set symbol-reloading on
Replace symbol definitions for the corresponding source file when an
object file with a particular name is seen again.
@item set symbol-reloading off
Do not replace symbol definitions when encountering object files of the
same name more than once. This is the default state; if you are not
running on a system that permits automatic relinking of modules, you
should leave @code{symbol-reloading} off, since otherwise @value{GDBN}
may discard symbols when linking large programs, that may contain
several modules (from different directories or libraries) with the same
name.
@kindex show symbol-reloading
@item show symbol-reloading
Show the current @code{on} or @code{off} setting.
@end table
@kindex set opaque-type-resolution
@item set opaque-type-resolution on
Tell @value{GDBN} to resolve opaque types. An opaque type is a type
declared as a pointer to a @code{struct}, @code{class}, or
@code{union}---for example, @code{struct MyType *}---that is used in one
source file although the full declaration of @code{struct MyType} is in
another source file. The default is on.
A change in the setting of this subcommand will not take effect until
the next time symbols for a file are loaded.
@item set opaque-type-resolution off
Tell @value{GDBN} not to resolve opaque types. In this case, the type
is printed as follows:
@smallexample
@{<no data fields>@}
@end smallexample
@kindex show opaque-type-resolution
@item show opaque-type-resolution
Show whether opaque types are resolved or not.
@kindex maint print symbols
@cindex symbol dump
@kindex maint print psymbols
@cindex partial symbol dump
@item maint print symbols @var{filename}
@itemx maint print psymbols @var{filename}
@itemx maint print msymbols @var{filename}
Write a dump of debugging symbol data into the file @var{filename}.
These commands are used to debug the @value{GDBN} symbol-reading code. Only
symbols with debugging data are included. If you use @samp{maint print
symbols}, @value{GDBN} includes all the symbols for which it has already
collected full details: that is, @var{filename} reflects symbols for
only those files whose symbols @value{GDBN} has read. You can use the
command @code{info sources} to find out which files these are. If you
use @samp{maint print psymbols} instead, the dump shows information about
symbols that @value{GDBN} only knows partially---that is, symbols defined in
files that @value{GDBN} has skimmed, but not yet read completely. Finally,
@samp{maint print msymbols} dumps just the minimal symbol information
required for each object file from which @value{GDBN} has read some symbols.
@xref{Files, ,Commands to specify files}, for a discussion of how
@value{GDBN} reads symbols (in the description of @code{symbol-file}).
@end table
@node Altering
@chapter Altering Execution
Once you think you have found an error in your program, you might want to
find out for certain whether correcting the apparent error would lead to
correct results in the rest of the run. You can find the answer by
experiment, using the @value{GDBN} features for altering execution of the
program.
For example, you can store new values into variables or memory
locations, give your program a signal, restart it at a different
address, or even return prematurely from a function.
@menu
* Assignment:: Assignment to variables
* Jumping:: Continuing at a different address
* Signaling:: Giving your program a signal
* Returning:: Returning from a function
* Calling:: Calling your program's functions
* Patching:: Patching your program
@end menu
@node Assignment
@section Assignment to variables
@cindex assignment
@cindex setting variables
To alter the value of a variable, evaluate an assignment expression.
@xref{Expressions, ,Expressions}. For example,
@smallexample
print x=4
@end smallexample
@noindent
stores the value 4 into the variable @code{x}, and then prints the
value of the assignment expression (which is 4).
@xref{Languages, ,Using @value{GDBN} with Different Languages}, for more
information on operators in supported languages.
@kindex set variable
@cindex variables, setting
If you are not interested in seeing the value of the assignment, use the
@code{set} command instead of the @code{print} command. @code{set} is
really the same as @code{print} except that the expression's value is
not printed and is not put in the value history (@pxref{Value History,
,Value history}). The expression is evaluated only for its effects.
If the beginning of the argument string of the @code{set} command
appears identical to a @code{set} subcommand, use the @code{set
variable} command instead of just @code{set}. This command is identical
to @code{set} except for its lack of subcommands. For example, if your
program has a variable @code{width}, you get an error if you try to set
a new value with just @samp{set width=13}, because @value{GDBN} has the
command @code{set width}:
@smallexample
(@value{GDBP}) whatis width
type = double
(@value{GDBP}) p width
$4 = 13
(@value{GDBP}) set width=47
Invalid syntax in expression.
@end smallexample
@noindent
The invalid expression, of course, is @samp{=47}. In
order to actually set the program's variable @code{width}, use
@smallexample
(@value{GDBP}) set var width=47
@end smallexample
Because the @code{set} command has many subcommands that can conflict
with the names of program variables, it is a good idea to use the
@code{set variable} command instead of just @code{set}. For example, if
your program has a variable @code{g}, you run into problems if you try
to set a new value with just @samp{set g=4}, because @value{GDBN} has
the command @code{set gnutarget}, abbreviated @code{set g}:
@smallexample
@group
(@value{GDBP}) whatis g
type = double
(@value{GDBP}) p g
$1 = 1
(@value{GDBP}) set g=4
(@value{GDBP}) p g
$2 = 1
(@value{GDBP}) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/smith/cc_progs/a.out
"/home/smith/cc_progs/a.out": can't open to read symbols:
Invalid bfd target.
(@value{GDBP}) show g
The current BFD target is "=4".
@end group
@end smallexample
@noindent
The program variable @code{g} did not change, and you silently set the
@code{gnutarget} to an invalid value. In order to set the variable
@code{g}, use
@smallexample
(@value{GDBP}) set var g=4
@end smallexample
@value{GDBN} allows more implicit conversions in assignments than C; you can
freely store an integer value into a pointer variable or vice versa,
and you can convert any structure to any other structure that is the
same length or shorter.
@comment FIXME: how do structs align/pad in these conversions?
@comment /doc@cygnus.com 18dec1990
To store values into arbitrary places in memory, use the @samp{@{@dots{}@}}
construct to generate a value of specified type at a specified address
(@pxref{Expressions, ,Expressions}). For example, @code{@{int@}0x83040} refers
to memory location @code{0x83040} as an integer (which implies a certain size
and representation in memory), and
@smallexample
set @{int@}0x83040 = 4
@end smallexample
@noindent
stores the value 4 into that memory location.
@node Jumping
@section Continuing at a different address
Ordinarily, when you continue your program, you do so at the place where
it stopped, with the @code{continue} command. You can instead continue at
an address of your own choosing, with the following commands:
@table @code
@kindex jump
@item jump @var{linespec}
Resume execution at line @var{linespec}. Execution stops again
immediately if there is a breakpoint there. @xref{List, ,Printing
source lines}, for a description of the different forms of
@var{linespec}. It is common practice to use the @code{tbreak} command
in conjunction with @code{jump}. @xref{Set Breaks, ,Setting
breakpoints}.
The @code{jump} command does not change the current stack frame, or
the stack pointer, or the contents of any memory location or any
register other than the program counter. If line @var{linespec} is in
a different function from the one currently executing, the results may
be bizarre if the two functions expect different patterns of arguments or
of local variables. For this reason, the @code{jump} command requests
confirmation if the specified line is not in the function currently
executing. However, even bizarre results are predictable if you are
well acquainted with the machine-language code of your program.
@item jump *@var{address}
Resume execution at the instruction at address @var{address}.
@end table
@c Doesn't work on HP-UX; have to set $pcoqh and $pcoqt.
On many systems, you can get much the same effect as the @code{jump}
command by storing a new value into the register @code{$pc}. The
difference is that this does not start your program running; it only
changes the address of where it @emph{will} run when you continue. For
example,
@smallexample
set $pc = 0x485
@end smallexample
@noindent
makes the next @code{continue} command or stepping command execute at
address @code{0x485}, rather than at the address where your program stopped.
@xref{Continuing and Stepping, ,Continuing and stepping}.
The most common occasion to use the @code{jump} command is to back
up---perhaps with more breakpoints set---over a portion of a program
that has already executed, in order to examine its execution in more
detail.
@c @group
@node Signaling
@section Giving your program a signal
@table @code
@kindex signal
@item signal @var{signal}
Resume execution where your program stopped, but immediately give it the
signal @var{signal}. @var{signal} can be the name or the number of a
signal. For example, on many systems @code{signal 2} and @code{signal
SIGINT} are both ways of sending an interrupt signal.
Alternatively, if @var{signal} is zero, continue execution without
giving a signal. This is useful when your program stopped on account of
a signal and would ordinary see the signal when resumed with the
@code{continue} command; @samp{signal 0} causes it to resume without a
signal.
@code{signal} does not repeat when you press @key{RET} a second time
after executing the command.
@end table
@c @end group
Invoking the @code{signal} command is not the same as invoking the
@code{kill} utility from the shell. Sending a signal with @code{kill}
causes @value{GDBN} to decide what to do with the signal depending on
the signal handling tables (@pxref{Signals}). The @code{signal} command
passes the signal directly to your program.
@node Returning
@section Returning from a function
@table @code
@cindex returning from a function
@kindex return
@item return
@itemx return @var{expression}
You can cancel execution of a function call with the @code{return}
command. If you give an
@var{expression} argument, its value is used as the function's return
value.
@end table
When you use @code{return}, @value{GDBN} discards the selected stack frame
(and all frames within it). You can think of this as making the
discarded frame return prematurely. If you wish to specify a value to
be returned, give that value as the argument to @code{return}.
This pops the selected stack frame (@pxref{Selection, ,Selecting a
frame}), and any other frames inside of it, leaving its caller as the
innermost remaining frame. That frame becomes selected. The
specified value is stored in the registers used for returning values
of functions.
The @code{return} command does not resume execution; it leaves the
program stopped in the state that would exist if the function had just
returned. In contrast, the @code{finish} command (@pxref{Continuing
and Stepping, ,Continuing and stepping}) resumes execution until the
selected stack frame returns naturally.
@node Calling
@section Calling program functions
@cindex calling functions
@kindex call
@table @code
@item call @var{expr}
Evaluate the expression @var{expr} without displaying @code{void}
returned values.
@end table
You can use this variant of the @code{print} command if you want to
execute a function from your program, but without cluttering the output
with @code{void} returned values. If the result is not void, it
is printed and saved in the value history. The same restriction as for
@code{print} regarding calling nested functions also applies.
@node Patching
@section Patching programs
@cindex patching binaries
@cindex writing into executables
@cindex writing into corefiles
By default, @value{GDBN} opens the file containing your program's
executable code (or the corefile) read-only. This prevents accidental
alterations to machine code; but it also prevents you from intentionally
patching your program's binary.
If you'd like to be able to patch the binary, you can specify that
explicitly with the @code{set write} command. For example, you might
want to turn on internal debugging flags, or even to make emergency
repairs.
@table @code
@kindex set write
@item set write on
@itemx set write off
If you specify @samp{set write on}, @value{GDBN} opens executable and
core files for both reading and writing; if you specify @samp{set write
off} (the default), @value{GDBN} opens them read-only.
If you have already loaded a file, you must load it again (using the
@code{exec-file} or @code{core-file} command) after changing @code{set
write}, for your new setting to take effect.
@item show write
@kindex show write
Display whether executable files and core files are opened for writing
as well as reading.
@end table
@node GDB Files
@chapter @value{GDBN} Files
@value{GDBN} needs to know the file name of the program to be debugged,
both in order to read its symbol table and in order to start your
program. To debug a core dump of a previous run, you must also tell
@value{GDBN} the name of the core dump file.
@menu
* Files:: Commands to specify files
* Symbol Errors:: Errors reading symbol files
@end menu
@node Files
@section Commands to specify files
@cindex symbol table
@cindex core dump file
You may want to specify executable and core dump file names. The usual
way to do this is at start-up time, using the arguments to
@value{GDBN}'s start-up commands (@pxref{Invocation, , Getting In and
Out of @value{GDBN}}).
Occasionally it is necessary to change to a different file during a
@value{GDBN} session. Or you may run @value{GDBN} and forget to specify
a file you want to use. In these situations the @value{GDBN} commands
to specify new files are useful.
@table @code
@cindex executable file
@kindex file
@item file @var{filename}
Use @var{filename} as the program to be debugged. It is read for its
symbols and for the contents of pure memory. It is also the program
executed when you use the @code{run} command. If you do not specify a
directory and the file is not found in the @value{GDBN} working directory,
@value{GDBN} uses the environment variable @code{PATH} as a list of
directories to search, just as the shell does when looking for a program
to run. You can change the value of this variable, for both @value{GDBN}
and your program, using the @code{path} command.
On systems with memory-mapped files, an auxiliary file named
@file{@var{filename}.syms} may hold symbol table information for
@var{filename}. If so, @value{GDBN} maps in the symbol table from
@file{@var{filename}.syms}, starting up more quickly. See the
descriptions of the file options @samp{-mapped} and @samp{-readnow}
(available on the command line, and with the commands @code{file},
@code{symbol-file}, or @code{add-symbol-file}, described below),
for more information.
@item file
@code{file} with no argument makes @value{GDBN} discard any information it
has on both executable file and the symbol table.
@kindex exec-file
@item exec-file @r{[} @var{filename} @r{]}
Specify that the program to be run (but not the symbol table) is found
in @var{filename}. @value{GDBN} searches the environment variable @code{PATH}
if necessary to locate your program. Omitting @var{filename} means to
discard information on the executable file.
@kindex symbol-file
@item symbol-file @r{[} @var{filename} @r{]}
Read symbol table information from file @var{filename}. @code{PATH} is
searched when necessary. Use the @code{file} command to get both symbol
table and program to run from the same file.
@code{symbol-file} with no argument clears out @value{GDBN} information on your
program's symbol table.
The @code{symbol-file} command causes @value{GDBN} to forget the contents
of its convenience variables, the value history, and all breakpoints and
auto-display expressions. This is because they may contain pointers to
the internal data recording symbols and data types, which are part of
the old symbol table data being discarded inside @value{GDBN}.
@code{symbol-file} does not repeat if you press @key{RET} again after
executing it once.
When @value{GDBN} is configured for a particular environment, it
understands debugging information in whatever format is the standard
generated for that environment; you may use either a @sc{gnu} compiler, or
other compilers that adhere to the local conventions.
Best results are usually obtained from @sc{gnu} compilers; for example,
using @code{@value{GCC}} you can generate debugging information for
optimized code.
For most kinds of object files, with the exception of old SVR3 systems
using COFF, the @code{symbol-file} command does not normally read the
symbol table in full right away. Instead, it scans the symbol table
quickly to find which source files and which symbols are present. The
details are read later, one source file at a time, as they are needed.
The purpose of this two-stage reading strategy is to make @value{GDBN}
start up faster. For the most part, it is invisible except for
occasional pauses while the symbol table details for a particular source
file are being read. (The @code{set verbose} command can turn these
pauses into messages if desired. @xref{Messages/Warnings, ,Optional
warnings and messages}.)
We have not implemented the two-stage strategy for COFF yet. When the
symbol table is stored in COFF format, @code{symbol-file} reads the
symbol table data in full right away. Note that ``stabs-in-COFF''
still does the two-stage strategy, since the debug info is actually
in stabs format.
@kindex readnow
@cindex reading symbols immediately
@cindex symbols, reading immediately
@kindex mapped
@cindex memory-mapped symbol file
@cindex saving symbol table
@item symbol-file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
@itemx file @var{filename} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
You can override the @value{GDBN} two-stage strategy for reading symbol
tables by using the @samp{-readnow} option with any of the commands that
load symbol table information, if you want to be sure @value{GDBN} has the
entire symbol table available.
If memory-mapped files are available on your system through the
@code{mmap} system call, you can use another option, @samp{-mapped}, to
cause @value{GDBN} to write the symbols for your program into a reusable
file. Future @value{GDBN} debugging sessions map in symbol information
from this auxiliary symbol file (if the program has not changed), rather
than spending time reading the symbol table from the executable
program. Using the @samp{-mapped} option has the same effect as
starting @value{GDBN} with the @samp{-mapped} command-line option.
You can use both options together, to make sure the auxiliary symbol
file has all the symbol information for your program.
The auxiliary symbol file for a program called @var{myprog} is called
@samp{@var{myprog}.syms}. Once this file exists (so long as it is newer
than the corresponding executable), @value{GDBN} always attempts to use
it when you debug @var{myprog}; no special options or commands are
needed.
The @file{.syms} file is specific to the host machine where you run
@value{GDBN}. It holds an exact image of the internal @value{GDBN}
symbol table. It cannot be shared across multiple host platforms.
@c FIXME: for now no mention of directories, since this seems to be in
@c flux. 13mar1992 status is that in theory GDB would look either in
@c current dir or in same dir as myprog; but issues like competing
@c GDB's, or clutter in system dirs, mean that in practice right now
@c only current dir is used. FFish says maybe a special GDB hierarchy
@c (eg rooted in val of env var GDBSYMS) could exist for mappable symbol
@c files.
@kindex core
@kindex core-file
@item core-file @r{[} @var{filename} @r{]}
Specify the whereabouts of a core dump file to be used as the ``contents
of memory''. Traditionally, core files contain only some parts of the
address space of the process that generated them; @value{GDBN} can access the
executable file itself for other parts.
@code{core-file} with no argument specifies that no core file is
to be used.
Note that the core file is ignored when your program is actually running
under @value{GDBN}. So, if you have been running your program and you
wish to debug a core file instead, you must kill the subprocess in which
the program is running. To do this, use the @code{kill} command
(@pxref{Kill Process, ,Killing the child process}).
@kindex add-symbol-file
@cindex dynamic linking
@item add-symbol-file @var{filename} @var{address}
@itemx add-symbol-file @var{filename} @var{address} @r{[} -readnow @r{]} @r{[} -mapped @r{]}
@itemx add-symbol-file @var{filename} @r{-s}@var{section} @var{address} @dots{}
The @code{add-symbol-file} command reads additional symbol table
information from the file @var{filename}. You would use this command
when @var{filename} has been dynamically loaded (by some other means)
into the program that is running. @var{address} should be the memory
address at which the file has been loaded; @value{GDBN} cannot figure
this out for itself. You can additionally specify an arbitrary number
of @samp{@r{-s}@var{section} @var{address}} pairs, to give an explicit
section name and base address for that section. You can specify any
@var{address} as an expression.
The symbol table of the file @var{filename} is added to the symbol table
originally read with the @code{symbol-file} command. You can use the
@code{add-symbol-file} command any number of times; the new symbol data
thus read keeps adding to the old. To discard all old symbol data
instead, use the @code{symbol-file} command without any arguments.
@cindex relocatable object files, reading symbols from
@cindex object files, relocatable, reading symbols from
@cindex reading symbols from relocatable object files
@cindex symbols, reading from relocatable object files
@cindex @file{.o} files, reading symbols from
Although @var{filename} is typically a shared library file, an
executable file, or some other object file which has been fully
relocated for loading into a process, you can also load symbolic
information from relocatable @file{.o} files, as long as:
@itemize @bullet
@item
the file's symbolic information refers only to linker symbols defined in
that file, not to symbols defined by other object files,
@item
every section the file's symbolic information refers to has actually
been loaded into the inferior, as it appears in the file, and
@item
you can determine the address at which every section was loaded, and
provide these to the @code{add-symbol-file} command.
@end itemize
@noindent
Some embedded operating systems, like Sun Chorus and VxWorks, can load
relocatable files into an already running program; such systems
typically make the requirements above easy to meet. However, it's
important to recognize that many native systems use complex link
procedures (@code{.linkonce} section factoring and C++ constructor table
assembly, for example) that make the requirements difficult to meet. In
general, one cannot assume that using @code{add-symbol-file} to read a
relocatable object file's symbolic information will have the same effect
as linking the relocatable object file into the program in the normal
way.
@code{add-symbol-file} does not repeat if you press @key{RET} after using it.
You can use the @samp{-mapped} and @samp{-readnow} options just as with
the @code{symbol-file} command, to change how @value{GDBN} manages the symbol
table information for @var{filename}.
@kindex add-shared-symbol-file
@item add-shared-symbol-file
The @code{add-shared-symbol-file} command can be used only under Harris' CXUX
operating system for the Motorola 88k. @value{GDBN} automatically looks for
shared libraries, however if @value{GDBN} does not find yours, you can run
@code{add-shared-symbol-file}. It takes no arguments.
@kindex section
@item section
The @code{section} command changes the base address of section SECTION of
the exec file to ADDR. This can be used if the exec file does not contain
section addresses, (such as in the a.out format), or when the addresses
specified in the file itself are wrong. Each section must be changed
separately. The @code{info files} command, described below, lists all
the sections and their addresses.
@kindex info files
@kindex info target
@item info files
@itemx info target
@code{info files} and @code{info target} are synonymous; both print the
current target (@pxref{Targets, ,Specifying a Debugging Target}),
including the names of the executable and core dump files currently in
use by @value{GDBN}, and the files from which symbols were loaded. The
command @code{help target} lists all possible targets rather than
current ones.
@kindex maint info sections
@item maint info sections
Another command that can give you extra information about program sections
is @code{maint info sections}. In addition to the section information
displayed by @code{info files}, this command displays the flags and file
offset of each section in the executable and core dump files. In addition,
@code{maint info sections} provides the following command options (which
may be arbitrarily combined):
@table @code
@item ALLOBJ
Display sections for all loaded object files, including shared libraries.
@item @var{sections}
Display info only for named @var{sections}.
@item @var{section-flags}
Display info only for sections for which @var{section-flags} are true.
The section flags that @value{GDBN} currently knows about are:
@table @code
@item ALLOC
Section will have space allocated in the process when loaded.
Set for all sections except those containing debug information.
@item LOAD
Section will be loaded from the file into the child process memory.
Set for pre-initialized code and data, clear for @code{.bss} sections.
@item RELOC
Section needs to be relocated before loading.
@item READONLY
Section cannot be modified by the child process.
@item CODE
Section contains executable code only.
@item DATA
Section contains data only (no executable code).
@item ROM
Section will reside in ROM.
@item CONSTRUCTOR
Section contains data for constructor/destructor lists.
@item HAS_CONTENTS
Section is not empty.
@item NEVER_LOAD
An instruction to the linker to not output the section.
@item COFF_SHARED_LIBRARY
A notification to the linker that the section contains
COFF shared library information.
@item IS_COMMON
Section contains common symbols.
@end table
@end table
@kindex set trust-readonly-sections
@item set trust-readonly-sections on
Tell @value{GDBN} that readonly sections in your object file
really are read-only (i.e.@: that their contents will not change).
In that case, @value{GDBN} can fetch values from these sections
out of the object file, rather than from the target program.
For some targets (notably embedded ones), this can be a significant
enhancement to debugging performance.
The default is off.
@item set trust-readonly-sections off
Tell @value{GDBN} not to trust readonly sections. This means that
the contents of the section might change while the program is running,
and must therefore be fetched from the target when needed.
@end table
All file-specifying commands allow both absolute and relative file names
as arguments. @value{GDBN} always converts the file name to an absolute file
name and remembers it that way.
@cindex shared libraries
@value{GDBN} supports HP-UX, SunOS, SVr4, Irix 5, and IBM RS/6000 shared
libraries.
@value{GDBN} automatically loads symbol definitions from shared libraries
when you use the @code{run} command, or when you examine a core file.
(Before you issue the @code{run} command, @value{GDBN} does not understand
references to a function in a shared library, however---unless you are
debugging a core file).
On HP-UX, if the program loads a library explicitly, @value{GDBN}
automatically loads the symbols at the time of the @code{shl_load} call.
@c FIXME: some @value{GDBN} release may permit some refs to undef
@c FIXME...symbols---eg in a break cmd---assuming they are from a shared
@c FIXME...lib; check this from time to time when updating manual
There are times, however, when you may wish to not automatically load
symbol definitions from shared libraries, such as when they are
particularly large or there are many of them.
To control the automatic loading of shared library symbols, use the
commands:
@table @code
@kindex set auto-solib-add
@item set auto-solib-add @var{mode}
If @var{mode} is @code{on}, symbols from all shared object libraries
will be loaded automatically when the inferior begins execution, you
attach to an independently started inferior, or when the dynamic linker
informs @value{GDBN} that a new library has been loaded. If @var{mode}
is @code{off}, symbols must be loaded manually, using the
@code{sharedlibrary} command. The default value is @code{on}.
@kindex show auto-solib-add
@item show auto-solib-add
Display the current autoloading mode.
@end table
To explicitly load shared library symbols, use the @code{sharedlibrary}
command:
@table @code
@kindex info sharedlibrary
@kindex info share
@item info share
@itemx info sharedlibrary
Print the names of the shared libraries which are currently loaded.
@kindex sharedlibrary
@kindex share
@item sharedlibrary @var{regex}
@itemx share @var{regex}
Load shared object library symbols for files matching a
Unix regular expression.
As with files loaded automatically, it only loads shared libraries
required by your program for a core file or after typing @code{run}. If
@var{regex} is omitted all shared libraries required by your program are
loaded.
@end table
On some systems, such as HP-UX systems, @value{GDBN} supports
autoloading shared library symbols until a limiting threshold size is
reached. This provides the benefit of allowing autoloading to remain on
by default, but avoids autoloading excessively large shared libraries,
up to a threshold that is initially set, but which you can modify if you
wish.
Beyond that threshold, symbols from shared libraries must be explicitly
loaded. To load these symbols, use the command @code{sharedlibrary
@var{filename}}. The base address of the shared library is determined
automatically by @value{GDBN} and need not be specified.
To display or set the threshold, use the commands:
@table @code
@kindex set auto-solib-limit
@item set auto-solib-limit @var{threshold}
Set the autoloading size threshold, in an integral number of megabytes.
If @var{threshold} is nonzero and shared library autoloading is enabled,
symbols from all shared object libraries will be loaded until the total
size of the loaded shared library symbols exceeds this threshold.
Otherwise, symbols must be loaded manually, using the
@code{sharedlibrary} command. The default threshold is 100 (i.e.@: 100
Mb).
@kindex show auto-solib-limit
@item show auto-solib-limit
Display the current autoloading size threshold, in megabytes.
@end table
@node Symbol Errors
@section Errors reading symbol files
While reading a symbol file, @value{GDBN} occasionally encounters problems,
such as symbol types it does not recognize, or known bugs in compiler
output. By default, @value{GDBN} does not notify you of such problems, since
they are relatively common and primarily of interest to people
debugging compilers. If you are interested in seeing information
about ill-constructed symbol tables, you can either ask @value{GDBN} to print
only one message about each such type of problem, no matter how many
times the problem occurs; or you can ask @value{GDBN} to print more messages,
to see how many times the problems occur, with the @code{set
complaints} command (@pxref{Messages/Warnings, ,Optional warnings and
messages}).
The messages currently printed, and their meanings, include:
@table @code
@item inner block not inside outer block in @var{symbol}
The symbol information shows where symbol scopes begin and end
(such as at the start of a function or a block of statements). This
error indicates that an inner scope block is not fully contained
in its outer scope blocks.
@value{GDBN} circumvents the problem by treating the inner block as if it had
the same scope as the outer block. In the error message, @var{symbol}
may be shown as ``@code{(don't know)}'' if the outer block is not a
function.
@item block at @var{address} out of order
The symbol information for symbol scope blocks should occur in
order of increasing addresses. This error indicates that it does not
do so.
@value{GDBN} does not circumvent this problem, and has trouble
locating symbols in the source file whose symbols it is reading. (You
can often determine what source file is affected by specifying
@code{set verbose on}. @xref{Messages/Warnings, ,Optional warnings and
messages}.)
@item bad block start address patched
The symbol information for a symbol scope block has a start address
smaller than the address of the preceding source line. This is known
to occur in the SunOS 4.1.1 (and earlier) C compiler.
@value{GDBN} circumvents the problem by treating the symbol scope block as
starting on the previous source line.
@item bad string table offset in symbol @var{n}
@cindex foo
Symbol number @var{n} contains a pointer into the string table which is
larger than the size of the string table.
@value{GDBN} circumvents the problem by considering the symbol to have the
name @code{foo}, which may cause other problems if many symbols end up
with this name.
@item unknown symbol type @code{0x@var{nn}}
The symbol information contains new data types that @value{GDBN} does
not yet know how to read. @code{0x@var{nn}} is the symbol type of the
uncomprehended information, in hexadecimal.
@value{GDBN} circumvents the error by ignoring this symbol information.
This usually allows you to debug your program, though certain symbols
are not accessible. If you encounter such a problem and feel like
debugging it, you can debug @code{@value{GDBP}} with itself, breakpoint
on @code{complain}, then go up to the function @code{read_dbx_symtab}
and examine @code{*bufp} to see the symbol.
@item stub type has NULL name
@value{GDBN} could not find the full definition for a struct or class.
@item const/volatile indicator missing (ok if using g++ v1.x), got@dots{}
The symbol information for a C@t{++} member function is missing some
information that recent versions of the compiler should have output for
it.
@item info mismatch between compiler and debugger
@value{GDBN} could not parse a type specification output by the compiler.
@end table
@node Targets
@chapter Specifying a Debugging Target
@cindex debugging target
@kindex target
A @dfn{target} is the execution environment occupied by your program.
Often, @value{GDBN} runs in the same host environment as your program;
in that case, the debugging target is specified as a side effect when
you use the @code{file} or @code{core} commands. When you need more
flexibility---for example, running @value{GDBN} on a physically separate
host, or controlling a standalone system over a serial port or a
realtime system over a TCP/IP connection---you can use the @code{target}
command to specify one of the target types configured for @value{GDBN}
(@pxref{Target Commands, ,Commands for managing targets}).
@menu
* Active Targets:: Active targets
* Target Commands:: Commands for managing targets
* Byte Order:: Choosing target byte order
* Remote:: Remote debugging
* KOD:: Kernel Object Display
@end menu
@node Active Targets
@section Active targets
@cindex stacking targets
@cindex active targets
@cindex multiple targets
There are three classes of targets: processes, core files, and
executable files. @value{GDBN} can work concurrently on up to three
active targets, one in each class. This allows you to (for example)
start a process and inspect its activity without abandoning your work on
a core file.
For example, if you execute @samp{gdb a.out}, then the executable file
@code{a.out} is the only active target. If you designate a core file as
well---presumably from a prior run that crashed and coredumped---then
@value{GDBN} has two active targets and uses them in tandem, looking
first in the corefile target, then in the executable file, to satisfy
requests for memory addresses. (Typically, these two classes of target
are complementary, since core files contain only a program's
read-write memory---variables and so on---plus machine status, while
executable files contain only the program text and initialized data.)
When you type @code{run}, your executable file becomes an active process
target as well. When a process target is active, all @value{GDBN}
commands requesting memory addresses refer to that target; addresses in
an active core file or executable file target are obscured while the
process target is active.
Use the @code{core-file} and @code{exec-file} commands to select a new
core file or executable target (@pxref{Files, ,Commands to specify
files}). To specify as a target a process that is already running, use
the @code{attach} command (@pxref{Attach, ,Debugging an already-running
process}).
@node Target Commands
@section Commands for managing targets
@table @code
@item target @var{type} @var{parameters}
Connects the @value{GDBN} host environment to a target machine or
process. A target is typically a protocol for talking to debugging
facilities. You use the argument @var{type} to specify the type or
protocol of the target machine.
Further @var{parameters} are interpreted by the target protocol, but
typically include things like device names or host names to connect
with, process numbers, and baud rates.
The @code{target} command does not repeat if you press @key{RET} again
after executing the command.
@kindex help target
@item help target
Displays the names of all targets available. To display targets
currently selected, use either @code{info target} or @code{info files}
(@pxref{Files, ,Commands to specify files}).
@item help target @var{name}
Describe a particular target, including any parameters necessary to
select it.
@kindex set gnutarget
@item set gnutarget @var{args}
@value{GDBN} uses its own library BFD to read your files. @value{GDBN}
knows whether it is reading an @dfn{executable},
a @dfn{core}, or a @dfn{.o} file; however, you can specify the file format
with the @code{set gnutarget} command. Unlike most @code{target} commands,
with @code{gnutarget} the @code{target} refers to a program, not a machine.
@quotation
@emph{Warning:} To specify a file format with @code{set gnutarget},
you must know the actual BFD name.
@end quotation
@noindent
@xref{Files, , Commands to specify files}.
@kindex show gnutarget
@item show gnutarget
Use the @code{show gnutarget} command to display what file format
@code{gnutarget} is set to read. If you have not set @code{gnutarget},
@value{GDBN} will determine the file format for each file automatically,
and @code{show gnutarget} displays @samp{The current BDF target is "auto"}.
@end table
Here are some common targets (available, or not, depending on the GDB
configuration):
@table @code
@kindex target exec
@item target exec @var{program}
An executable file. @samp{target exec @var{program}} is the same as
@samp{exec-file @var{program}}.
@kindex target core
@item target core @var{filename}
A core dump file. @samp{target core @var{filename}} is the same as
@samp{core-file @var{filename}}.
@kindex target remote
@item target remote @var{dev}
Remote serial target in GDB-specific protocol. The argument @var{dev}
specifies what serial device to use for the connection (e.g.
@file{/dev/ttya}). @xref{Remote, ,Remote debugging}. @code{target remote}
supports the @code{load} command. This is only useful if you have
some other way of getting the stub to the target system, and you can put
it somewhere in memory where it won't get clobbered by the download.
@kindex target sim
@item target sim
Builtin CPU simulator. @value{GDBN} includes simulators for most architectures.
In general,
@smallexample
target sim
load
run
@end smallexample
@noindent
works; however, you cannot assume that a specific memory map, device
drivers, or even basic I/O is available, although some simulators do
provide these. For info about any processor-specific simulator details,
see the appropriate section in @ref{Embedded Processors, ,Embedded
Processors}.
@end table
Some configurations may include these targets as well:
@table @code
@kindex target nrom
@item target nrom @var{dev}
NetROM ROM emulator. This target only supports downloading.
@end table
Different targets are available on different configurations of @value{GDBN};
your configuration may have more or fewer targets.
Many remote targets require you to download the executable's code
once you've successfully established a connection.
@table @code
@kindex load @var{filename}
@item load @var{filename}
Depending on what remote debugging facilities are configured into
@value{GDBN}, the @code{load} command may be available. Where it exists, it
is meant to make @var{filename} (an executable) available for debugging
on the remote system---by downloading, or dynamic linking, for example.
@code{load} also records the @var{filename} symbol table in @value{GDBN}, like
the @code{add-symbol-file} command.
If your @value{GDBN} does not have a @code{load} command, attempting to
execute it gets the error message ``@code{You can't do that when your
target is @dots{}}''
The file is loaded at whatever address is specified in the executable.
For some object file formats, you can specify the load address when you
link the program; for other formats, like a.out, the object file format
specifies a fixed address.
@c FIXME! This would be a good place for an xref to the GNU linker doc.
@code{load} does not repeat if you press @key{RET} again after using it.
@end table
@node Byte Order
@section Choosing target byte order
@cindex choosing target byte order
@cindex target byte order
Some types of processors, such as the MIPS, PowerPC, and Hitachi SH,
offer the ability to run either big-endian or little-endian byte
orders. Usually the executable or symbol will include a bit to
designate the endian-ness, and you will not need to worry about
which to use. However, you may still find it useful to adjust
@value{GDBN}'s idea of processor endian-ness manually.
@table @code
@kindex set endian big
@item set endian big
Instruct @value{GDBN} to assume the target is big-endian.
@kindex set endian little
@item set endian little
Instruct @value{GDBN} to assume the target is little-endian.
@kindex set endian auto
@item set endian auto
Instruct @value{GDBN} to use the byte order associated with the
executable.
@item show endian
Display @value{GDBN}'s current idea of the target byte order.
@end table
Note that these commands merely adjust interpretation of symbolic
data on the host, and that they have absolutely no effect on the
target system.
@node Remote
@section Remote debugging
@cindex remote debugging
If you are trying to debug a program running on a machine that cannot run
@value{GDBN} in the usual way, it is often useful to use remote debugging.
For example, you might use remote debugging on an operating system kernel,
or on a small system which does not have a general purpose operating system
powerful enough to run a full-featured debugger.
Some configurations of @value{GDBN} have special serial or TCP/IP interfaces
to make this work with particular debugging targets. In addition,
@value{GDBN} comes with a generic serial protocol (specific to @value{GDBN},
but not specific to any particular target system) which you can use if you
write the remote stubs---the code that runs on the remote system to
communicate with @value{GDBN}.
Other remote targets may be available in your
configuration of @value{GDBN}; use @code{help target} to list them.
@node KOD
@section Kernel Object Display
@cindex kernel object display
@cindex kernel object
@cindex KOD
Some targets support kernel object display. Using this facility,
@value{GDBN} communicates specially with the underlying operating system
and can display information about operating system-level objects such as
mutexes and other synchronization objects. Exactly which objects can be
displayed is determined on a per-OS basis.
Use the @code{set os} command to set the operating system. This tells
@value{GDBN} which kernel object display module to initialize:
@smallexample
(@value{GDBP}) set os cisco
@end smallexample
If @code{set os} succeeds, @value{GDBN} will display some information
about the operating system, and will create a new @code{info} command
which can be used to query the target. The @code{info} command is named
after the operating system:
@smallexample
(@value{GDBP}) info cisco
List of Cisco Kernel Objects
Object Description
any Any and all objects
@end smallexample
Further subcommands can be used to query about particular objects known
by the kernel.
There is currently no way to determine whether a given operating system
is supported other than to try it.
@node Remote Debugging
@chapter Debugging remote programs
@menu
* Server:: Using the gdbserver program
* NetWare:: Using the gdbserve.nlm program
* remote stub:: Implementing a remote stub
@end menu
@node Server
@section Using the @code{gdbserver} program
@kindex gdbserver
@cindex remote connection without stubs
@code{gdbserver} is a control program for Unix-like systems, which
allows you to connect your program with a remote @value{GDBN} via
@code{target remote}---but without linking in the usual debugging stub.
@code{gdbserver} is not a complete replacement for the debugging stubs,
because it requires essentially the same operating-system facilities
that @value{GDBN} itself does. In fact, a system that can run
@code{gdbserver} to connect to a remote @value{GDBN} could also run
@value{GDBN} locally! @code{gdbserver} is sometimes useful nevertheless,
because it is a much smaller program than @value{GDBN} itself. It is
also easier to port than all of @value{GDBN}, so you may be able to get
started more quickly on a new system by using @code{gdbserver}.
Finally, if you develop code for real-time systems, you may find that
the tradeoffs involved in real-time operation make it more convenient to
do as much development work as possible on another system, for example
by cross-compiling. You can use @code{gdbserver} to make a similar
choice for debugging.
@value{GDBN} and @code{gdbserver} communicate via either a serial line
or a TCP connection, using the standard @value{GDBN} remote serial
protocol.
@table @emph
@item On the target machine,
you need to have a copy of the program you want to debug.
@code{gdbserver} does not need your program's symbol table, so you can
strip the program if necessary to save space. @value{GDBN} on the host
system does all the symbol handling.
To use the server, you must tell it how to communicate with @value{GDBN};
the name of your program; and the arguments for your program. The usual
syntax is:
@smallexample
target> gdbserver @var{comm} @var{program} [ @var{args} @dots{} ]
@end smallexample
@var{comm} is either a device name (to use a serial line) or a TCP
hostname and portnumber. For example, to debug Emacs with the argument
@samp{foo.txt} and communicate with @value{GDBN} over the serial port
@file{/dev/com1}:
@smallexample
target> gdbserver /dev/com1 emacs foo.txt
@end smallexample
@code{gdbserver} waits passively for the host @value{GDBN} to communicate
with it.
To use a TCP connection instead of a serial line:
@smallexample
target> gdbserver host:2345 emacs foo.txt
@end smallexample
The only difference from the previous example is the first argument,
specifying that you are communicating with the host @value{GDBN} via
TCP. The @samp{host:2345} argument means that @code{gdbserver} is to
expect a TCP connection from machine @samp{host} to local TCP port 2345.
(Currently, the @samp{host} part is ignored.) You can choose any number
you want for the port number as long as it does not conflict with any
TCP ports already in use on the target system (for example, @code{23} is
reserved for @code{telnet}).@footnote{If you choose a port number that
conflicts with another service, @code{gdbserver} prints an error message
and exits.} You must use the same port number with the host @value{GDBN}
@code{target remote} command.
On some targets, @code{gdbserver} can also attach to running programs.
This is accomplished via the @code{--attach} argument. The syntax is:
@smallexample
target> gdbserver @var{comm} --attach @var{pid}
@end smallexample
@var{pid} is the process ID of a currently running process. It isn't necessary
to point @code{gdbserver} at a binary for the running process.
@item On the @value{GDBN} host machine,
you need an unstripped copy of your program, since @value{GDBN} needs
symbols and debugging information. Start up @value{GDBN} as usual,
using the name of the local copy of your program as the first argument.
(You may also need the @w{@samp{--baud}} option if the serial line is
running at anything other than 9600@dmn{bps}.) After that, use @code{target
remote} to establish communications with @code{gdbserver}. Its argument
is either a device name (usually a serial device, like
@file{/dev/ttyb}), or a TCP port descriptor in the form
@code{@var{host}:@var{PORT}}. For example:
@smallexample
(@value{GDBP}) target remote /dev/ttyb
@end smallexample
@noindent
communicates with the server via serial line @file{/dev/ttyb}, and
@smallexample
(@value{GDBP}) target remote the-target:2345
@end smallexample
@noindent
communicates via a TCP connection to port 2345 on host @w{@file{the-target}}.
For TCP connections, you must start up @code{gdbserver} prior to using
the @code{target remote} command. Otherwise you may get an error whose
text depends on the host system, but which usually looks something like
@samp{Connection refused}.
@end table
@node NetWare
@section Using the @code{gdbserve.nlm} program
@kindex gdbserve.nlm
@code{gdbserve.nlm} is a control program for NetWare systems, which
allows you to connect your program with a remote @value{GDBN} via
@code{target remote}.
@value{GDBN} and @code{gdbserve.nlm} communicate via a serial line,
using the standard @value{GDBN} remote serial protocol.
@table @emph
@item On the target machine,
you need to have a copy of the program you want to debug.
@code{gdbserve.nlm} does not need your program's symbol table, so you
can strip the program if necessary to save space. @value{GDBN} on the
host system does all the symbol handling.
To use the server, you must tell it how to communicate with
@value{GDBN}; the name of your program; and the arguments for your
program. The syntax is:
@smallexample
load gdbserve [ BOARD=@var{board} ] [ PORT=@var{port} ]
[ BAUD=@var{baud} ] @var{program} [ @var{args} @dots{} ]
@end smallexample
@var{board} and @var{port} specify the serial line; @var{baud} specifies
the baud rate used by the connection. @var{port} and @var{node} default
to 0, @var{baud} defaults to 9600@dmn{bps}.
For example, to debug Emacs with the argument @samp{foo.txt}and
communicate with @value{GDBN} over serial port number 2 or board 1
using a 19200@dmn{bps} connection:
@smallexample
load gdbserve BOARD=1 PORT=2 BAUD=19200 emacs foo.txt
@end smallexample
@item On the @value{GDBN} host machine,
you need an unstripped copy of your program, since @value{GDBN} needs
symbols and debugging information. Start up @value{GDBN} as usual,
using the name of the local copy of your program as the first argument.
(You may also need the @w{@samp{--baud}} option if the serial line is
running at anything other than 9600@dmn{bps}. After that, use @code{target
remote} to establish communications with @code{gdbserve.nlm}. Its
argument is a device name (usually a serial device, like
@file{/dev/ttyb}). For example:
@smallexample
(@value{GDBP}) target remote /dev/ttyb
@end smallexample
@noindent
communications with the server via serial line @file{/dev/ttyb}.
@end table
@node remote stub
@section Implementing a remote stub
@cindex debugging stub, example
@cindex remote stub, example
@cindex stub example, remote debugging
The stub files provided with @value{GDBN} implement the target side of the
communication protocol, and the @value{GDBN} side is implemented in the
@value{GDBN} source file @file{remote.c}. Normally, you can simply allow
these subroutines to communicate, and ignore the details. (If you're
implementing your own stub file, you can still ignore the details: start
with one of the existing stub files. @file{sparc-stub.c} is the best
organized, and therefore the easiest to read.)
@cindex remote serial debugging, overview
To debug a program running on another machine (the debugging
@dfn{target} machine), you must first arrange for all the usual
prerequisites for the program to run by itself. For example, for a C
program, you need:
@enumerate
@item
A startup routine to set up the C runtime environment; these usually
have a name like @file{crt0}. The startup routine may be supplied by
your hardware supplier, or you may have to write your own.
@item
A C subroutine library to support your program's
subroutine calls, notably managing input and output.
@item
A way of getting your program to the other machine---for example, a
download program. These are often supplied by the hardware
manufacturer, but you may have to write your own from hardware
documentation.
@end enumerate
The next step is to arrange for your program to use a serial port to
communicate with the machine where @value{GDBN} is running (the @dfn{host}
machine). In general terms, the scheme looks like this:
@table @emph
@item On the host,
@value{GDBN} already understands how to use this protocol; when everything
else is set up, you can simply use the @samp{target remote} command
(@pxref{Targets,,Specifying a Debugging Target}).
@item On the target,
you must link with your program a few special-purpose subroutines that
implement the @value{GDBN} remote serial protocol. The file containing these
subroutines is called a @dfn{debugging stub}.
On certain remote targets, you can use an auxiliary program
@code{gdbserver} instead of linking a stub into your program.
@xref{Server,,Using the @code{gdbserver} program}, for details.
@end table
The debugging stub is specific to the architecture of the remote
machine; for example, use @file{sparc-stub.c} to debug programs on
@sc{sparc} boards.
@cindex remote serial stub list
These working remote stubs are distributed with @value{GDBN}:
@table @code
@item i386-stub.c
@cindex @file{i386-stub.c}
@cindex Intel
@cindex i386
For Intel 386 and compatible architectures.
@item m68k-stub.c
@cindex @file{m68k-stub.c}
@cindex Motorola 680x0
@cindex m680x0
For Motorola 680x0 architectures.
@item sh-stub.c
@cindex @file{sh-stub.c}
@cindex Hitachi
@cindex SH
For Hitachi SH architectures.
@item sparc-stub.c
@cindex @file{sparc-stub.c}
@cindex Sparc
For @sc{sparc} architectures.
@item sparcl-stub.c
@cindex @file{sparcl-stub.c}
@cindex Fujitsu
@cindex SparcLite
For Fujitsu @sc{sparclite} architectures.
@end table
The @file{README} file in the @value{GDBN} distribution may list other
recently added stubs.
@menu
* Stub Contents:: What the stub can do for you
* Bootstrapping:: What you must do for the stub
* Debug Session:: Putting it all together
@end menu
@node Stub Contents
@subsection What the stub can do for you
@cindex remote serial stub
The debugging stub for your architecture supplies these three
subroutines:
@table @code
@item set_debug_traps
@kindex set_debug_traps
@cindex remote serial stub, initialization
This routine arranges for @code{handle_exception} to run when your
program stops. You must call this subroutine explicitly near the
beginning of your program.
@item handle_exception
@kindex handle_exception
@cindex remote serial stub, main routine
This is the central workhorse, but your program never calls it
explicitly---the setup code arranges for @code{handle_exception} to
run when a trap is triggered.
@code{handle_exception} takes control when your program stops during
execution (for example, on a breakpoint), and mediates communications
with @value{GDBN} on the host machine. This is where the communications
protocol is implemented; @code{handle_exception} acts as the @value{GDBN}
representative on the target machine. It begins by sending summary
information on the state of your program, then continues to execute,
retrieving and transmitting any information @value{GDBN} needs, until you
execute a @value{GDBN} command that makes your program resume; at that point,
@code{handle_exception} returns control to your own code on the target
machine.
@item breakpoint
@cindex @code{breakpoint} subroutine, remote
Use this auxiliary subroutine to make your program contain a
breakpoint. Depending on the particular situation, this may be the only
way for @value{GDBN} to get control. For instance, if your target
machine has some sort of interrupt button, you won't need to call this;
pressing the interrupt button transfers control to
@code{handle_exception}---in effect, to @value{GDBN}. On some machines,
simply receiving characters on the serial port may also trigger a trap;
again, in that situation, you don't need to call @code{breakpoint} from
your own program---simply running @samp{target remote} from the host
@value{GDBN} session gets control.
Call @code{breakpoint} if none of these is true, or if you simply want
to make certain your program stops at a predetermined point for the
start of your debugging session.
@end table
@node Bootstrapping
@subsection What you must do for the stub
@cindex remote stub, support routines
The debugging stubs that come with @value{GDBN} are set up for a particular
chip architecture, but they have no information about the rest of your
debugging target machine.
First of all you need to tell the stub how to communicate with the
serial port.
@table @code
@item int getDebugChar()
@kindex getDebugChar
Write this subroutine to read a single character from the serial port.
It may be identical to @code{getchar} for your target system; a
different name is used to allow you to distinguish the two if you wish.
@item void putDebugChar(int)
@kindex putDebugChar
Write this subroutine to write a single character to the serial port.
It may be identical to @code{putchar} for your target system; a
different name is used to allow you to distinguish the two if you wish.
@end table
@cindex control C, and remote debugging
@cindex interrupting remote targets
If you want @value{GDBN} to be able to stop your program while it is
running, you need to use an interrupt-driven serial driver, and arrange
for it to stop when it receives a @code{^C} (@samp{\003}, the control-C
character). That is the character which @value{GDBN} uses to tell the
remote system to stop.
Getting the debugging target to return the proper status to @value{GDBN}
probably requires changes to the standard stub; one quick and dirty way
is to just execute a breakpoint instruction (the ``dirty'' part is that
@value{GDBN} reports a @code{SIGTRAP} instead of a @code{SIGINT}).
Other routines you need to supply are:
@table @code
@item void exceptionHandler (int @var{exception_number}, void *@var{exception_address})
@kindex exceptionHandler
Write this function to install @var{exception_address} in the exception
handling tables. You need to do this because the stub does not have any
way of knowing what the exception handling tables on your target system
are like (for example, the processor's table might be in @sc{rom},
containing entries which point to a table in @sc{ram}).
@var{exception_number} is the exception number which should be changed;
its meaning is architecture-dependent (for example, different numbers
might represent divide by zero, misaligned access, etc). When this
exception occurs, control should be transferred directly to
@var{exception_address}, and the processor state (stack, registers,
and so on) should be just as it is when a processor exception occurs. So if
you want to use a jump instruction to reach @var{exception_address}, it
should be a simple jump, not a jump to subroutine.
For the 386, @var{exception_address} should be installed as an interrupt
gate so that interrupts are masked while the handler runs. The gate
should be at privilege level 0 (the most privileged level). The
@sc{sparc} and 68k stubs are able to mask interrupts themselves without
help from @code{exceptionHandler}.
@item void flush_i_cache()
@kindex flush_i_cache
On @sc{sparc} and @sc{sparclite} only, write this subroutine to flush the
instruction cache, if any, on your target machine. If there is no
instruction cache, this subroutine may be a no-op.
On target machines that have instruction caches, @value{GDBN} requires this
function to make certain that the state of your program is stable.
@end table
@noindent
You must also make sure this library routine is available:
@table @code
@item void *memset(void *, int, int)
@kindex memset
This is the standard library function @code{memset} that sets an area of
memory to a known value. If you have one of the free versions of
@code{libc.a}, @code{memset} can be found there; otherwise, you must
either obtain it from your hardware manufacturer, or write your own.
@end table
If you do not use the GNU C compiler, you may need other standard
library subroutines as well; this varies from one stub to another,
but in general the stubs are likely to use any of the common library
subroutines which @code{@value{GCC}} generates as inline code.
@node Debug Session
@subsection Putting it all together
@cindex remote serial debugging summary
In summary, when your program is ready to debug, you must follow these
steps.
@enumerate
@item
Make sure you have defined the supporting low-level routines
(@pxref{Bootstrapping,,What you must do for the stub}):
@display
@code{getDebugChar}, @code{putDebugChar},
@code{flush_i_cache}, @code{memset}, @code{exceptionHandler}.
@end display
@item
Insert these lines near the top of your program:
@smallexample
set_debug_traps();
breakpoint();
@end smallexample
@item
For the 680x0 stub only, you need to provide a variable called
@code{exceptionHook}. Normally you just use:
@smallexample
void (*exceptionHook)() = 0;
@end smallexample
@noindent
but if before calling @code{set_debug_traps}, you set it to point to a
function in your program, that function is called when
@code{@value{GDBN}} continues after stopping on a trap (for example, bus
error). The function indicated by @code{exceptionHook} is called with
one parameter: an @code{int} which is the exception number.
@item
Compile and link together: your program, the @value{GDBN} debugging stub for
your target architecture, and the supporting subroutines.
@item
Make sure you have a serial connection between your target machine and
the @value{GDBN} host, and identify the serial port on the host.
@item
@c The "remote" target now provides a `load' command, so we should
@c document that. FIXME.
Download your program to your target machine (or get it there by
whatever means the manufacturer provides), and start it.
@item
To start remote debugging, run @value{GDBN} on the host machine, and specify
as an executable file the program that is running in the remote machine.
This tells @value{GDBN} how to find your program's symbols and the contents
of its pure text.
@item
@cindex serial line, @code{target remote}
Establish communication using the @code{target remote} command.
Its argument specifies how to communicate with the target
machine---either via a devicename attached to a direct serial line, or a
TCP or UDP port (usually to a terminal server which in turn has a serial line
to the target). For example, to use a serial line connected to the
device named @file{/dev/ttyb}:
@smallexample
target remote /dev/ttyb
@end smallexample
@cindex TCP port, @code{target remote}
To use a TCP connection, use an argument of the form
@code{@var{host}:@var{port}} or @code{tcp:@var{host}:@var{port}}.
For example, to connect to port 2828 on a
terminal server named @code{manyfarms}:
@smallexample
target remote manyfarms:2828
@end smallexample
If your remote target is actually running on the same machine as
your debugger session (e.g.@: a simulator of your target running on
the same host), you can omit the hostname. For example, to connect
to port 1234 on your local machine:
@smallexample
target remote :1234
@end smallexample
@noindent
Note that the colon is still required here.
@cindex UDP port, @code{target remote}
To use a UDP connection, use an argument of the form
@code{udp:@var{host}:@var{port}}. For example, to connect to UDP port 2828
on a terminal server named @code{manyfarms}:
@smallexample
target remote udp:manyfarms:2828
@end smallexample
When using a UDP connection for remote debugging, you should keep in mind
that the `U' stands for ``Unreliable''. UDP can silently drop packets on
busy or unreliable networks, which will cause havoc with your debugging
session.
@end enumerate
Now you can use all the usual commands to examine and change data and to
step and continue the remote program.
To resume the remote program and stop debugging it, use the @code{detach}
command.
@cindex interrupting remote programs
@cindex remote programs, interrupting
Whenever @value{GDBN} is waiting for the remote program, if you type the
interrupt character (often @key{C-C}), @value{GDBN} attempts to stop the
program. This may or may not succeed, depending in part on the hardware
and the serial drivers the remote system uses. If you type the
interrupt character once again, @value{GDBN} displays this prompt:
@smallexample
Interrupted while waiting for the program.
Give up (and stop debugging it)? (y or n)
@end smallexample
If you type @kbd{y}, @value{GDBN} abandons the remote debugging session.
(If you decide you want to try again later, you can use @samp{target
remote} again to connect once more.) If you type @kbd{n}, @value{GDBN}
goes back to waiting.
@node Configurations
@chapter Configuration-Specific Information
While nearly all @value{GDBN} commands are available for all native and
cross versions of the debugger, there are some exceptions. This chapter
describes things that are only available in certain configurations.
There are three major categories of configurations: native
configurations, where the host and target are the same, embedded
operating system configurations, which are usually the same for several
different processor architectures, and bare embedded processors, which
are quite different from each other.
@menu
* Native::
* Embedded OS::
* Embedded Processors::
* Architectures::
@end menu
@node Native
@section Native
This section describes details specific to particular native
configurations.
@menu
* HP-UX:: HP-UX
* SVR4 Process Information:: SVR4 process information
* DJGPP Native:: Features specific to the DJGPP port
* Cygwin Native:: Features specific to the Cygwin port
@end menu
@node HP-UX
@subsection HP-UX
On HP-UX systems, if you refer to a function or variable name that
begins with a dollar sign, @value{GDBN} searches for a user or system
name first, before it searches for a convenience variable.
@node SVR4 Process Information
@subsection SVR4 process information
@kindex /proc
@cindex process image
Many versions of SVR4 provide a facility called @samp{/proc} that can be
used to examine the image of a running process using file-system
subroutines. If @value{GDBN} is configured for an operating system with
this facility, the command @code{info proc} is available to report on
several kinds of information about the process running your program.
@code{info proc} works only on SVR4 systems that include the
@code{procfs} code. This includes OSF/1 (Digital Unix), Solaris, Irix,
and Unixware, but not HP-UX or @sc{gnu}/Linux, for example.
@table @code
@kindex info proc
@item info proc
Summarize available information about the process.
@kindex info proc mappings
@item info proc mappings
Report on the address ranges accessible in the program, with information
on whether your program may read, write, or execute each range.
@ignore
@comment These sub-options of 'info proc' were not included when
@comment procfs.c was re-written. Keep their descriptions around
@comment against the day when someone finds the time to put them back in.
@kindex info proc times
@item info proc times
Starting time, user CPU time, and system CPU time for your program and
its children.
@kindex info proc id
@item info proc id
Report on the process IDs related to your program: its own process ID,
the ID of its parent, the process group ID, and the session ID.
@kindex info proc status
@item info proc status
General information on the state of the process. If the process is
stopped, this report includes the reason for stopping, and any signal
received.
@item info proc all
Show all the above information about the process.
@end ignore
@end table
@node DJGPP Native
@subsection Features for Debugging @sc{djgpp} Programs
@cindex @sc{djgpp} debugging
@cindex native @sc{djgpp} debugging
@cindex MS-DOS-specific commands
@sc{djgpp} is the port of @sc{gnu} development tools to MS-DOS and
MS-Windows. @sc{djgpp} programs are 32-bit protected-mode programs
that use the @dfn{DPMI} (DOS Protected-Mode Interface) API to run on
top of real-mode DOS systems and their emulations.
@value{GDBN} supports native debugging of @sc{djgpp} programs, and
defines a few commands specific to the @sc{djgpp} port. This
subsection describes those commands.
@table @code
@kindex info dos
@item info dos
This is a prefix of @sc{djgpp}-specific commands which print
information about the target system and important OS structures.
@kindex sysinfo
@cindex MS-DOS system info
@cindex free memory information (MS-DOS)
@item info dos sysinfo
This command displays assorted information about the underlying
platform: the CPU type and features, the OS version and flavor, the
DPMI version, and the available conventional and DPMI memory.
@cindex GDT
@cindex LDT
@cindex IDT
@cindex segment descriptor tables
@cindex descriptor tables display
@item info dos gdt
@itemx info dos ldt
@itemx info dos idt
These 3 commands display entries from, respectively, Global, Local,
and Interrupt Descriptor Tables (GDT, LDT, and IDT). The descriptor
tables are data structures which store a descriptor for each segment
that is currently in use. The segment's selector is an index into a
descriptor table; the table entry for that index holds the
descriptor's base address and limit, and its attributes and access
rights.
A typical @sc{djgpp} program uses 3 segments: a code segment, a data
segment (used for both data and the stack), and a DOS segment (which
allows access to DOS/BIOS data structures and absolute addresses in
conventional memory). However, the DPMI host will usually define
additional segments in order to support the DPMI environment.
@cindex garbled pointers
These commands allow to display entries from the descriptor tables.
Without an argument, all entries from the specified table are
displayed. An argument, which should be an integer expression, means
display a single entry whose index is given by the argument. For
example, here's a convenient way to display information about the
debugged program's data segment:
@smallexample
@exdent @code{(@value{GDBP}) info dos ldt $ds}
@exdent @code{0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)}
@end smallexample
@noindent
This comes in handy when you want to see whether a pointer is outside
the data segment's limit (i.e.@: @dfn{garbled}).
@cindex page tables display (MS-DOS)
@item info dos pde
@itemx info dos pte
These two commands display entries from, respectively, the Page
Directory and the Page Tables. Page Directories and Page Tables are
data structures which control how virtual memory addresses are mapped
into physical addresses. A Page Table includes an entry for every
page of memory that is mapped into the program's address space; there
may be several Page Tables, each one holding up to 4096 entries. A
Page Directory has up to 4096 entries, one each for every Page Table
that is currently in use.
Without an argument, @kbd{info dos pde} displays the entire Page
Directory, and @kbd{info dos pte} displays all the entries in all of
the Page Tables. An argument, an integer expression, given to the
@kbd{info dos pde} command means display only that entry from the Page
Directory table. An argument given to the @kbd{info dos pte} command
means display entries from a single Page Table, the one pointed to by
the specified entry in the Page Directory.
@cindex direct memory access (DMA) on MS-DOS
These commands are useful when your program uses @dfn{DMA} (Direct
Memory Access), which needs physical addresses to program the DMA
controller.
These commands are supported only with some DPMI servers.
@cindex physical address from linear address
@item info dos address-pte @var{addr}
This command displays the Page Table entry for a specified linear
address. The argument linear address @var{addr} should already have the
appropriate segment's base address added to it, because this command
accepts addresses which may belong to @emph{any} segment. For
example, here's how to display the Page Table entry for the page where
the variable @code{i} is stored:
@smallexample
@exdent @code{(@value{GDBP}) info dos address-pte __djgpp_base_address + (char *)&i}
@exdent @code{Page Table entry for address 0x11a00d30:}
@exdent @code{Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30}
@end smallexample
@noindent
This says that @code{i} is stored at offset @code{0xd30} from the page
whose physical base address is @code{0x02698000}, and prints all the
attributes of that page.
Note that you must cast the addresses of variables to a @code{char *},
since otherwise the value of @code{__djgpp_base_address}, the base
address of all variables and functions in a @sc{djgpp} program, will
be added using the rules of C pointer arithmetics: if @code{i} is
declared an @code{int}, @value{GDBN} will add 4 times the value of
@code{__djgpp_base_address} to the address of @code{i}.
Here's another example, it displays the Page Table entry for the
transfer buffer:
@smallexample
@exdent @code{(@value{GDBP}) info dos address-pte *((unsigned *)&_go32_info_block + 3)}
@exdent @code{Page Table entry for address 0x29110:}
@exdent @code{Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110}
@end smallexample
@noindent
(The @code{+ 3} offset is because the transfer buffer's address is the
3rd member of the @code{_go32_info_block} structure.) The output of
this command clearly shows that addresses in conventional memory are
mapped 1:1, i.e.@: the physical and linear addresses are identical.
This command is supported only with some DPMI servers.
@end table
@node Cygwin Native
@subsection Features for Debugging MS Windows PE executables
@cindex MS Windows debugging
@cindex native Cygwin debugging
@cindex Cygwin-specific commands
@value{GDBN} supports native debugging of MS Windows programs, and
defines a few commands specific to the Cygwin port. This
subsection describes those commands.
@table @code
@kindex info w32
@item info w32
This is a prefix of MS Windows specific commands which print
information about the target system and important OS structures.
@item info w32 selector
This command displays information returned by
the Win32 API @code{GetThreadSelectorEntry} function.
It takes an optional argument that is evaluated to
a long value to give the information about this given selector.
Without argument, this command displays information
about the the six segment registers.
@kindex info dll
@item info dll
This is a Cygwin specific alias of info shared.
@kindex dll-symbols
@item dll-symbols
This command loads symbols from a dll similarly to
add-sym command but without the need to specify a base address.
@kindex set new-console
@item set new-console @var{mode}
If @var{mode} is @code{on} the debuggee will
be started in a new console on next start.
If @var{mode} is @code{off}i, the debuggee will
be started in the same console as the debugger.
@kindex show new-console
@item show new-console
Displays whether a new console is used
when the debuggee is started.
@kindex set new-group
@item set new-group @var{mode}
This boolean value controls whether the debuggee should
start a new group or stay in the same group as the debugger.
This affects the way the Windows OS handles
Ctrl-C.
@kindex show new-group
@item show new-group
Displays current value of new-group boolean.
@kindex set debugevents
@item set debugevents
This boolean value adds debug output concerning events seen by the debugger.
@kindex set debugexec
@item set debugexec
This boolean value adds debug output concerning execute events
seen by the debugger.
@kindex set debugexceptions
@item set debugexceptions
This boolean value adds debug ouptut concerning exception events
seen by the debugger.
@kindex set debugmemory
@item set debugmemory
This boolean value adds debug ouptut concerning memory events
seen by the debugger.
@kindex set shell
@item set shell
This boolean values specifies whether the debuggee is called
via a shell or directly (default value is on).
@kindex show shell
@item show shell
Displays if the debuggee will be started with a shell.
@end table
@node Embedded OS
@section Embedded Operating Systems
This section describes configurations involving the debugging of
embedded operating systems that are available for several different
architectures.
@menu
* VxWorks:: Using @value{GDBN} with VxWorks
@end menu
@value{GDBN} includes the ability to debug programs running on
various real-time operating systems.
@node VxWorks
@subsection Using @value{GDBN} with VxWorks
@cindex VxWorks
@table @code
@kindex target vxworks
@item target vxworks @var{machinename}
A VxWorks system, attached via TCP/IP. The argument @var{machinename}
is the target system's machine name or IP address.
@end table
On VxWorks, @code{load} links @var{filename} dynamically on the
current target system as well as adding its symbols in @value{GDBN}.
@value{GDBN} enables developers to spawn and debug tasks running on networked
VxWorks targets from a Unix host. Already-running tasks spawned from
the VxWorks shell can also be debugged. @value{GDBN} uses code that runs on
both the Unix host and on the VxWorks target. The program
@code{@value{GDBP}} is installed and executed on the Unix host. (It may be
installed with the name @code{vxgdb}, to distinguish it from a
@value{GDBN} for debugging programs on the host itself.)
@table @code
@item VxWorks-timeout @var{args}
@kindex vxworks-timeout
All VxWorks-based targets now support the option @code{vxworks-timeout}.
This option is set by the user, and @var{args} represents the number of
seconds @value{GDBN} waits for responses to rpc's. You might use this if
your VxWorks target is a slow software simulator or is on the far side
of a thin network line.
@end table
The following information on connecting to VxWorks was current when
this manual was produced; newer releases of VxWorks may use revised
procedures.
@kindex INCLUDE_RDB
To use @value{GDBN} with VxWorks, you must rebuild your VxWorks kernel
to include the remote debugging interface routines in the VxWorks
library @file{rdb.a}. To do this, define @code{INCLUDE_RDB} in the
VxWorks configuration file @file{configAll.h} and rebuild your VxWorks
kernel. The resulting kernel contains @file{rdb.a}, and spawns the
source debugging task @code{tRdbTask} when VxWorks is booted. For more
information on configuring and remaking VxWorks, see the manufacturer's
manual.
@c VxWorks, see the @cite{VxWorks Programmer's Guide}.
Once you have included @file{rdb.a} in your VxWorks system image and set
your Unix execution search path to find @value{GDBN}, you are ready to
run @value{GDBN}. From your Unix host, run @code{@value{GDBP}} (or
@code{vxgdb}, depending on your installation).
@value{GDBN} comes up showing the prompt:
@smallexample
(vxgdb)
@end smallexample
@menu
* VxWorks Connection:: Connecting to VxWorks
* VxWorks Download:: VxWorks download
* VxWorks Attach:: Running tasks
@end menu
@node VxWorks Connection
@subsubsection Connecting to VxWorks
The @value{GDBN} command @code{target} lets you connect to a VxWorks target on the
network. To connect to a target whose host name is ``@code{tt}'', type:
@smallexample
(vxgdb) target vxworks tt
@end smallexample
@need 750
@value{GDBN} displays messages like these:
@smallexample
Attaching remote machine across net...
Connected to tt.
@end smallexample
@need 1000
@value{GDBN} then attempts to read the symbol tables of any object modules
loaded into the VxWorks target since it was last booted. @value{GDBN} locates
these files by searching the directories listed in the command search
path (@pxref{Environment, ,Your program's environment}); if it fails
to find an object file, it displays a message such as:
@smallexample
prog.o: No such file or directory.
@end smallexample
When this happens, add the appropriate directory to the search path with
the @value{GDBN} command @code{path}, and execute the @code{target}
command again.
@node VxWorks Download
@subsubsection VxWorks download
@cindex download to VxWorks
If you have connected to the VxWorks target and you want to debug an
object that has not yet been loaded, you can use the @value{GDBN}
@code{load} command to download a file from Unix to VxWorks
incrementally. The object file given as an argument to the @code{load}
command is actually opened twice: first by the VxWorks target in order
to download the code, then by @value{GDBN} in order to read the symbol
table. This can lead to problems if the current working directories on
the two systems differ. If both systems have NFS mounted the same
filesystems, you can avoid these problems by using absolute paths.
Otherwise, it is simplest to set the working directory on both systems
to the directory in which the object file resides, and then to reference
the file by its name, without any path. For instance, a program
@file{prog.o} may reside in @file{@var{vxpath}/vw/demo/rdb} in VxWorks
and in @file{@var{hostpath}/vw/demo/rdb} on the host. To load this
program, type this on VxWorks:
@smallexample
-> cd "@var{vxpath}/vw/demo/rdb"
@end smallexample
@noindent
Then, in @value{GDBN}, type:
@smallexample
(vxgdb) cd @var{hostpath}/vw/demo/rdb
(vxgdb) load prog.o
@end smallexample
@value{GDBN} displays a response similar to this:
@smallexample
Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
@end smallexample
You can also use the @code{load} command to reload an object module
after editing and recompiling the corresponding source file. Note that
this makes @value{GDBN} delete all currently-defined breakpoints,
auto-displays, and convenience variables, and to clear the value
history. (This is necessary in order to preserve the integrity of
debugger's data structures that reference the target system's symbol
table.)
@node VxWorks Attach
@subsubsection Running tasks
@cindex running VxWorks tasks
You can also attach to an existing task using the @code{attach} command as
follows:
@smallexample
(vxgdb) attach @var{task}
@end smallexample
@noindent
where @var{task} is the VxWorks hexadecimal task ID. The task can be running
or suspended when you attach to it. Running tasks are suspended at
the time of attachment.
@node Embedded Processors
@section Embedded Processors
This section goes into details specific to particular embedded
configurations.
@menu
* ARM:: ARM
* H8/300:: Hitachi H8/300
* H8/500:: Hitachi H8/500
* i960:: Intel i960
* M32R/D:: Mitsubishi M32R/D
* M68K:: Motorola M68K
@c OBSOLETE * M88K:: Motorola M88K
* MIPS Embedded:: MIPS Embedded
* PA:: HP PA Embedded
* PowerPC: PowerPC
* SH:: Hitachi SH
* Sparclet:: Tsqware Sparclet
* Sparclite:: Fujitsu Sparclite
* ST2000:: Tandem ST2000
* Z8000:: Zilog Z8000
@end menu
@node ARM
@subsection ARM
@table @code
@kindex target rdi
@item target rdi @var{dev}
ARM Angel monitor, via RDI library interface to ADP protocol. You may
use this target to communicate with both boards running the Angel
monitor, or with the EmbeddedICE JTAG debug device.
@kindex target rdp
@item target rdp @var{dev}
ARM Demon monitor.
@end table
@node H8/300
@subsection Hitachi H8/300
@table @code
@kindex target hms@r{, with H8/300}
@item target hms @var{dev}
A Hitachi SH, H8/300, or H8/500 board, attached via serial line to your host.
Use special commands @code{device} and @code{speed} to control the serial
line and the communications speed used.
@kindex target e7000@r{, with H8/300}
@item target e7000 @var{dev}
E7000 emulator for Hitachi H8 and SH.
@kindex target sh3@r{, with H8/300}
@kindex target sh3e@r{, with H8/300}
@item target sh3 @var{dev}
@itemx target sh3e @var{dev}
Hitachi SH-3 and SH-3E target systems.
@end table
@cindex download to H8/300 or H8/500
@cindex H8/300 or H8/500 download
@cindex download to Hitachi SH
@cindex Hitachi SH download
When you select remote debugging to a Hitachi SH, H8/300, or H8/500
board, the @code{load} command downloads your program to the Hitachi
board and also opens it as the current executable target for
@value{GDBN} on your host (like the @code{file} command).
@value{GDBN} needs to know these things to talk to your
Hitachi SH, H8/300, or H8/500:
@enumerate
@item
that you want to use @samp{target hms}, the remote debugging interface
for Hitachi microprocessors, or @samp{target e7000}, the in-circuit
emulator for the Hitachi SH and the Hitachi 300H. (@samp{target hms} is
the default when @value{GDBN} is configured specifically for the Hitachi SH,
H8/300, or H8/500.)
@item
what serial device connects your host to your Hitachi board (the first
serial device available on your host is the default).
@item
what speed to use over the serial device.
@end enumerate
@menu
* Hitachi Boards:: Connecting to Hitachi boards.
* Hitachi ICE:: Using the E7000 In-Circuit Emulator.
* Hitachi Special:: Special @value{GDBN} commands for Hitachi micros.
@end menu
@node Hitachi Boards
@subsubsection Connecting to Hitachi boards
@c only for Unix hosts
@kindex device
@cindex serial device, Hitachi micros
Use the special @code{@value{GDBN}} command @samp{device @var{port}} if you
need to explicitly set the serial device. The default @var{port} is the
first available port on your host. This is only necessary on Unix
hosts, where it is typically something like @file{/dev/ttya}.
@kindex speed
@cindex serial line speed, Hitachi micros
@code{@value{GDBN}} has another special command to set the communications
speed: @samp{speed @var{bps}}. This command also is only used from Unix
hosts; on DOS hosts, set the line speed as usual from outside @value{GDBN} with
the DOS @code{mode} command (for instance,
@w{@kbd{mode com2:9600,n,8,1,p}} for a 9600@dmn{bps} connection).
The @samp{device} and @samp{speed} commands are available only when you
use a Unix host to debug your Hitachi microprocessor programs. If you
use a DOS host,
@value{GDBN} depends on an auxiliary terminate-and-stay-resident program
called @code{asynctsr} to communicate with the development board
through a PC serial port. You must also use the DOS @code{mode} command
to set up the serial port on the DOS side.
The following sample session illustrates the steps needed to start a
program under @value{GDBN} control on an H8/300. The example uses a
sample H8/300 program called @file{t.x}. The procedure is the same for
the Hitachi SH and the H8/500.
First hook up your development board. In this example, we use a
board attached to serial port @code{COM2}; if you use a different serial
port, substitute its name in the argument of the @code{mode} command.
When you call @code{asynctsr}, the auxiliary comms program used by the
debugger, you give it just the numeric part of the serial port's name;
for example, @samp{asyncstr 2} below runs @code{asyncstr} on
@code{COM2}.
@smallexample
C:\H8300\TEST> asynctsr 2
C:\H8300\TEST> mode com2:9600,n,8,1,p
Resident portion of MODE loaded
COM2: 9600, n, 8, 1, p
@end smallexample
@quotation
@emph{Warning:} We have noticed a bug in PC-NFS that conflicts with
@code{asynctsr}. If you also run PC-NFS on your DOS host, you may need to
disable it, or even boot without it, to use @code{asynctsr} to control
your development board.
@end quotation
@kindex target hms@r{, and serial protocol}
Now that serial communications are set up, and the development board is
connected, you can start up @value{GDBN}. Call @code{@value{GDBP}} with
the name of your program as the argument. @code{@value{GDBN}} prompts
you, as usual, with the prompt @samp{(@value{GDBP})}. Use two special
commands to begin your debugging session: @samp{target hms} to specify
cross-debugging to the Hitachi board, and the @code{load} command to
download your program to the board. @code{load} displays the names of
the program's sections, and a @samp{*} for each 2K of data downloaded.
(If you want to refresh @value{GDBN} data on symbols or on the
executable file without downloading, use the @value{GDBN} commands
@code{file} or @code{symbol-file}. These commands, and @code{load}
itself, are described in @ref{Files,,Commands to specify files}.)
@smallexample
(eg-C:\H8300\TEST) @value{GDBP} t.x
@value{GDBN} is free software and you are welcome to distribute copies
of it under certain conditions; type "show copying" to see
the conditions.
There is absolutely no warranty for @value{GDBN}; type "show warranty"
for details.
@value{GDBN} @value{GDBVN}, Copyright 1992 Free Software Foundation, Inc...
(@value{GDBP}) target hms
Connected to remote H8/300 HMS system.
(@value{GDBP}) load t.x
.text : 0x8000 .. 0xabde ***********
.data : 0xabde .. 0xad30 *
.stack : 0xf000 .. 0xf014 *
@end smallexample
At this point, you're ready to run or debug your program. From here on,
you can use all the usual @value{GDBN} commands. The @code{break} command
sets breakpoints; the @code{run} command starts your program;
@code{print} or @code{x} display data; the @code{continue} command
resumes execution after stopping at a breakpoint. You can use the
@code{help} command at any time to find out more about @value{GDBN} commands.
Remember, however, that @emph{operating system} facilities aren't
available on your development board; for example, if your program hangs,
you can't send an interrupt---but you can press the @sc{reset} switch!
Use the @sc{reset} button on the development board
@itemize @bullet
@item
to interrupt your program (don't use @kbd{ctl-C} on the DOS host---it has
no way to pass an interrupt signal to the development board); and
@item
to return to the @value{GDBN} command prompt after your program finishes
normally. The communications protocol provides no other way for @value{GDBN}
to detect program completion.
@end itemize
In either case, @value{GDBN} sees the effect of a @sc{reset} on the
development board as a ``normal exit'' of your program.
@node Hitachi ICE
@subsubsection Using the E7000 in-circuit emulator
@kindex target e7000@r{, with Hitachi ICE}
You can use the E7000 in-circuit emulator to develop code for either the
Hitachi SH or the H8/300H. Use one of these forms of the @samp{target
e7000} command to connect @value{GDBN} to your E7000:
@table @code
@item target e7000 @var{port} @var{speed}
Use this form if your E7000 is connected to a serial port. The
@var{port} argument identifies what serial port to use (for example,
@samp{com2}). The third argument is the line speed in bits per second
(for example, @samp{9600}).
@item target e7000 @var{hostname}
If your E7000 is installed as a host on a TCP/IP network, you can just
specify its hostname; @value{GDBN} uses @code{telnet} to connect.
@end table
@node Hitachi Special
@subsubsection Special @value{GDBN} commands for Hitachi micros
Some @value{GDBN} commands are available only for the H8/300:
@table @code
@kindex set machine
@kindex show machine
@item set machine h8300
@itemx set machine h8300h
Condition @value{GDBN} for one of the two variants of the H8/300
architecture with @samp{set machine}. You can use @samp{show machine}
to check which variant is currently in effect.
@end table
@node H8/500
@subsection H8/500
@table @code
@kindex set memory @var{mod}
@cindex memory models, H8/500
@item set memory @var{mod}
@itemx show memory
Specify which H8/500 memory model (@var{mod}) you are using with
@samp{set memory}; check which memory model is in effect with @samp{show
memory}. The accepted values for @var{mod} are @code{small},
@code{big}, @code{medium}, and @code{compact}.
@end table
@node i960
@subsection Intel i960
@table @code
@kindex target mon960
@item target mon960 @var{dev}
MON960 monitor for Intel i960.
@kindex target nindy
@item target nindy @var{devicename}
An Intel 960 board controlled by a Nindy Monitor. @var{devicename} is
the name of the serial device to use for the connection, e.g.
@file{/dev/ttya}.
@end table
@cindex Nindy
@cindex i960
@dfn{Nindy} is a ROM Monitor program for Intel 960 target systems. When
@value{GDBN} is configured to control a remote Intel 960 using Nindy, you can
tell @value{GDBN} how to connect to the 960 in several ways:
@itemize @bullet
@item
Through command line options specifying serial port, version of the
Nindy protocol, and communications speed;
@item
By responding to a prompt on startup;
@item
By using the @code{target} command at any point during your @value{GDBN}
session. @xref{Target Commands, ,Commands for managing targets}.
@end itemize
@cindex download to Nindy-960
With the Nindy interface to an Intel 960 board, @code{load}
downloads @var{filename} to the 960 as well as adding its symbols in
@value{GDBN}.
@menu
* Nindy Startup:: Startup with Nindy
* Nindy Options:: Options for Nindy
* Nindy Reset:: Nindy reset command
@end menu
@node Nindy Startup
@subsubsection Startup with Nindy
If you simply start @code{@value{GDBP}} without using any command-line
options, you are prompted for what serial port to use, @emph{before} you
reach the ordinary @value{GDBN} prompt:
@smallexample
Attach /dev/ttyNN -- specify NN, or "quit" to quit:
@end smallexample
@noindent
Respond to the prompt with whatever suffix (after @samp{/dev/tty})
identifies the serial port you want to use. You can, if you choose,
simply start up with no Nindy connection by responding to the prompt
with an empty line. If you do this and later wish to attach to Nindy,
use @code{target} (@pxref{Target Commands, ,Commands for managing targets}).
@node Nindy Options
@subsubsection Options for Nindy
These are the startup options for beginning your @value{GDBN} session with a
Nindy-960 board attached:
@table @code
@item -r @var{port}
Specify the serial port name of a serial interface to be used to connect
to the target system. This option is only available when @value{GDBN} is
configured for the Intel 960 target architecture. You may specify
@var{port} as any of: a full pathname (e.g. @samp{-r /dev/ttya}), a
device name in @file{/dev} (e.g. @samp{-r ttya}), or simply the unique
suffix for a specific @code{tty} (e.g. @samp{-r a}).
@item -O
(An uppercase letter ``O'', not a zero.) Specify that @value{GDBN} should use
the ``old'' Nindy monitor protocol to connect to the target system.
This option is only available when @value{GDBN} is configured for the Intel 960
target architecture.
@quotation
@emph{Warning:} if you specify @samp{-O}, but are actually trying to
connect to a target system that expects the newer protocol, the connection
fails, appearing to be a speed mismatch. @value{GDBN} repeatedly
attempts to reconnect at several different line speeds. You can abort
this process with an interrupt.
@end quotation
@item -brk
Specify that @value{GDBN} should first send a @code{BREAK} signal to the target
system, in an attempt to reset it, before connecting to a Nindy target.
@quotation
@emph{Warning:} Many target systems do not have the hardware that this
requires; it only works with a few boards.
@end quotation
@end table
The standard @samp{-b} option controls the line speed used on the serial
port.
@c @group
@node Nindy Reset
@subsubsection Nindy reset command
@table @code
@item reset
@kindex reset
For a Nindy target, this command sends a ``break'' to the remote target
system; this is only useful if the target has been equipped with a
circuit to perform a hard reset (or some other interesting action) when
a break is detected.
@end table
@c @end group
@node M32R/D
@subsection Mitsubishi M32R/D
@table @code
@kindex target m32r
@item target m32r @var{dev}
Mitsubishi M32R/D ROM monitor.
@end table
@node M68K
@subsection M68k
The Motorola m68k configuration includes ColdFire support, and
target command for the following ROM monitors.
@table @code
@kindex target abug
@item target abug @var{dev}
ABug ROM monitor for M68K.
@kindex target cpu32bug
@item target cpu32bug @var{dev}
CPU32BUG monitor, running on a CPU32 (M68K) board.
@kindex target dbug
@item target dbug @var{dev}
dBUG ROM monitor for Motorola ColdFire.
@kindex target est
@item target est @var{dev}
EST-300 ICE monitor, running on a CPU32 (M68K) board.
@kindex target rom68k
@item target rom68k @var{dev}
ROM 68K monitor, running on an M68K IDP board.
@end table
If @value{GDBN} is configured with @code{m68*-ericsson-*}, it will
instead have only a single special target command:
@table @code
@kindex target es1800
@item target es1800 @var{dev}
ES-1800 emulator for M68K.
@end table
[context?]
@table @code
@kindex target rombug
@item target rombug @var{dev}
ROMBUG ROM monitor for OS/9000.
@end table
@c OBSOLETE @node M88K
@c OBSOLETE @subsection M88K
@c OBSOLETE
@c OBSOLETE @table @code
@c OBSOLETE
@c OBSOLETE @kindex target bug
@c OBSOLETE @item target bug @var{dev}
@c OBSOLETE BUG monitor, running on a MVME187 (m88k) board.
@c OBSOLETE
@c OBSOLETE @end table
@node MIPS Embedded
@subsection MIPS Embedded
@cindex MIPS boards
@value{GDBN} can use the MIPS remote debugging protocol to talk to a
MIPS board attached to a serial line. This is available when
you configure @value{GDBN} with @samp{--target=mips-idt-ecoff}.
@need 1000
Use these @value{GDBN} commands to specify the connection to your target board:
@table @code
@item target mips @var{port}
@kindex target mips @var{port}
To run a program on the board, start up @code{@value{GDBP}} with the
name of your program as the argument. To connect to the board, use the
command @samp{target mips @var{port}}, where @var{port} is the name of
the serial port connected to the board. If the program has not already
been downloaded to the board, you may use the @code{load} command to
download it. You can then use all the usual @value{GDBN} commands.
For example, this sequence connects to the target board through a serial
port, and loads and runs a program called @var{prog} through the
debugger:
@smallexample
host$ @value{GDBP} @var{prog}
@value{GDBN} is free software and @dots{}
(@value{GDBP}) target mips /dev/ttyb
(@value{GDBP}) load @var{prog}
(@value{GDBP}) run
@end smallexample
@item target mips @var{hostname}:@var{portnumber}
On some @value{GDBN} host configurations, you can specify a TCP
connection (for instance, to a serial line managed by a terminal
concentrator) instead of a serial port, using the syntax
@samp{@var{hostname}:@var{portnumber}}.
@item target pmon @var{port}
@kindex target pmon @var{port}
PMON ROM monitor.
@item target ddb @var{port}
@kindex target ddb @var{port}
NEC's DDB variant of PMON for Vr4300.
@item target lsi @var{port}
@kindex target lsi @var{port}
LSI variant of PMON.
@kindex target r3900
@item target r3900 @var{dev}
Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
@kindex target array
@item target array @var{dev}
Array Tech LSI33K RAID controller board.
@end table
@noindent
@value{GDBN} also supports these special commands for MIPS targets:
@table @code
@item set processor @var{args}
@itemx show processor
@kindex set processor @var{args}
@kindex show processor
Use the @code{set processor} command to set the type of MIPS
processor when you want to access processor-type-specific registers.
For example, @code{set processor @var{r3041}} tells @value{GDBN}
to use the CPU registers appropriate for the 3041 chip.
Use the @code{show processor} command to see what MIPS processor @value{GDBN}
is using. Use the @code{info reg} command to see what registers
@value{GDBN} is using.
@item set mipsfpu double
@itemx set mipsfpu single
@itemx set mipsfpu none
@itemx show mipsfpu
@kindex set mipsfpu
@kindex show mipsfpu
@cindex MIPS remote floating point
@cindex floating point, MIPS remote
If your target board does not support the MIPS floating point
coprocessor, you should use the command @samp{set mipsfpu none} (if you
need this, you may wish to put the command in your @value{GDBN} init
file). This tells @value{GDBN} how to find the return value of
functions which return floating point values. It also allows
@value{GDBN} to avoid saving the floating point registers when calling
functions on the board. If you are using a floating point coprocessor
with only single precision floating point support, as on the @sc{r4650}
processor, use the command @samp{set mipsfpu single}. The default
double precision floating point coprocessor may be selected using
@samp{set mipsfpu double}.
In previous versions the only choices were double precision or no
floating point, so @samp{set mipsfpu on} will select double precision
and @samp{set mipsfpu off} will select no floating point.
As usual, you can inquire about the @code{mipsfpu} variable with
@samp{show mipsfpu}.
@item set remotedebug @var{n}
@itemx show remotedebug
@kindex set remotedebug@r{, MIPS protocol}
@kindex show remotedebug@r{, MIPS protocol}
@cindex @code{remotedebug}, MIPS protocol
@cindex MIPS @code{remotedebug} protocol
@c FIXME! For this to be useful, you must know something about the MIPS
@c FIXME...protocol. Where is it described?
You can see some debugging information about communications with the board
by setting the @code{remotedebug} variable. If you set it to @code{1} using
@samp{set remotedebug 1}, every packet is displayed. If you set it
to @code{2}, every character is displayed. You can check the current value
at any time with the command @samp{show remotedebug}.
@item set timeout @var{seconds}
@itemx set retransmit-timeout @var{seconds}
@itemx show timeout
@itemx show retransmit-timeout
@cindex @code{timeout}, MIPS protocol
@cindex @code{retransmit-timeout}, MIPS protocol
@kindex set timeout
@kindex show timeout
@kindex set retransmit-timeout
@kindex show retransmit-timeout
You can control the timeout used while waiting for a packet, in the MIPS
remote protocol, with the @code{set timeout @var{seconds}} command. The
default is 5 seconds. Similarly, you can control the timeout used while
waiting for an acknowledgement of a packet with the @code{set
retransmit-timeout @var{seconds}} command. The default is 3 seconds.
You can inspect both values with @code{show timeout} and @code{show
retransmit-timeout}. (These commands are @emph{only} available when
@value{GDBN} is configured for @samp{--target=mips-idt-ecoff}.)
The timeout set by @code{set timeout} does not apply when @value{GDBN}
is waiting for your program to stop. In that case, @value{GDBN} waits
forever because it has no way of knowing how long the program is going
to run before stopping.
@end table
@node PowerPC
@subsection PowerPC
@table @code
@kindex target dink32
@item target dink32 @var{dev}
DINK32 ROM monitor.
@kindex target ppcbug
@item target ppcbug @var{dev}
@kindex target ppcbug1
@item target ppcbug1 @var{dev}
PPCBUG ROM monitor for PowerPC.
@kindex target sds
@item target sds @var{dev}
SDS monitor, running on a PowerPC board (such as Motorola's ADS).
@end table
@node PA
@subsection HP PA Embedded
@table @code
@kindex target op50n
@item target op50n @var{dev}
OP50N monitor, running on an OKI HPPA board.
@kindex target w89k
@item target w89k @var{dev}
W89K monitor, running on a Winbond HPPA board.
@end table
@node SH
@subsection Hitachi SH
@table @code
@kindex target hms@r{, with Hitachi SH}
@item target hms @var{dev}
A Hitachi SH board attached via serial line to your host. Use special
commands @code{device} and @code{speed} to control the serial line and
the communications speed used.
@kindex target e7000@r{, with Hitachi SH}
@item target e7000 @var{dev}
E7000 emulator for Hitachi SH.
@kindex target sh3@r{, with SH}
@kindex target sh3e@r{, with SH}
@item target sh3 @var{dev}
@item target sh3e @var{dev}
Hitachi SH-3 and SH-3E target systems.
@end table
@node Sparclet
@subsection Tsqware Sparclet
@cindex Sparclet
@value{GDBN} enables developers to debug tasks running on
Sparclet targets from a Unix host.
@value{GDBN} uses code that runs on
both the Unix host and on the Sparclet target. The program
@code{@value{GDBP}} is installed and executed on the Unix host.
@table @code
@item remotetimeout @var{args}
@kindex remotetimeout
@value{GDBN} supports the option @code{remotetimeout}.
This option is set by the user, and @var{args} represents the number of
seconds @value{GDBN} waits for responses.
@end table
@cindex compiling, on Sparclet
When compiling for debugging, include the options @samp{-g} to get debug
information and @samp{-Ttext} to relocate the program to where you wish to
load it on the target. You may also want to add the options @samp{-n} or
@samp{-N} in order to reduce the size of the sections. Example:
@smallexample
sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
@end smallexample
You can use @code{objdump} to verify that the addresses are what you intended:
@smallexample
sparclet-aout-objdump --headers --syms prog
@end smallexample
@cindex running, on Sparclet
Once you have set
your Unix execution search path to find @value{GDBN}, you are ready to
run @value{GDBN}. From your Unix host, run @code{@value{GDBP}}
(or @code{sparclet-aout-gdb}, depending on your installation).
@value{GDBN} comes up showing the prompt:
@smallexample
(gdbslet)
@end smallexample
@menu
* Sparclet File:: Setting the file to debug
* Sparclet Connection:: Connecting to Sparclet
* Sparclet Download:: Sparclet download
* Sparclet Execution:: Running and debugging
@end menu
@node Sparclet File
@subsubsection Setting file to debug
The @value{GDBN} command @code{file} lets you choose with program to debug.
@smallexample
(gdbslet) file prog
@end smallexample
@need 1000
@value{GDBN} then attempts to read the symbol table of @file{prog}.
@value{GDBN} locates
the file by searching the directories listed in the command search
path.
If the file was compiled with debug information (option "-g"), source
files will be searched as well.
@value{GDBN} locates
the source files by searching the directories listed in the directory search
path (@pxref{Environment, ,Your program's environment}).
If it fails
to find a file, it displays a message such as:
@smallexample
prog: No such file or directory.
@end smallexample
When this happens, add the appropriate directories to the search paths with
the @value{GDBN} commands @code{path} and @code{dir}, and execute the
@code{target} command again.
@node Sparclet Connection
@subsubsection Connecting to Sparclet
The @value{GDBN} command @code{target} lets you connect to a Sparclet target.
To connect to a target on serial port ``@code{ttya}'', type:
@smallexample
(gdbslet) target sparclet /dev/ttya
Remote target sparclet connected to /dev/ttya
main () at ../prog.c:3
@end smallexample
@need 750
@value{GDBN} displays messages like these:
@smallexample
Connected to ttya.
@end smallexample
@node Sparclet Download
@subsubsection Sparclet download
@cindex download to Sparclet
Once connected to the Sparclet target,
you can use the @value{GDBN}
@code{load} command to download the file from the host to the target.
The file name and load offset should be given as arguments to the @code{load}
command.
Since the file format is aout, the program must be loaded to the starting
address. You can use @code{objdump} to find out what this value is. The load
offset is an offset which is added to the VMA (virtual memory address)
of each of the file's sections.
For instance, if the program
@file{prog} was linked to text address 0x1201000, with data at 0x12010160
and bss at 0x12010170, in @value{GDBN}, type:
@smallexample
(gdbslet) load prog 0x12010000
Loading section .text, size 0xdb0 vma 0x12010000
@end smallexample
If the code is loaded at a different address then what the program was linked
to, you may need to use the @code{section} and @code{add-symbol-file} commands
to tell @value{GDBN} where to map the symbol table.
@node Sparclet Execution
@subsubsection Running and debugging
@cindex running and debugging Sparclet programs
You can now begin debugging the task using @value{GDBN}'s execution control
commands, @code{b}, @code{step}, @code{run}, etc. See the @value{GDBN}
manual for the list of commands.
@smallexample
(gdbslet) b main
Breakpoint 1 at 0x12010000: file prog.c, line 3.
(gdbslet) run
Starting program: prog
Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
3 char *symarg = 0;
(gdbslet) step
4 char *execarg = "hello!";
(gdbslet)
@end smallexample
@node Sparclite
@subsection Fujitsu Sparclite
@table @code
@kindex target sparclite
@item target sparclite @var{dev}
Fujitsu sparclite boards, used only for the purpose of loading.
You must use an additional command to debug the program.
For example: target remote @var{dev} using @value{GDBN} standard
remote protocol.
@end table
@node ST2000
@subsection Tandem ST2000
@value{GDBN} may be used with a Tandem ST2000 phone switch, running Tandem's
STDBUG protocol.
To connect your ST2000 to the host system, see the manufacturer's
manual. Once the ST2000 is physically attached, you can run:
@smallexample
target st2000 @var{dev} @var{speed}
@end smallexample
@noindent
to establish it as your debugging environment. @var{dev} is normally
the name of a serial device, such as @file{/dev/ttya}, connected to the
ST2000 via a serial line. You can instead specify @var{dev} as a TCP
connection (for example, to a serial line attached via a terminal
concentrator) using the syntax @code{@var{hostname}:@var{portnumber}}.
The @code{load} and @code{attach} commands are @emph{not} defined for
this target; you must load your program into the ST2000 as you normally
would for standalone operation. @value{GDBN} reads debugging information
(such as symbols) from a separate, debugging version of the program
available on your host computer.
@c FIXME!! This is terribly vague; what little content is here is
@c basically hearsay.
@cindex ST2000 auxiliary commands
These auxiliary @value{GDBN} commands are available to help you with the ST2000
environment:
@table @code
@item st2000 @var{command}
@kindex st2000 @var{cmd}
@cindex STDBUG commands (ST2000)
@cindex commands to STDBUG (ST2000)
Send a @var{command} to the STDBUG monitor. See the manufacturer's
manual for available commands.
@item connect
@cindex connect (to STDBUG)
Connect the controlling terminal to the STDBUG command monitor. When
you are done interacting with STDBUG, typing either of two character
sequences gets you back to the @value{GDBN} command prompt:
@kbd{@key{RET}~.} (Return, followed by tilde and period) or
@kbd{@key{RET}~@key{C-d}} (Return, followed by tilde and control-D).
@end table
@node Z8000
@subsection Zilog Z8000
@cindex Z8000
@cindex simulator, Z8000
@cindex Zilog Z8000 simulator
When configured for debugging Zilog Z8000 targets, @value{GDBN} includes
a Z8000 simulator.
For the Z8000 family, @samp{target sim} simulates either the Z8002 (the
unsegmented variant of the Z8000 architecture) or the Z8001 (the
segmented variant). The simulator recognizes which architecture is
appropriate by inspecting the object code.
@table @code
@item target sim @var{args}
@kindex sim
@kindex target sim@r{, with Z8000}
Debug programs on a simulated CPU. If the simulator supports setup
options, specify them via @var{args}.
@end table
@noindent
After specifying this target, you can debug programs for the simulated
CPU in the same style as programs for your host computer; use the
@code{file} command to load a new program image, the @code{run} command
to run your program, and so on.
As well as making available all the usual machine registers
(@pxref{Registers, ,Registers}), the Z8000 simulator provides three
additional items of information as specially named registers:
@table @code
@item cycles
Counts clock-ticks in the simulator.
@item insts
Counts instructions run in the simulator.
@item time
Execution time in 60ths of a second.
@end table
You can refer to these values in @value{GDBN} expressions with the usual
conventions; for example, @w{@samp{b fputc if $cycles>5000}} sets a
conditional breakpoint that suspends only after at least 5000
simulated clock ticks.
@node Architectures
@section Architectures
This section describes characteristics of architectures that affect
all uses of @value{GDBN} with the architecture, both native and cross.
@menu
* A29K::
* Alpha::
* MIPS::
@end menu
@node A29K
@subsection A29K
@table @code
@kindex set rstack_high_address
@cindex AMD 29K register stack
@cindex register stack, AMD29K
@item set rstack_high_address @var{address}
On AMD 29000 family processors, registers are saved in a separate
@dfn{register stack}. There is no way for @value{GDBN} to determine the
extent of this stack. Normally, @value{GDBN} just assumes that the
stack is ``large enough''. This may result in @value{GDBN} referencing
memory locations that do not exist. If necessary, you can get around
this problem by specifying the ending address of the register stack with
the @code{set rstack_high_address} command. The argument should be an
address, which you probably want to precede with @samp{0x} to specify in
hexadecimal.
@kindex show rstack_high_address
@item show rstack_high_address
Display the current limit of the register stack, on AMD 29000 family
processors.
@end table
@node Alpha
@subsection Alpha
See the following section.
@node MIPS
@subsection MIPS
@cindex stack on Alpha
@cindex stack on MIPS
@cindex Alpha stack
@cindex MIPS stack
Alpha- and MIPS-based computers use an unusual stack frame, which
sometimes requires @value{GDBN} to search backward in the object code to
find the beginning of a function.
@cindex response time, MIPS debugging
To improve response time (especially for embedded applications, where
@value{GDBN} may be restricted to a slow serial line for this search)
you may want to limit the size of this search, using one of these
commands:
@table @code
@cindex @code{heuristic-fence-post} (Alpha, MIPS)
@item set heuristic-fence-post @var{limit}
Restrict @value{GDBN} to examining at most @var{limit} bytes in its
search for the beginning of a function. A value of @var{0} (the
default) means there is no limit. However, except for @var{0}, the
larger the limit the more bytes @code{heuristic-fence-post} must search
and therefore the longer it takes to run.
@item show heuristic-fence-post
Display the current limit.
@end table
@noindent
These commands are available @emph{only} when @value{GDBN} is configured
for debugging programs on Alpha or MIPS processors.
@node Controlling GDB
@chapter Controlling @value{GDBN}
You can alter the way @value{GDBN} interacts with you by using the
@code{set} command. For commands controlling how @value{GDBN} displays
data, see @ref{Print Settings, ,Print settings}. Other settings are
described here.
@menu
* Prompt:: Prompt
* Editing:: Command editing
* History:: Command history
* Screen Size:: Screen size
* Numbers:: Numbers
* Messages/Warnings:: Optional warnings and messages
* Debugging Output:: Optional messages about internal happenings
@end menu
@node Prompt
@section Prompt
@cindex prompt
@value{GDBN} indicates its readiness to read a command by printing a string
called the @dfn{prompt}. This string is normally @samp{(@value{GDBP})}. You
can change the prompt string with the @code{set prompt} command. For
instance, when debugging @value{GDBN} with @value{GDBN}, it is useful to change
the prompt in one of the @value{GDBN} sessions so that you can always tell
which one you are talking to.
@emph{Note:} @code{set prompt} does not add a space for you after the
prompt you set. This allows you to set a prompt which ends in a space
or a prompt that does not.
@table @code
@kindex set prompt
@item set prompt @var{newprompt}
Directs @value{GDBN} to use @var{newprompt} as its prompt string henceforth.
@kindex show prompt
@item show prompt
Prints a line of the form: @samp{Gdb's prompt is: @var{your-prompt}}
@end table
@node Editing
@section Command editing
@cindex readline
@cindex command line editing
@value{GDBN} reads its input commands via the @dfn{readline} interface. This
@sc{gnu} library provides consistent behavior for programs which provide a
command line interface to the user. Advantages are @sc{gnu} Emacs-style
or @dfn{vi}-style inline editing of commands, @code{csh}-like history
substitution, and a storage and recall of command history across
debugging sessions.
You may control the behavior of command line editing in @value{GDBN} with the
command @code{set}.
@table @code
@kindex set editing
@cindex editing
@item set editing
@itemx set editing on
Enable command line editing (enabled by default).
@item set editing off
Disable command line editing.
@kindex show editing
@item show editing
Show whether command line editing is enabled.
@end table
@node History
@section Command history
@value{GDBN} can keep track of the commands you type during your
debugging sessions, so that you can be certain of precisely what
happened. Use these commands to manage the @value{GDBN} command
history facility.
@table @code
@cindex history substitution
@cindex history file
@kindex set history filename
@kindex GDBHISTFILE
@item set history filename @var{fname}
Set the name of the @value{GDBN} command history file to @var{fname}.
This is the file where @value{GDBN} reads an initial command history
list, and where it writes the command history from this session when it
exits. You can access this list through history expansion or through
the history command editing characters listed below. This file defaults
to the value of the environment variable @code{GDBHISTFILE}, or to
@file{./.gdb_history} (@file{./_gdb_history} on MS-DOS) if this variable
is not set.
@cindex history save
@kindex set history save
@item set history save
@itemx set history save on
Record command history in a file, whose name may be specified with the
@code{set history filename} command. By default, this option is disabled.
@item set history save off
Stop recording command history in a file.
@cindex history size
@kindex set history size
@item set history size @var{size}
Set the number of commands which @value{GDBN} keeps in its history list.
This defaults to the value of the environment variable
@code{HISTSIZE}, or to 256 if this variable is not set.
@end table
@cindex history expansion
History expansion assigns special meaning to the character @kbd{!}.
@ifset have-readline-appendices
@xref{Event Designators}.
@end ifset
Since @kbd{!} is also the logical not operator in C, history expansion
is off by default. If you decide to enable history expansion with the
@code{set history expansion on} command, you may sometimes need to
follow @kbd{!} (when it is used as logical not, in an expression) with
a space or a tab to prevent it from being expanded. The readline
history facilities do not attempt substitution on the strings
@kbd{!=} and @kbd{!(}, even when history expansion is enabled.
The commands to control history expansion are:
@table @code
@kindex set history expansion
@item set history expansion on
@itemx set history expansion
Enable history expansion. History expansion is off by default.
@item set history expansion off
Disable history expansion.
The readline code comes with more complete documentation of
editing and history expansion features. Users unfamiliar with @sc{gnu} Emacs
or @code{vi} may wish to read it.
@ifset have-readline-appendices
@xref{Command Line Editing}.
@end ifset
@c @group
@kindex show history
@item show history
@itemx show history filename
@itemx show history save
@itemx show history size
@itemx show history expansion
These commands display the state of the @value{GDBN} history parameters.
@code{show history} by itself displays all four states.
@c @end group
@end table
@table @code
@kindex shows
@item show commands
Display the last ten commands in the command history.
@item show commands @var{n}
Print ten commands centered on command number @var{n}.
@item show commands +
Print ten commands just after the commands last printed.
@end table
@node Screen Size
@section Screen size
@cindex size of screen
@cindex pauses in output
Certain commands to @value{GDBN} may produce large amounts of
information output to the screen. To help you read all of it,
@value{GDBN} pauses and asks you for input at the end of each page of
output. Type @key{RET} when you want to continue the output, or @kbd{q}
to discard the remaining output. Also, the screen width setting
determines when to wrap lines of output. Depending on what is being
printed, @value{GDBN} tries to break the line at a readable place,
rather than simply letting it overflow onto the following line.
Normally @value{GDBN} knows the size of the screen from the terminal
driver software. For example, on Unix @value{GDBN} uses the termcap data base
together with the value of the @code{TERM} environment variable and the
@code{stty rows} and @code{stty cols} settings. If this is not correct,
you can override it with the @code{set height} and @code{set
width} commands:
@table @code
@kindex set height
@kindex set width
@kindex show width
@kindex show height
@item set height @var{lpp}
@itemx show height
@itemx set width @var{cpl}
@itemx show width
These @code{set} commands specify a screen height of @var{lpp} lines and
a screen width of @var{cpl} characters. The associated @code{show}
commands display the current settings.
If you specify a height of zero lines, @value{GDBN} does not pause during
output no matter how long the output is. This is useful if output is to a
file or to an editor buffer.
Likewise, you can specify @samp{set width 0} to prevent @value{GDBN}
from wrapping its output.
@end table
@node Numbers
@section Numbers
@cindex number representation
@cindex entering numbers
You can always enter numbers in octal, decimal, or hexadecimal in
@value{GDBN} by the usual conventions: octal numbers begin with
@samp{0}, decimal numbers end with @samp{.}, and hexadecimal numbers
begin with @samp{0x}. Numbers that begin with none of these are, by
default, entered in base 10; likewise, the default display for
numbers---when no particular format is specified---is base 10. You can
change the default base for both input and output with the @code{set
radix} command.
@table @code
@kindex set input-radix
@item set input-radix @var{base}
Set the default base for numeric input. Supported choices
for @var{base} are decimal 8, 10, or 16. @var{base} must itself be
specified either unambiguously or using the current default radix; for
example, any of
@smallexample
set radix 012
set radix 10.
set radix 0xa
@end smallexample
@noindent
sets the base to decimal. On the other hand, @samp{set radix 10}
leaves the radix unchanged no matter what it was.
@kindex set output-radix
@item set output-radix @var{base}
Set the default base for numeric display. Supported choices
for @var{base} are decimal 8, 10, or 16. @var{base} must itself be
specified either unambiguously or using the current default radix.
@kindex show input-radix
@item show input-radix
Display the current default base for numeric input.
@kindex show output-radix
@item show output-radix
Display the current default base for numeric display.
@end table
@node Messages/Warnings
@section Optional warnings and messages
By default, @value{GDBN} is silent about its inner workings. If you are
running on a slow machine, you may want to use the @code{set verbose}
command. This makes @value{GDBN} tell you when it does a lengthy
internal operation, so you will not think it has crashed.
Currently, the messages controlled by @code{set verbose} are those
which announce that the symbol table for a source file is being read;
see @code{symbol-file} in @ref{Files, ,Commands to specify files}.
@table @code
@kindex set verbose
@item set verbose on
Enables @value{GDBN} output of certain informational messages.
@item set verbose off
Disables @value{GDBN} output of certain informational messages.
@kindex show verbose
@item show verbose
Displays whether @code{set verbose} is on or off.
@end table
By default, if @value{GDBN} encounters bugs in the symbol table of an
object file, it is silent; but if you are debugging a compiler, you may
find this information useful (@pxref{Symbol Errors, ,Errors reading
symbol files}).
@table @code
@kindex set complaints
@item set complaints @var{limit}
Permits @value{GDBN} to output @var{limit} complaints about each type of
unusual symbols before becoming silent about the problem. Set
@var{limit} to zero to suppress all complaints; set it to a large number
to prevent complaints from being suppressed.
@kindex show complaints
@item show complaints
Displays how many symbol complaints @value{GDBN} is permitted to produce.
@end table
By default, @value{GDBN} is cautious, and asks what sometimes seems to be a
lot of stupid questions to confirm certain commands. For example, if
you try to run a program which is already running:
@smallexample
(@value{GDBP}) run
The program being debugged has been started already.
Start it from the beginning? (y or n)
@end smallexample
If you are willing to unflinchingly face the consequences of your own
commands, you can disable this ``feature'':
@table @code
@kindex set confirm
@cindex flinching
@cindex confirmation
@cindex stupid questions
@item set confirm off
Disables confirmation requests.
@item set confirm on
Enables confirmation requests (the default).
@kindex show confirm
@item show confirm
Displays state of confirmation requests.
@end table
@node Debugging Output
@section Optional messages about internal happenings
@table @code
@kindex set debug arch
@item set debug arch
Turns on or off display of gdbarch debugging info. The default is off
@kindex show debug arch
@item show debug arch
Displays the current state of displaying gdbarch debugging info.
@kindex set debug event
@item set debug event
Turns on or off display of @value{GDBN} event debugging info. The
default is off.
@kindex show debug event
@item show debug event
Displays the current state of displaying @value{GDBN} event debugging
info.
@kindex set debug expression
@item set debug expression
Turns on or off display of @value{GDBN} expression debugging info. The
default is off.
@kindex show debug expression
@item show debug expression
Displays the current state of displaying @value{GDBN} expression
debugging info.
@kindex set debug overload
@item set debug overload
Turns on or off display of @value{GDBN} C@t{++} overload debugging
info. This includes info such as ranking of functions, etc. The default
is off.
@kindex show debug overload
@item show debug overload
Displays the current state of displaying @value{GDBN} C@t{++} overload
debugging info.
@kindex set debug remote
@cindex packets, reporting on stdout
@cindex serial connections, debugging
@item set debug remote
Turns on or off display of reports on all packets sent back and forth across
the serial line to the remote machine. The info is printed on the
@value{GDBN} standard output stream. The default is off.
@kindex show debug remote
@item show debug remote
Displays the state of display of remote packets.
@kindex set debug serial
@item set debug serial
Turns on or off display of @value{GDBN} serial debugging info. The
default is off.
@kindex show debug serial
@item show debug serial
Displays the current state of displaying @value{GDBN} serial debugging
info.
@kindex set debug target
@item set debug target
Turns on or off display of @value{GDBN} target debugging info. This info
includes what is going on at the target level of GDB, as it happens. The
default is off.
@kindex show debug target
@item show debug target
Displays the current state of displaying @value{GDBN} target debugging
info.
@kindex set debug varobj
@item set debug varobj
Turns on or off display of @value{GDBN} variable object debugging
info. The default is off.
@kindex show debug varobj
@item show debug varobj
Displays the current state of displaying @value{GDBN} variable object
debugging info.
@end table
@node Sequences
@chapter Canned Sequences of Commands
Aside from breakpoint commands (@pxref{Break Commands, ,Breakpoint
command lists}), @value{GDBN} provides two ways to store sequences of
commands for execution as a unit: user-defined commands and command
files.
@menu
* Define:: User-defined commands
* Hooks:: User-defined command hooks
* Command Files:: Command files
* Output:: Commands for controlled output
@end menu
@node Define
@section User-defined commands
@cindex user-defined command
A @dfn{user-defined command} is a sequence of @value{GDBN} commands to
which you assign a new name as a command. This is done with the
@code{define} command. User commands may accept up to 10 arguments
separated by whitespace. Arguments are accessed within the user command
via @var{$arg0@dots{}$arg9}. A trivial example:
@smallexample
define adder
print $arg0 + $arg1 + $arg2
@end smallexample
@noindent
To execute the command use:
@smallexample
adder 1 2 3
@end smallexample
@noindent
This defines the command @code{adder}, which prints the sum of
its three arguments. Note the arguments are text substitutions, so they may
reference variables, use complex expressions, or even perform inferior
functions calls.
@table @code
@kindex define
@item define @var{commandname}
Define a command named @var{commandname}. If there is already a command
by that name, you are asked to confirm that you want to redefine it.
The definition of the command is made up of other @value{GDBN} command lines,
which are given following the @code{define} command. The end of these
commands is marked by a line containing @code{end}.
@kindex if
@kindex else
@item if
Takes a single argument, which is an expression to evaluate.
It is followed by a series of commands that are executed
only if the expression is true (nonzero).
There can then optionally be a line @code{else}, followed
by a series of commands that are only executed if the expression
was false. The end of the list is marked by a line containing @code{end}.
@kindex while
@item while
The syntax is similar to @code{if}: the command takes a single argument,
which is an expression to evaluate, and must be followed by the commands to
execute, one per line, terminated by an @code{end}.
The commands are executed repeatedly as long as the expression
evaluates to true.
@kindex document
@item document @var{commandname}
Document the user-defined command @var{commandname}, so that it can be
accessed by @code{help}. The command @var{commandname} must already be
defined. This command reads lines of documentation just as @code{define}
reads the lines of the command definition, ending with @code{end}.
After the @code{document} command is finished, @code{help} on command
@var{commandname} displays the documentation you have written.
You may use the @code{document} command again to change the
documentation of a command. Redefining the command with @code{define}
does not change the documentation.
@kindex help user-defined
@item help user-defined
List all user-defined commands, with the first line of the documentation
(if any) for each.
@kindex show user
@item show user
@itemx show user @var{commandname}
Display the @value{GDBN} commands used to define @var{commandname} (but
not its documentation). If no @var{commandname} is given, display the
definitions for all user-defined commands.
@kindex show max-user-call-depth
@kindex set max-user-call-depth
@item show max-user-call-depth
@itemx set max-user-call-depth
The value of @code{max-user-call-depth} controls how many recursion
levels are allowed in user-defined commands before GDB suspects an
infinite recursion and aborts the command.
@end table
When user-defined commands are executed, the
commands of the definition are not printed. An error in any command
stops execution of the user-defined command.
If used interactively, commands that would ask for confirmation proceed
without asking when used inside a user-defined command. Many @value{GDBN}
commands that normally print messages to say what they are doing omit the
messages when used in a user-defined command.
@node Hooks
@section User-defined command hooks
@cindex command hooks
@cindex hooks, for commands
@cindex hooks, pre-command
@kindex hook
@kindex hook-
You may define @dfn{hooks}, which are a special kind of user-defined
command. Whenever you run the command @samp{foo}, if the user-defined
command @samp{hook-foo} exists, it is executed (with no arguments)
before that command.
@cindex hooks, post-command
@kindex hookpost
@kindex hookpost-
A hook may also be defined which is run after the command you executed.
Whenever you run the command @samp{foo}, if the user-defined command
@samp{hookpost-foo} exists, it is executed (with no arguments) after
that command. Post-execution hooks may exist simultaneously with
pre-execution hooks, for the same command.
It is valid for a hook to call the command which it hooks. If this
occurs, the hook is not re-executed, thereby avoiding infinte recursion.
@c It would be nice if hookpost could be passed a parameter indicating
@c if the command it hooks executed properly or not. FIXME!
@kindex stop@r{, a pseudo-command}
In addition, a pseudo-command, @samp{stop} exists. Defining
(@samp{hook-stop}) makes the associated commands execute every time
execution stops in your program: before breakpoint commands are run,
displays are printed, or the stack frame is printed.
For example, to ignore @code{SIGALRM} signals while
single-stepping, but treat them normally during normal execution,
you could define:
@smallexample
define hook-stop
handle SIGALRM nopass
end
define hook-run
handle SIGALRM pass
end
define hook-continue
handle SIGLARM pass
end
@end smallexample
As a further example, to hook at the begining and end of the @code{echo}
command, and to add extra text to the beginning and end of the message,
you could define:
@smallexample
define hook-echo
echo <<<---
end
define hookpost-echo
echo --->>>\n
end
(@value{GDBP}) echo Hello World
<<<---Hello World--->>>
(@value{GDBP})
@end smallexample
You can define a hook for any single-word command in @value{GDBN}, but
not for command aliases; you should define a hook for the basic command
name, e.g. @code{backtrace} rather than @code{bt}.
@c FIXME! So how does Joe User discover whether a command is an alias
@c or not?
If an error occurs during the execution of your hook, execution of
@value{GDBN} commands stops and @value{GDBN} issues a prompt
(before the command that you actually typed had a chance to run).
If you try to define a hook which does not match any known command, you
get a warning from the @code{define} command.
@node Command Files
@section Command files
@cindex command files
A command file for @value{GDBN} is a file of lines that are @value{GDBN}
commands. Comments (lines starting with @kbd{#}) may also be included.
An empty line in a command file does nothing; it does not mean to repeat
the last command, as it would from the terminal.
@cindex init file
@cindex @file{.gdbinit}
@cindex @file{gdb.ini}
When you start @value{GDBN}, it automatically executes commands from its
@dfn{init files}, normally called @file{.gdbinit}@footnote{The DJGPP
port of @value{GDBN} uses the name @file{gdb.ini} instead, due to the
limitations of file names imposed by DOS filesystems.}.
During startup, @value{GDBN} does the following:
@enumerate
@item
Reads the init file (if any) in your home directory@footnote{On
DOS/Windows systems, the home directory is the one pointed to by the
@code{HOME} environment variable.}.
@item
Processes command line options and operands.
@item
Reads the init file (if any) in the current working directory.
@item
Reads command files specified by the @samp{-x} option.
@end enumerate
The init file in your home directory can set options (such as @samp{set
complaints}) that affect subsequent processing of command line options
and operands. Init files are not executed if you use the @samp{-nx}
option (@pxref{Mode Options, ,Choosing modes}).
@cindex init file name
On some configurations of @value{GDBN}, the init file is known by a
different name (these are typically environments where a specialized
form of @value{GDBN} may need to coexist with other forms, hence a
different name for the specialized version's init file). These are the
environments with special init file names:
@cindex @file{.vxgdbinit}
@itemize @bullet
@item
VxWorks (Wind River Systems real-time OS): @file{.vxgdbinit}
@cindex @file{.os68gdbinit}
@item
OS68K (Enea Data Systems real-time OS): @file{.os68gdbinit}
@cindex @file{.esgdbinit}
@item
ES-1800 (Ericsson Telecom AB M68000 emulator): @file{.esgdbinit}
@end itemize
You can also request the execution of a command file with the
@code{source} command:
@table @code
@kindex source
@item source @var{filename}
Execute the command file @var{filename}.
@end table
The lines in a command file are executed sequentially. They are not
printed as they are executed. An error in any command terminates
execution of the command file and control is returned to the console.
Commands that would ask for confirmation if used interactively proceed
without asking when used in a command file. Many @value{GDBN} commands that
normally print messages to say what they are doing omit the messages
when called from command files.
@value{GDBN} also accepts command input from standard input. In this
mode, normal output goes to standard output and error output goes to
standard error. Errors in a command file supplied on standard input do
not terminate execution of the command file --- execution continues with
the next command.
@smallexample
gdb < cmds > log 2>&1
@end smallexample
(The syntax above will vary depending on the shell used.) This example
will execute commands from the file @file{cmds}. All output and errors
would be directed to @file{log}.
@node Output
@section Commands for controlled output
During the execution of a command file or a user-defined command, normal
@value{GDBN} output is suppressed; the only output that appears is what is
explicitly printed by the commands in the definition. This section
describes three commands useful for generating exactly the output you
want.
@table @code
@kindex echo
@item echo @var{text}
@c I do not consider backslash-space a standard C escape sequence
@c because it is not in ANSI.
Print @var{text}. Nonprinting characters can be included in
@var{text} using C escape sequences, such as @samp{\n} to print a
newline. @strong{No newline is printed unless you specify one.}
In addition to the standard C escape sequences, a backslash followed
by a space stands for a space. This is useful for displaying a
string with spaces at the beginning or the end, since leading and
trailing spaces are otherwise trimmed from all arguments.
To print @samp{@w{ }and foo =@w{ }}, use the command
@samp{echo \@w{ }and foo = \@w{ }}.
A backslash at the end of @var{text} can be used, as in C, to continue
the command onto subsequent lines. For example,
@smallexample
echo This is some text\n\
which is continued\n\
onto several lines.\n
@end smallexample
produces the same output as
@smallexample
echo This is some text\n
echo which is continued\n
echo onto several lines.\n
@end smallexample
@kindex output
@item output @var{expression}
Print the value of @var{expression} and nothing but that value: no
newlines, no @samp{$@var{nn} = }. The value is not entered in the
value history either. @xref{Expressions, ,Expressions}, for more information
on expressions.
@item output/@var{fmt} @var{expression}
Print the value of @var{expression} in format @var{fmt}. You can use
the same formats as for @code{print}. @xref{Output Formats,,Output
formats}, for more information.
@kindex printf
@item printf @var{string}, @var{expressions}@dots{}
Print the values of the @var{expressions} under the control of
@var{string}. The @var{expressions} are separated by commas and may be
either numbers or pointers. Their values are printed as specified by
@var{string}, exactly as if your program were to execute the C
subroutine
@c FIXME: the above implies that at least all ANSI C formats are
@c supported, but it isn't true: %E and %G don't work (or so it seems).
@c Either this is a bug, or the manual should document what formats are
@c supported.
@smallexample
printf (@var{string}, @var{expressions}@dots{});
@end smallexample
For example, you can print two values in hex like this:
@smallexample
printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
@end smallexample
The only backslash-escape sequences that you can use in the format
string are the simple ones that consist of backslash followed by a
letter.
@end table
@node TUI
@chapter @value{GDBN} Text User Interface
@cindex TUI
@menu
* TUI Overview:: TUI overview
* TUI Keys:: TUI key bindings
* TUI Single Key Mode:: TUI single key mode
* TUI Commands:: TUI specific commands
* TUI Configuration:: TUI configuration variables
@end menu
The @value{GDBN} Text User Interface, TUI in short,
is a terminal interface which uses the @code{curses} library
to show the source file, the assembly output, the program registers
and @value{GDBN} commands in separate text windows.
The TUI is available only when @value{GDBN} is configured
with the @code{--enable-tui} configure option (@pxref{Configure Options}).
@node TUI Overview
@section TUI overview
The TUI has two display modes that can be switched while
@value{GDBN} runs:
@itemize @bullet
@item
A curses (or TUI) mode in which it displays several text
windows on the terminal.
@item
A standard mode which corresponds to the @value{GDBN} configured without
the TUI.
@end itemize
In the TUI mode, @value{GDBN} can display several text window
on the terminal:
@table @emph
@item command
This window is the @value{GDBN} command window with the @value{GDBN}
prompt and the @value{GDBN} outputs. The @value{GDBN} input is still
managed using readline but through the TUI. The @emph{command}
window is always visible.
@item source
The source window shows the source file of the program. The current
line as well as active breakpoints are displayed in this window.
@item assembly
The assembly window shows the disassembly output of the program.
@item register
This window shows the processor registers. It detects when
a register is changed and when this is the case, registers that have
changed are highlighted.
@end table
The source and assembly windows show the current program position
by highlighting the current line and marking them with the @samp{>} marker.
Breakpoints are also indicated with two markers. A first one
indicates the breakpoint type:
@table @code
@item B
Breakpoint which was hit at least once.
@item b
Breakpoint which was never hit.
@item H
Hardware breakpoint which was hit at least once.
@item h
Hardware breakpoint which was never hit.
@end table
The second marker indicates whether the breakpoint is enabled or not:
@table @code
@item +
Breakpoint is enabled.
@item -
Breakpoint is disabled.
@end table
The source, assembly and register windows are attached to the thread
and the frame position. They are updated when the current thread
changes, when the frame changes or when the program counter changes.
These three windows are arranged by the TUI according to several
layouts. The layout defines which of these three windows are visible.
The following layouts are available:
@itemize @bullet
@item
source
@item
assembly
@item
source and assembly
@item
source and registers
@item
assembly and registers
@end itemize
On top of the command window a status line gives various information
concerning the current process begin debugged. The status line is
updated when the information it shows changes. The following fields
are displayed:
@table @emph
@item target
Indicates the current gdb target
(@pxref{Targets, ,Specifying a Debugging Target}).
@item process
Gives information about the current process or thread number.
When no process is being debugged, this field is set to @code{No process}.
@item function
Gives the current function name for the selected frame.
The name is demangled if demangling is turned on (@pxref{Print Settings}).
When there is no symbol corresponding to the current program counter
the string @code{??} is displayed.
@item line
Indicates the current line number for the selected frame.
When the current line number is not known the string @code{??} is displayed.
@item pc
Indicates the current program counter address.
@end table
@node TUI Keys
@section TUI Key Bindings
@cindex TUI key bindings
The TUI installs several key bindings in the readline keymaps
(@pxref{Command Line Editing}).
They allow to leave or enter in the TUI mode or they operate
directly on the TUI layout and windows. The TUI also provides
a @emph{SingleKey} keymap which binds several keys directly to
@value{GDBN} commands. The following key bindings
are installed for both TUI mode and the @value{GDBN} standard mode.
@table @kbd
@kindex C-x C-a
@item C-x C-a
@kindex C-x a
@itemx C-x a
@kindex C-x A
@itemx C-x A
Enter or leave the TUI mode. When the TUI mode is left,
the curses window management is left and @value{GDBN} operates using
its standard mode writing on the terminal directly. When the TUI
mode is entered, the control is given back to the curses windows.
The screen is then refreshed.
@kindex C-x 1
@item C-x 1
Use a TUI layout with only one window. The layout will
either be @samp{source} or @samp{assembly}. When the TUI mode
is not active, it will switch to the TUI mode.
Think of this key binding as the Emacs @kbd{C-x 1} binding.
@kindex C-x 2
@item C-x 2
Use a TUI layout with at least two windows. When the current
layout shows already two windows, a next layout with two windows is used.
When a new layout is chosen, one window will always be common to the
previous layout and the new one.
Think of it as the Emacs @kbd{C-x 2} binding.
@kindex C-x s
@item C-x s
Use the TUI @emph{SingleKey} keymap that binds single key to gdb commands
(@pxref{TUI Single Key Mode}).
@end table
The following key bindings are handled only by the TUI mode:
@table @key
@kindex PgUp
@item PgUp
Scroll the active window one page up.
@kindex PgDn
@item PgDn
Scroll the active window one page down.
@kindex Up
@item Up
Scroll the active window one line up.
@kindex Down
@item Down
Scroll the active window one line down.
@kindex Left
@item Left
Scroll the active window one column left.
@kindex Right
@item Right
Scroll the active window one column right.
@kindex C-L
@item C-L
Refresh the screen.
@end table
In the TUI mode, the arrow keys are used by the active window
for scrolling. This means they are not available for readline. It is
necessary to use other readline key bindings such as @key{C-p}, @key{C-n},
@key{C-b} and @key{C-f}.
@node TUI Single Key Mode
@section TUI Single Key Mode
@cindex TUI single key mode
The TUI provides a @emph{SingleKey} mode in which it installs a particular
key binding in the readline keymaps to connect single keys to
some gdb commands.
@table @kbd
@kindex c @r{(SingleKey TUI key)}
@item c
continue
@kindex d @r{(SingleKey TUI key)}
@item d
down
@kindex f @r{(SingleKey TUI key)}
@item f
finish
@kindex n @r{(SingleKey TUI key)}
@item n
next
@kindex q @r{(SingleKey TUI key)}
@item q
exit the @emph{SingleKey} mode.
@kindex r @r{(SingleKey TUI key)}
@item r
run
@kindex s @r{(SingleKey TUI key)}
@item s
step
@kindex u @r{(SingleKey TUI key)}
@item u
up
@kindex v @r{(SingleKey TUI key)}
@item v
info locals
@kindex w @r{(SingleKey TUI key)}
@item w
where
@end table
Other keys temporarily switch to the @value{GDBN} command prompt.
The key that was pressed is inserted in the editing buffer so that
it is possible to type most @value{GDBN} commands without interaction
with the TUI @emph{SingleKey} mode. Once the command is entered the TUI
@emph{SingleKey} mode is restored. The only way to permanently leave
this mode is by hitting @key{q} or @samp{@key{C-x} @key{s}}.
@node TUI Commands
@section TUI specific commands
@cindex TUI commands
The TUI has specific commands to control the text windows.
These commands are always available, that is they do not depend on
the current terminal mode in which @value{GDBN} runs. When @value{GDBN}
is in the standard mode, using these commands will automatically switch
in the TUI mode.
@table @code
@item info win
@kindex info win
List and give the size of all displayed windows.
@item layout next
@kindex layout next
Display the next layout.
@item layout prev
@kindex layout prev
Display the previous layout.
@item layout src
@kindex layout src
Display the source window only.
@item layout asm
@kindex layout asm
Display the assembly window only.
@item layout split
@kindex layout split
Display the source and assembly window.
@item layout regs
@kindex layout regs
Display the register window together with the source or assembly window.
@item focus next | prev | src | asm | regs | split
@kindex focus
Set the focus to the named window.
This command allows to change the active window so that scrolling keys
can be affected to another window.
@item refresh
@kindex refresh
Refresh the screen. This is similar to using @key{C-L} key.
@item update
@kindex update
Update the source window and the current execution point.
@item winheight @var{name} +@var{count}
@itemx winheight @var{name} -@var{count}
@kindex winheight
Change the height of the window @var{name} by @var{count}
lines. Positive counts increase the height, while negative counts
decrease it.
@end table
@node TUI Configuration
@section TUI configuration variables
@cindex TUI configuration variables
The TUI has several configuration variables that control the
appearance of windows on the terminal.
@table @code
@item set tui border-kind @var{kind}
@kindex set tui border-kind
Select the border appearance for the source, assembly and register windows.
The possible values are the following:
@table @code
@item space
Use a space character to draw the border.
@item ascii
Use ascii characters + - and | to draw the border.
@item acs
Use the Alternate Character Set to draw the border. The border is
drawn using character line graphics if the terminal supports them.
@end table
@item set tui active-border-mode @var{mode}
@kindex set tui active-border-mode
Select the attributes to display the border of the active window.
The possible values are @code{normal}, @code{standout}, @code{reverse},
@code{half}, @code{half-standout}, @code{bold} and @code{bold-standout}.
@item set tui border-mode @var{mode}
@kindex set tui border-mode
Select the attributes to display the border of other windows.
The @var{mode} can be one of the following:
@table @code
@item normal
Use normal attributes to display the border.
@item standout
Use standout mode.
@item reverse
Use reverse video mode.
@item half
Use half bright mode.
@item half-standout
Use half bright and standout mode.
@item bold
Use extra bright or bold mode.
@item bold-standout
Use extra bright or bold and standout mode.
@end table
@end table
@node Emacs
@chapter Using @value{GDBN} under @sc{gnu} Emacs
@cindex Emacs
@cindex @sc{gnu} Emacs
A special interface allows you to use @sc{gnu} Emacs to view (and
edit) the source files for the program you are debugging with
@value{GDBN}.
To use this interface, use the command @kbd{M-x gdb} in Emacs. Give the
executable file you want to debug as an argument. This command starts
@value{GDBN} as a subprocess of Emacs, with input and output through a newly
created Emacs buffer.
@c (Do not use the @code{-tui} option to run @value{GDBN} from Emacs.)
Using @value{GDBN} under Emacs is just like using @value{GDBN} normally except for two
things:
@itemize @bullet
@item
All ``terminal'' input and output goes through the Emacs buffer.
@end itemize
This applies both to @value{GDBN} commands and their output, and to the input
and output done by the program you are debugging.
This is useful because it means that you can copy the text of previous
commands and input them again; you can even use parts of the output
in this way.
All the facilities of Emacs' Shell mode are available for interacting
with your program. In particular, you can send signals the usual
way---for example, @kbd{C-c C-c} for an interrupt, @kbd{C-c C-z} for a
stop.
@itemize @bullet
@item
@value{GDBN} displays source code through Emacs.
@end itemize
Each time @value{GDBN} displays a stack frame, Emacs automatically finds the
source file for that frame and puts an arrow (@samp{=>}) at the
left margin of the current line. Emacs uses a separate buffer for
source display, and splits the screen to show both your @value{GDBN} session
and the source.
Explicit @value{GDBN} @code{list} or search commands still produce output as
usual, but you probably have no reason to use them from Emacs.
@quotation
@emph{Warning:} If the directory where your program resides is not your
current directory, it can be easy to confuse Emacs about the location of
the source files, in which case the auxiliary display buffer does not
appear to show your source. @value{GDBN} can find programs by searching your
environment's @code{PATH} variable, so the @value{GDBN} input and output
session proceeds normally; but Emacs does not get enough information
back from @value{GDBN} to locate the source files in this situation. To
avoid this problem, either start @value{GDBN} mode from the directory where
your program resides, or specify an absolute file name when prompted for the
@kbd{M-x gdb} argument.
A similar confusion can result if you use the @value{GDBN} @code{file} command to
switch to debugging a program in some other location, from an existing
@value{GDBN} buffer in Emacs.
@end quotation
By default, @kbd{M-x gdb} calls the program called @file{gdb}. If
you need to call @value{GDBN} by a different name (for example, if you keep
several configurations around, with different names) you can set the
Emacs variable @code{gdb-command-name}; for example,
@smallexample
(setq gdb-command-name "mygdb")
@end smallexample
@noindent
(preceded by @kbd{M-:} or @kbd{ESC :}, or typed in the @code{*scratch*} buffer, or
in your @file{.emacs} file) makes Emacs call the program named
``@code{mygdb}'' instead.
In the @value{GDBN} I/O buffer, you can use these special Emacs commands in
addition to the standard Shell mode commands:
@table @kbd
@item C-h m
Describe the features of Emacs' @value{GDBN} Mode.
@item M-s
Execute to another source line, like the @value{GDBN} @code{step} command; also
update the display window to show the current file and location.
@item M-n
Execute to next source line in this function, skipping all function
calls, like the @value{GDBN} @code{next} command. Then update the display window
to show the current file and location.
@item M-i
Execute one instruction, like the @value{GDBN} @code{stepi} command; update
display window accordingly.
@item M-x gdb-nexti
Execute to next instruction, using the @value{GDBN} @code{nexti} command; update
display window accordingly.
@item C-c C-f
Execute until exit from the selected stack frame, like the @value{GDBN}
@code{finish} command.
@item M-c
Continue execution of your program, like the @value{GDBN} @code{continue}
command.
@emph{Warning:} In Emacs v19, this command is @kbd{C-c C-p}.
@item M-u
Go up the number of frames indicated by the numeric argument
(@pxref{Arguments, , Numeric Arguments, Emacs, The @sc{gnu} Emacs Manual}),
like the @value{GDBN} @code{up} command.
@emph{Warning:} In Emacs v19, this command is @kbd{C-c C-u}.
@item M-d
Go down the number of frames indicated by the numeric argument, like the
@value{GDBN} @code{down} command.
@emph{Warning:} In Emacs v19, this command is @kbd{C-c C-d}.
@item C-x &
Read the number where the cursor is positioned, and insert it at the end
of the @value{GDBN} I/O buffer. For example, if you wish to disassemble code
around an address that was displayed earlier, type @kbd{disassemble};
then move the cursor to the address display, and pick up the
argument for @code{disassemble} by typing @kbd{C-x &}.
You can customize this further by defining elements of the list
@code{gdb-print-command}; once it is defined, you can format or
otherwise process numbers picked up by @kbd{C-x &} before they are
inserted. A numeric argument to @kbd{C-x &} indicates that you
wish special formatting, and also acts as an index to pick an element of the
list. If the list element is a string, the number to be inserted is
formatted using the Emacs function @code{format}; otherwise the number
is passed as an argument to the corresponding list element.
@end table
In any source file, the Emacs command @kbd{C-x SPC} (@code{gdb-break})
tells @value{GDBN} to set a breakpoint on the source line point is on.
If you accidentally delete the source-display buffer, an easy way to get
it back is to type the command @code{f} in the @value{GDBN} buffer, to
request a frame display; when you run under Emacs, this recreates
the source buffer if necessary to show you the context of the current
frame.
The source files displayed in Emacs are in ordinary Emacs buffers
which are visiting the source files in the usual way. You can edit
the files with these buffers if you wish; but keep in mind that @value{GDBN}
communicates with Emacs in terms of line numbers. If you add or
delete lines from the text, the line numbers that @value{GDBN} knows cease
to correspond properly with the code.
@c The following dropped because Epoch is nonstandard. Reactivate
@c if/when v19 does something similar. ---doc@cygnus.com 19dec1990
@ignore
@kindex Emacs Epoch environment
@kindex Epoch
@kindex inspect
Version 18 of @sc{gnu} Emacs has a built-in window system
called the @code{epoch}
environment. Users of this environment can use a new command,
@code{inspect} which performs identically to @code{print} except that
each value is printed in its own window.
@end ignore
@include annotate.texi
@include gdbmi.texinfo
@node GDB Bugs
@chapter Reporting Bugs in @value{GDBN}
@cindex bugs in @value{GDBN}
@cindex reporting bugs in @value{GDBN}
Your bug reports play an essential role in making @value{GDBN} reliable.
Reporting a bug may help you by bringing a solution to your problem, or it
may not. But in any case the principal function of a bug report is to help
the entire community by making the next version of @value{GDBN} work better. Bug
reports are your contribution to the maintenance of @value{GDBN}.
In order for a bug report to serve its purpose, you must include the
information that enables us to fix the bug.
@menu
* Bug Criteria:: Have you found a bug?
* Bug Reporting:: How to report bugs
@end menu
@node Bug Criteria
@section Have you found a bug?
@cindex bug criteria
If you are not sure whether you have found a bug, here are some guidelines:
@itemize @bullet
@cindex fatal signal
@cindex debugger crash
@cindex crash of debugger
@item
If the debugger gets a fatal signal, for any input whatever, that is a
@value{GDBN} bug. Reliable debuggers never crash.
@cindex error on valid input
@item
If @value{GDBN} produces an error message for valid input, that is a
bug. (Note that if you're cross debugging, the problem may also be
somewhere in the connection to the target.)
@cindex invalid input
@item
If @value{GDBN} does not produce an error message for invalid input,
that is a bug. However, you should note that your idea of
``invalid input'' might be our idea of ``an extension'' or ``support
for traditional practice''.
@item
If you are an experienced user of debugging tools, your suggestions
for improvement of @value{GDBN} are welcome in any case.
@end itemize
@node Bug Reporting
@section How to report bugs
@cindex bug reports
@cindex @value{GDBN} bugs, reporting
A number of companies and individuals offer support for @sc{gnu} products.
If you obtained @value{GDBN} from a support organization, we recommend you
contact that organization first.
You can find contact information for many support companies and
individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.
@c should add a web page ref...
In any event, we also recommend that you submit bug reports for
@value{GDBN}. The prefered method is to submit them directly using
@uref{http://www.gnu.org/software/gdb/bugs/, @value{GDBN}'s Bugs web
page}. Alternatively, the @email{bug-gdb@@gnu.org, e-mail gateway} can
be used.
@strong{Do not send bug reports to @samp{info-gdb}, or to
@samp{help-gdb}, or to any newsgroups.} Most users of @value{GDBN} do
not want to receive bug reports. Those that do have arranged to receive
@samp{bug-gdb}.
The mailing list @samp{bug-gdb} has a newsgroup @samp{gnu.gdb.bug} which
serves as a repeater. The mailing list and the newsgroup carry exactly
the same messages. Often people think of posting bug reports to the
newsgroup instead of mailing them. This appears to work, but it has one
problem which can be crucial: a newsgroup posting often lacks a mail
path back to the sender. Thus, if we need to ask for more information,
we may be unable to reach you. For this reason, it is better to send
bug reports to the mailing list.
The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}. If you are not sure whether to state a
fact or leave it out, state it!
Often people omit facts because they think they know what causes the
problem and assume that some details do not matter. Thus, you might
assume that the name of the variable you use in an example does not matter.
Well, probably it does not, but one cannot be sure. Perhaps the bug is a
stray memory reference which happens to fetch from the location where that
name is stored in memory; perhaps, if the name were different, the contents
of that location would fool the debugger into doing the right thing despite
the bug. Play it safe and give a specific, complete example. That is the
easiest thing for you to do, and the most helpful.
Keep in mind that the purpose of a bug report is to enable us to fix the
bug. It may be that the bug has been reported previously, but neither
you nor we can know that unless your bug report is complete and
self-contained.
Sometimes people give a few sketchy facts and ask, ``Does this ring a
bell?'' Those bug reports are useless, and we urge everyone to
@emph{refuse to respond to them} except to chide the sender to report
bugs properly.
To enable us to fix the bug, you should include all these things:
@itemize @bullet
@item
The version of @value{GDBN}. @value{GDBN} announces it if you start
with no arguments; you can also print it at any time using @code{show
version}.
Without this, we will not know whether there is any point in looking for
the bug in the current version of @value{GDBN}.
@item
The type of machine you are using, and the operating system name and
version number.
@item
What compiler (and its version) was used to compile @value{GDBN}---e.g.
``@value{GCC}--2.8.1''.
@item
What compiler (and its version) was used to compile the program you are
debugging---e.g. ``@value{GCC}--2.8.1'', or ``HP92453-01 A.10.32.03 HP
C Compiler''. For GCC, you can say @code{gcc --version} to get this
information; for other compilers, see the documentation for those
compilers.
@item
The command arguments you gave the compiler to compile your example and
observe the bug. For example, did you use @samp{-O}? To guarantee
you will not omit something important, list them all. A copy of the
Makefile (or the output from make) is sufficient.
If we were to try to guess the arguments, we would probably guess wrong
and then we might not encounter the bug.
@item
A complete input script, and all necessary source files, that will
reproduce the bug.
@item
A description of what behavior you observe that you believe is
incorrect. For example, ``It gets a fatal signal.''
Of course, if the bug is that @value{GDBN} gets a fatal signal, then we
will certainly notice it. But if the bug is incorrect output, we might
not notice unless it is glaringly wrong. You might as well not give us
a chance to make a mistake.
Even if the problem you experience is a fatal signal, you should still
say so explicitly. Suppose something strange is going on, such as, your
copy of @value{GDBN} is out of synch, or you have encountered a bug in
the C library on your system. (This has happened!) Your copy might
crash and ours would not. If you told us to expect a crash, then when
ours fails to crash, we would know that the bug was not happening for
us. If you had not told us to expect a crash, then we would not be able
to draw any conclusion from our observations.
@item
If you wish to suggest changes to the @value{GDBN} source, send us context
diffs. If you even discuss something in the @value{GDBN} source, refer to
it by context, not by line number.
The line numbers in our development sources will not match those in your
sources. Your line numbers would convey no useful information to us.
@end itemize
Here are some things that are not necessary:
@itemize @bullet
@item
A description of the envelope of the bug.
Often people who encounter a bug spend a lot of time investigating
which changes to the input file will make the bug go away and which
changes will not affect it.
This is often time consuming and not very useful, because the way we
will find the bug is by running a single example under the debugger
with breakpoints, not by pure deduction from a series of examples.
We recommend that you save your time for something else.
Of course, if you can find a simpler example to report @emph{instead}
of the original one, that is a convenience for us. Errors in the
output will be easier to spot, running under the debugger will take
less time, and so on.
However, simplification is not vital; if you do not want to do this,
report the bug anyway and send us the entire test case you used.
@item
A patch for the bug.
A patch for the bug does help us if it is a good one. But do not omit
the necessary information, such as the test case, on the assumption that
a patch is all we need. We might see problems with your patch and decide
to fix the problem another way, or we might not understand it at all.
Sometimes with a program as complicated as @value{GDBN} it is very hard to
construct an example that will make the program follow a certain path
through the code. If you do not send us the example, we will not be able
to construct one, so we will not be able to verify that the bug is fixed.
And if we cannot understand what bug you are trying to fix, or why your
patch should be an improvement, we will not install it. A test case will
help us to understand.
@item
A guess about what the bug is or what it depends on.
Such guesses are usually wrong. Even we cannot guess right about such
things without first using the debugger to find the facts.
@end itemize
@c The readline documentation is distributed with the readline code
@c and consists of the two following files:
@c rluser.texinfo
@c inc-hist.texinfo
@c Use -I with makeinfo to point to the appropriate directory,
@c environment var TEXINPUTS with TeX.
@include rluser.texinfo
@include inc-hist.texinfo
@node Formatting Documentation
@appendix Formatting Documentation
@cindex @value{GDBN} reference card
@cindex reference card
The @value{GDBN} 4 release includes an already-formatted reference card, ready
for printing with PostScript or Ghostscript, in the @file{gdb}
subdirectory of the main source directory@footnote{In
@file{gdb-@value{GDBVN}/gdb/refcard.ps} of the version @value{GDBVN}
release.}. If you can use PostScript or Ghostscript with your printer,
you can print the reference card immediately with @file{refcard.ps}.
The release also includes the source for the reference card. You
can format it, using @TeX{}, by typing:
@smallexample
make refcard.dvi
@end smallexample
The @value{GDBN} reference card is designed to print in @dfn{landscape}
mode on US ``letter'' size paper;
that is, on a sheet 11 inches wide by 8.5 inches
high. You will need to specify this form of printing as an option to
your @sc{dvi} output program.
@cindex documentation
All the documentation for @value{GDBN} comes as part of the machine-readable
distribution. The documentation is written in Texinfo format, which is
a documentation system that uses a single source file to produce both
on-line information and a printed manual. You can use one of the Info
formatting commands to create the on-line version of the documentation
and @TeX{} (or @code{texi2roff}) to typeset the printed version.
@value{GDBN} includes an already formatted copy of the on-line Info
version of this manual in the @file{gdb} subdirectory. The main Info
file is @file{gdb-@value{GDBVN}/gdb/gdb.info}, and it refers to
subordinate files matching @samp{gdb.info*} in the same directory. If
necessary, you can print out these files, or read them with any editor;
but they are easier to read using the @code{info} subsystem in @sc{gnu}
Emacs or the standalone @code{info} program, available as part of the
@sc{gnu} Texinfo distribution.
If you want to format these Info files yourself, you need one of the
Info formatting programs, such as @code{texinfo-format-buffer} or
@code{makeinfo}.
If you have @code{makeinfo} installed, and are in the top level
@value{GDBN} source directory (@file{gdb-@value{GDBVN}}, in the case of
version @value{GDBVN}), you can make the Info file by typing:
@smallexample
cd gdb
make gdb.info
@end smallexample
If you want to typeset and print copies of this manual, you need @TeX{},
a program to print its @sc{dvi} output files, and @file{texinfo.tex}, the
Texinfo definitions file.
@TeX{} is a typesetting program; it does not print files directly, but
produces output files called @sc{dvi} files. To print a typeset
document, you need a program to print @sc{dvi} files. If your system
has @TeX{} installed, chances are it has such a program. The precise
command to use depends on your system; @kbd{lpr -d} is common; another
(for PostScript devices) is @kbd{dvips}. The @sc{dvi} print command may
require a file name without any extension or a @samp{.dvi} extension.
@TeX{} also requires a macro definitions file called
@file{texinfo.tex}. This file tells @TeX{} how to typeset a document
written in Texinfo format. On its own, @TeX{} cannot either read or
typeset a Texinfo file. @file{texinfo.tex} is distributed with GDB
and is located in the @file{gdb-@var{version-number}/texinfo}
directory.
If you have @TeX{} and a @sc{dvi} printer program installed, you can
typeset and print this manual. First switch to the the @file{gdb}
subdirectory of the main source directory (for example, to
@file{gdb-@value{GDBVN}/gdb}) and type:
@smallexample
make gdb.dvi
@end smallexample
Then give @file{gdb.dvi} to your @sc{dvi} printing program.
@node Installing GDB
@appendix Installing @value{GDBN}
@cindex configuring @value{GDBN}
@cindex installation
@value{GDBN} comes with a @code{configure} script that automates the process
of preparing @value{GDBN} for installation; you can then use @code{make} to
build the @code{gdb} program.
@iftex
@c irrelevant in info file; it's as current as the code it lives with.
@footnote{If you have a more recent version of @value{GDBN} than @value{GDBVN},
look at the @file{README} file in the sources; we may have improved the
installation procedures since publishing this manual.}
@end iftex
The @value{GDBN} distribution includes all the source code you need for
@value{GDBN} in a single directory, whose name is usually composed by
appending the version number to @samp{gdb}.
For example, the @value{GDBN} version @value{GDBVN} distribution is in the
@file{gdb-@value{GDBVN}} directory. That directory contains:
@table @code
@item gdb-@value{GDBVN}/configure @r{(and supporting files)}
script for configuring @value{GDBN} and all its supporting libraries
@item gdb-@value{GDBVN}/gdb
the source specific to @value{GDBN} itself
@item gdb-@value{GDBVN}/bfd
source for the Binary File Descriptor library
@item gdb-@value{GDBVN}/include
@sc{gnu} include files
@item gdb-@value{GDBVN}/libiberty
source for the @samp{-liberty} free software library
@item gdb-@value{GDBVN}/opcodes
source for the library of opcode tables and disassemblers
@item gdb-@value{GDBVN}/readline
source for the @sc{gnu} command-line interface
@item gdb-@value{GDBVN}/glob
source for the @sc{gnu} filename pattern-matching subroutine
@item gdb-@value{GDBVN}/mmalloc
source for the @sc{gnu} memory-mapped malloc package
@end table
The simplest way to configure and build @value{GDBN} is to run @code{configure}
from the @file{gdb-@var{version-number}} source directory, which in
this example is the @file{gdb-@value{GDBVN}} directory.
First switch to the @file{gdb-@var{version-number}} source directory
if you are not already in it; then run @code{configure}. Pass the
identifier for the platform on which @value{GDBN} will run as an
argument.
For example:
@smallexample
cd gdb-@value{GDBVN}
./configure @var{host}
make
@end smallexample
@noindent
where @var{host} is an identifier such as @samp{sun4} or
@samp{decstation}, that identifies the platform where @value{GDBN} will run.
(You can often leave off @var{host}; @code{configure} tries to guess the
correct value by examining your system.)
Running @samp{configure @var{host}} and then running @code{make} builds the
@file{bfd}, @file{readline}, @file{mmalloc}, and @file{libiberty}
libraries, then @code{gdb} itself. The configured source files, and the
binaries, are left in the corresponding source directories.
@need 750
@code{configure} is a Bourne-shell (@code{/bin/sh}) script; if your
system does not recognize this automatically when you run a different
shell, you may need to run @code{sh} on it explicitly:
@smallexample
sh configure @var{host}
@end smallexample
If you run @code{configure} from a directory that contains source
directories for multiple libraries or programs, such as the
@file{gdb-@value{GDBVN}} source directory for version @value{GDBVN}, @code{configure}
creates configuration files for every directory level underneath (unless
you tell it not to, with the @samp{--norecursion} option).
You can run the @code{configure} script from any of the
subordinate directories in the @value{GDBN} distribution if you only want to
configure that subdirectory, but be sure to specify a path to it.
For example, with version @value{GDBVN}, type the following to configure only
the @code{bfd} subdirectory:
@smallexample
@group
cd gdb-@value{GDBVN}/bfd
../configure @var{host}
@end group
@end smallexample
You can install @code{@value{GDBP}} anywhere; it has no hardwired paths.
However, you should make sure that the shell on your path (named by
the @samp{SHELL} environment variable) is publicly readable. Remember
that @value{GDBN} uses the shell to start your program---some systems refuse to
let @value{GDBN} debug child processes whose programs are not readable.
@menu
* Separate Objdir:: Compiling @value{GDBN} in another directory
* Config Names:: Specifying names for hosts and targets
* Configure Options:: Summary of options for configure
@end menu
@node Separate Objdir
@section Compiling @value{GDBN} in another directory
If you want to run @value{GDBN} versions for several host or target machines,
you need a different @code{gdb} compiled for each combination of
host and target. @code{configure} is designed to make this easy by
allowing you to generate each configuration in a separate subdirectory,
rather than in the source directory. If your @code{make} program
handles the @samp{VPATH} feature (@sc{gnu} @code{make} does), running
@code{make} in each of these directories builds the @code{gdb}
program specified there.
To build @code{gdb} in a separate directory, run @code{configure}
with the @samp{--srcdir} option to specify where to find the source.
(You also need to specify a path to find @code{configure}
itself from your working directory. If the path to @code{configure}
would be the same as the argument to @samp{--srcdir}, you can leave out
the @samp{--srcdir} option; it is assumed.)
For example, with version @value{GDBVN}, you can build @value{GDBN} in a
separate directory for a Sun 4 like this:
@smallexample
@group
cd gdb-@value{GDBVN}
mkdir ../gdb-sun4
cd ../gdb-sun4
../gdb-@value{GDBVN}/configure sun4
make
@end group
@end smallexample
When @code{configure} builds a configuration using a remote source
directory, it creates a tree for the binaries with the same structure
(and using the same names) as the tree under the source directory. In
the example, you'd find the Sun 4 library @file{libiberty.a} in the
directory @file{gdb-sun4/libiberty}, and @value{GDBN} itself in
@file{gdb-sun4/gdb}.
One popular reason to build several @value{GDBN} configurations in separate
directories is to configure @value{GDBN} for cross-compiling (where
@value{GDBN} runs on one machine---the @dfn{host}---while debugging
programs that run on another machine---the @dfn{target}).
You specify a cross-debugging target by
giving the @samp{--target=@var{target}} option to @code{configure}.
When you run @code{make} to build a program or library, you must run
it in a configured directory---whatever directory you were in when you
called @code{configure} (or one of its subdirectories).
The @code{Makefile} that @code{configure} generates in each source
directory also runs recursively. If you type @code{make} in a source
directory such as @file{gdb-@value{GDBVN}} (or in a separate configured
directory configured with @samp{--srcdir=@var{dirname}/gdb-@value{GDBVN}}), you
will build all the required libraries, and then build GDB.
When you have multiple hosts or targets configured in separate
directories, you can run @code{make} on them in parallel (for example,
if they are NFS-mounted on each of the hosts); they will not interfere
with each other.
@node Config Names
@section Specifying names for hosts and targets
The specifications used for hosts and targets in the @code{configure}
script are based on a three-part naming scheme, but some short predefined
aliases are also supported. The full naming scheme encodes three pieces
of information in the following pattern:
@smallexample
@var{architecture}-@var{vendor}-@var{os}
@end smallexample
For example, you can use the alias @code{sun4} as a @var{host} argument,
or as the value for @var{target} in a @code{--target=@var{target}}
option. The equivalent full name is @samp{sparc-sun-sunos4}.
The @code{configure} script accompanying @value{GDBN} does not provide
any query facility to list all supported host and target names or
aliases. @code{configure} calls the Bourne shell script
@code{config.sub} to map abbreviations to full names; you can read the
script, if you wish, or you can use it to test your guesses on
abbreviations---for example:
@smallexample
% sh config.sub i386-linux
i386-pc-linux-gnu
% sh config.sub alpha-linux
alpha-unknown-linux-gnu
% sh config.sub hp9k700
hppa1.1-hp-hpux
% sh config.sub sun4
sparc-sun-sunos4.1.1
% sh config.sub sun3
m68k-sun-sunos4.1.1
% sh config.sub i986v
Invalid configuration `i986v': machine `i986v' not recognized
@end smallexample
@noindent
@code{config.sub} is also distributed in the @value{GDBN} source
directory (@file{gdb-@value{GDBVN}}, for version @value{GDBVN}).
@node Configure Options
@section @code{configure} options
Here is a summary of the @code{configure} options and arguments that
are most often useful for building @value{GDBN}. @code{configure} also has
several other options not listed here. @inforef{What Configure
Does,,configure.info}, for a full explanation of @code{configure}.
@smallexample
configure @r{[}--help@r{]}
@r{[}--prefix=@var{dir}@r{]}
@r{[}--exec-prefix=@var{dir}@r{]}
@r{[}--srcdir=@var{dirname}@r{]}
@r{[}--norecursion@r{]} @r{[}--rm@r{]}
@r{[}--target=@var{target}@r{]}
@var{host}
@end smallexample
@noindent
You may introduce options with a single @samp{-} rather than
@samp{--} if you prefer; but you may abbreviate option names if you use
@samp{--}.
@table @code
@item --help
Display a quick summary of how to invoke @code{configure}.
@item --prefix=@var{dir}
Configure the source to install programs and files under directory
@file{@var{dir}}.
@item --exec-prefix=@var{dir}
Configure the source to install programs under directory
@file{@var{dir}}.
@c avoid splitting the warning from the explanation:
@need 2000
@item --srcdir=@var{dirname}
@strong{Warning: using this option requires @sc{gnu} @code{make}, or another
@code{make} that implements the @code{VPATH} feature.}@*
Use this option to make configurations in directories separate from the
@value{GDBN} source directories. Among other things, you can use this to
build (or maintain) several configurations simultaneously, in separate
directories. @code{configure} writes configuration specific files in
the current directory, but arranges for them to use the source in the
directory @var{dirname}. @code{configure} creates directories under
the working directory in parallel to the source directories below
@var{dirname}.
@item --norecursion
Configure only the directory level where @code{configure} is executed; do not
propagate configuration to subdirectories.
@item --target=@var{target}
Configure @value{GDBN} for cross-debugging programs running on the specified
@var{target}. Without this option, @value{GDBN} is configured to debug
programs that run on the same machine (@var{host}) as @value{GDBN} itself.
There is no convenient way to generate a list of all available targets.
@item @var{host} @dots{}
Configure @value{GDBN} to run on the specified @var{host}.
There is no convenient way to generate a list of all available hosts.
@end table
There are many other options available as well, but they are generally
needed for special purposes only.
@node Maintenance Commands
@appendix Maintenance Commands
@cindex maintenance commands
@cindex internal commands
In addition to commands intended for @value{GDBN} users, @value{GDBN}
includes a number of commands intended for @value{GDBN} developers.
These commands are provided here for reference.
@table @code
@kindex maint info breakpoints
@item @anchor{maint info breakpoints}maint info breakpoints
Using the same format as @samp{info breakpoints}, display both the
breakpoints you've set explicitly, and those @value{GDBN} is using for
internal purposes. Internal breakpoints are shown with negative
breakpoint numbers. The type column identifies what kind of breakpoint
is shown:
@table @code
@item breakpoint
Normal, explicitly set breakpoint.
@item watchpoint
Normal, explicitly set watchpoint.
@item longjmp
Internal breakpoint, used to handle correctly stepping through
@code{longjmp} calls.
@item longjmp resume
Internal breakpoint at the target of a @code{longjmp}.
@item until
Temporary internal breakpoint used by the @value{GDBN} @code{until} command.
@item finish
Temporary internal breakpoint used by the @value{GDBN} @code{finish} command.
@item shlib events
Shared library events.
@end table
@kindex maint print registers
@kindex maint print raw-registers
@kindex maint print cooked-registers
@item maint print registers
@itemx maint print raw-registers
@itemx maint print cooked-registers
Print @value{GDBN}'s internal register data structures.
The command @samp{maint print raw-registers} includes the contents of
the raw register cache; and the command @samp{maint print
cooked-registers} includes the (cooked) value of all registers.
@xref{Registers,, Registers, gdbint, @value{GDBN} Internals}.
Takes an optional file parameter.
@end table
@node Remote Protocol
@appendix @value{GDBN} Remote Serial Protocol
@menu
* Overview::
* Packets::
* Stop Reply Packets::
* General Query Packets::
* Register Packet Format::
* Examples::
@end menu
@node Overview
@section Overview
There may be occasions when you need to know something about the
protocol---for example, if there is only one serial port to your target
machine, you might want your program to do something special if it
recognizes a packet meant for @value{GDBN}.
In the examples below, @samp{->} and @samp{<-} are used to indicate
transmitted and received data respectfully.
@cindex protocol, @value{GDBN} remote serial
@cindex serial protocol, @value{GDBN} remote
@cindex remote serial protocol
All @value{GDBN} commands and responses (other than acknowledgments) are
sent as a @var{packet}. A @var{packet} is introduced with the character
@samp{$}, the actual @var{packet-data}, and the terminating character
@samp{#} followed by a two-digit @var{checksum}:
@smallexample
@code{$}@var{packet-data}@code{#}@var{checksum}
@end smallexample
@noindent
@cindex checksum, for @value{GDBN} remote
@noindent
The two-digit @var{checksum} is computed as the modulo 256 sum of all
characters between the leading @samp{$} and the trailing @samp{#} (an
eight bit unsigned checksum).
Implementors should note that prior to @value{GDBN} 5.0 the protocol
specification also included an optional two-digit @var{sequence-id}:
@smallexample
@code{$}@var{sequence-id}@code{:}@var{packet-data}@code{#}@var{checksum}
@end smallexample
@cindex sequence-id, for @value{GDBN} remote
@noindent
That @var{sequence-id} was appended to the acknowledgment. @value{GDBN}
has never output @var{sequence-id}s. Stubs that handle packets added
since @value{GDBN} 5.0 must not accept @var{sequence-id}.
@cindex acknowledgment, for @value{GDBN} remote
When either the host or the target machine receives a packet, the first
response expected is an acknowledgment: either @samp{+} (to indicate
the package was received correctly) or @samp{-} (to request
retransmission):
@smallexample
-> @code{$}@var{packet-data}@code{#}@var{checksum}
<- @code{+}
@end smallexample
@noindent
The host (@value{GDBN}) sends @var{command}s, and the target (the
debugging stub incorporated in your program) sends a @var{response}. In
the case of step and continue @var{command}s, the response is only sent
when the operation has completed (the target has again stopped).
@var{packet-data} consists of a sequence of characters with the
exception of @samp{#} and @samp{$} (see @samp{X} packet for additional
exceptions).
Fields within the packet should be separated using @samp{,} @samp{;} or
@cindex remote protocol, field separator
@samp{:}. Except where otherwise noted all numbers are represented in
@sc{hex} with leading zeros suppressed.
Implementors should note that prior to @value{GDBN} 5.0, the character
@samp{:} could not appear as the third character in a packet (as it
would potentially conflict with the @var{sequence-id}).
Response @var{data} can be run-length encoded to save space. A @samp{*}
means that the next character is an @sc{ascii} encoding giving a repeat count
which stands for that many repetitions of the character preceding the
@samp{*}. The encoding is @code{n+29}, yielding a printable character
where @code{n >=3} (which is where rle starts to win). The printable
characters @samp{$}, @samp{#}, @samp{+} and @samp{-} or with a numeric
value greater than 126 should not be used.
Some remote systems have used a different run-length encoding mechanism
loosely refered to as the cisco encoding. Following the @samp{*}
character are two hex digits that indicate the size of the packet.
So:
@smallexample
"@code{0* }"
@end smallexample
@noindent
means the same as "0000".
The error response returned for some packets includes a two character
error number. That number is not well defined.
For any @var{command} not supported by the stub, an empty response
(@samp{$#00}) should be returned. That way it is possible to extend the
protocol. A newer @value{GDBN} can tell if a packet is supported based
on that response.
A stub is required to support the @samp{g}, @samp{G}, @samp{m}, @samp{M},
@samp{c}, and @samp{s} @var{command}s. All other @var{command}s are
optional.
@node Packets
@section Packets
The following table provides a complete list of all currently defined
@var{command}s and their corresponding response @var{data}.
@table @r
@item @code{!} --- extended mode
@cindex @code{!} packet
Enable extended mode. In extended mode, the remote server is made
persistent. The @samp{R} packet is used to restart the program being
debugged.
Reply:
@table @samp
@item OK
The remote target both supports and has enabled extended mode.
@end table
@item @code{?} --- last signal
@cindex @code{?} packet
Indicate the reason the target halted. The reply is the same as for
step and continue.
Reply:
@xref{Stop Reply Packets}, for the reply specifications.
@item @code{a} --- reserved
Reserved for future use.
@item @code{A}@var{arglen}@code{,}@var{argnum}@code{,}@var{arg}@code{,@dots{}} --- set program arguments @strong{(reserved)}
@cindex @code{A} packet
Initialized @samp{argv[]} array passed into program. @var{arglen}
specifies the number of bytes in the hex encoded byte stream @var{arg}.
See @code{gdbserver} for more details.
Reply:
@table @samp
@item OK
@item E@var{NN}
@end table
@item @code{b}@var{baud} --- set baud @strong{(deprecated)}
@cindex @code{b} packet
Change the serial line speed to @var{baud}.
JTC: @emph{When does the transport layer state change? When it's
received, or after the ACK is transmitted. In either case, there are
problems if the command or the acknowledgment packet is dropped.}
Stan: @emph{If people really wanted to add something like this, and get
it working for the first time, they ought to modify ser-unix.c to send
some kind of out-of-band message to a specially-setup stub and have the
switch happen "in between" packets, so that from remote protocol's point
of view, nothing actually happened.}
@item @code{B}@var{addr},@var{mode} --- set breakpoint @strong{(deprecated)}
@cindex @code{B} packet
Set (@var{mode} is @samp{S}) or clear (@var{mode} is @samp{C}) a
breakpoint at @var{addr}. @emph{This has been replaced by the @samp{Z}
and @samp{z} packets.}
@item @code{c}@var{addr} --- continue
@cindex @code{c} packet
@var{addr} is address to resume. If @var{addr} is omitted, resume at
current address.
Reply:
@xref{Stop Reply Packets}, for the reply specifications.
@item @code{C}@var{sig}@code{;}@var{addr} --- continue with signal
@cindex @code{C} packet
Continue with signal @var{sig} (hex signal number). If
@code{;}@var{addr} is omitted, resume at same address.
Reply:
@xref{Stop Reply Packets}, for the reply specifications.
@item @code{d} --- toggle debug @strong{(deprecated)}
@cindex @code{d} packet
Toggle debug flag.
@item @code{D} --- detach
@cindex @code{D} packet
Detach @value{GDBN} from the remote system. Sent to the remote target
before @value{GDBN} disconnects.
Reply:
@table @samp
@item @emph{no response}
@value{GDBN} does not check for any response after sending this packet.
@end table
@item @code{e} --- reserved
Reserved for future use.
@item @code{E} --- reserved
Reserved for future use.
@item @code{f} --- reserved
Reserved for future use.
@item @code{F} --- reserved
Reserved for future use.
@item @code{g} --- read registers
@anchor{read registers packet}
@cindex @code{g} packet
Read general registers.
Reply:
@table @samp
@item @var{XX@dots{}}
Each byte of register data is described by two hex digits. The bytes
with the register are transmitted in target byte order. The size of
each register and their position within the @samp{g} @var{packet} are
determined by the @value{GDBN} internal macros @var{REGISTER_RAW_SIZE}
and @var{REGISTER_NAME} macros. The specification of several standard
@code{g} packets is specified below.
@item E@var{NN}
for an error.
@end table
@item @code{G}@var{XX@dots{}} --- write regs
@cindex @code{G} packet
@xref{read registers packet}, for a description of the @var{XX@dots{}}
data.
Reply:
@table @samp
@item OK
for success
@item E@var{NN}
for an error
@end table
@item @code{h} --- reserved
Reserved for future use.
@item @code{H}@var{c}@var{t@dots{}} --- set thread
@cindex @code{H} packet
Set thread for subsequent operations (@samp{m}, @samp{M}, @samp{g},
@samp{G}, et.al.). @var{c} depends on the operation to be performed: it
should be @samp{c} for step and continue operations, @samp{g} for other
operations. The thread designator @var{t@dots{}} may be -1, meaning all
the threads, a thread number, or zero which means pick any thread.
Reply:
@table @samp
@item OK
for success
@item E@var{NN}
for an error
@end table
@c FIXME: JTC:
@c 'H': How restrictive (or permissive) is the thread model. If a
@c thread is selected and stopped, are other threads allowed
@c to continue to execute? As I mentioned above, I think the
@c semantics of each command when a thread is selected must be
@c described. For example:
@c
@c 'g': If the stub supports threads and a specific thread is
@c selected, returns the register block from that thread;
@c otherwise returns current registers.
@c
@c 'G' If the stub supports threads and a specific thread is
@c selected, sets the registers of the register block of
@c that thread; otherwise sets current registers.
@item @code{i}@var{addr}@code{,}@var{nnn} --- cycle step @strong{(draft)}
@anchor{cycle step packet}
@cindex @code{i} packet
Step the remote target by a single clock cycle. If @code{,}@var{nnn} is
present, cycle step @var{nnn} cycles. If @var{addr} is present, cycle
step starting at that address.
@item @code{I} --- signal then cycle step @strong{(reserved)}
@cindex @code{I} packet
@xref{step with signal packet}. @xref{cycle step packet}.
@item @code{j} --- reserved
Reserved for future use.
@item @code{J} --- reserved
Reserved for future use.
@item @code{k} --- kill request
@cindex @code{k} packet
FIXME: @emph{There is no description of how to operate when a specific
thread context has been selected (i.e.@: does 'k' kill only that
thread?)}.
@item @code{K} --- reserved
Reserved for future use.
@item @code{l} --- reserved
Reserved for future use.
@item @code{L} --- reserved
Reserved for future use.
@item @code{m}@var{addr}@code{,}@var{length} --- read memory
@cindex @code{m} packet
Read @var{length} bytes of memory starting at address @var{addr}.
Neither @value{GDBN} nor the stub assume that sized memory transfers are
assumed using word alligned accesses. FIXME: @emph{A word aligned memory
transfer mechanism is needed.}
Reply:
@table @samp
@item @var{XX@dots{}}
@var{XX@dots{}} is mem contents. Can be fewer bytes than requested if able
to read only part of the data. Neither @value{GDBN} nor the stub assume
that sized memory transfers are assumed using word alligned
accesses. FIXME: @emph{A word aligned memory transfer mechanism is
needed.}
@item E@var{NN}
@var{NN} is errno
@end table
@item @code{M}@var{addr},@var{length}@code{:}@var{XX@dots{}} --- write mem
@cindex @code{M} packet
Write @var{length} bytes of memory starting at address @var{addr}.
@var{XX@dots{}} is the data.
Reply:
@table @samp
@item OK
for success
@item E@var{NN}
for an error (this includes the case where only part of the data was
written).
@end table
@item @code{n} --- reserved
Reserved for future use.
@item @code{N} --- reserved
Reserved for future use.
@item @code{o} --- reserved
Reserved for future use.
@item @code{O} --- reserved
Reserved for future use.
@item @code{p}@var{n@dots{}} --- read reg @strong{(reserved)}
@cindex @code{p} packet
@xref{write register packet}.
Reply:
@table @samp
@item @var{r@dots{}.}
The hex encoded value of the register in target byte order.
@end table
@item @code{P}@var{n@dots{}}@code{=}@var{r@dots{}} --- write register
@anchor{write register packet}
@cindex @code{P} packet
Write register @var{n@dots{}} with value @var{r@dots{}}, which contains two hex
digits for each byte in the register (target byte order).
Reply:
@table @samp
@item OK
for success
@item E@var{NN}
for an error
@end table
@item @code{q}@var{query} --- general query
@anchor{general query packet}
@cindex @code{q} packet
Request info about @var{query}. In general @value{GDBN} queries have a
leading upper case letter. Custom vendor queries should use a company
prefix (in lower case) ex: @samp{qfsf.var}. @var{query} may optionally
be followed by a @samp{,} or @samp{;} separated list. Stubs must ensure
that they match the full @var{query} name.
Reply:
@table @samp
@item @var{XX@dots{}}
Hex encoded data from query. The reply can not be empty.
@item E@var{NN}
error reply
@item
Indicating an unrecognized @var{query}.
@end table
@item @code{Q}@var{var}@code{=}@var{val} --- general set
@cindex @code{Q} packet
Set value of @var{var} to @var{val}.
@xref{general query packet}, for a discussion of naming conventions.
@item @code{r} --- reset @strong{(deprecated)}
@cindex @code{r} packet
Reset the entire system.
@item @code{R}@var{XX} --- remote restart
@cindex @code{R} packet
Restart the program being debugged. @var{XX}, while needed, is ignored.
This packet is only available in extended mode.
Reply:
@table @samp
@item @emph{no reply}
The @samp{R} packet has no reply.
@end table
@item @code{s}@var{addr} --- step
@cindex @code{s} packet
@var{addr} is address to resume. If @var{addr} is omitted, resume at
same address.
Reply:
@xref{Stop Reply Packets}, for the reply specifications.
@item @code{S}@var{sig}@code{;}@var{addr} --- step with signal
@anchor{step with signal packet}
@cindex @code{S} packet
Like @samp{C} but step not continue.
Reply:
@xref{Stop Reply Packets}, for the reply specifications.
@item @code{t}@var{addr}@code{:}@var{PP}@code{,}@var{MM} --- search
@cindex @code{t} packet
Search backwards starting at address @var{addr} for a match with pattern
@var{PP} and mask @var{MM}. @var{PP} and @var{MM} are 4 bytes.
@var{addr} must be at least 3 digits.
@item @code{T}@var{XX} --- thread alive
@cindex @code{T} packet
Find out if the thread XX is alive.
Reply:
@table @samp
@item OK
thread is still alive
@item E@var{NN}
thread is dead
@end table
@item @code{u} --- reserved
Reserved for future use.
@item @code{U} --- reserved
Reserved for future use.
@item @code{v} --- reserved
Reserved for future use.
@item @code{V} --- reserved
Reserved for future use.
@item @code{w} --- reserved
Reserved for future use.
@item @code{W} --- reserved
Reserved for future use.
@item @code{x} --- reserved
Reserved for future use.
@item @code{X}@var{addr}@code{,}@var{length}@var{:}@var{XX@dots{}} --- write mem (binary)
@cindex @code{X} packet
@var{addr} is address, @var{length} is number of bytes, @var{XX@dots{}}
is binary data. The characters @code{$}, @code{#}, and @code{0x7d} are
escaped using @code{0x7d}.
Reply:
@table @samp
@item OK
for success
@item E@var{NN}
for an error
@end table
@item @code{y} --- reserved
Reserved for future use.
@item @code{Y} reserved
Reserved for future use.
@item @code{z}@var{t}@code{,}@var{addr}@code{,}@var{length} --- remove break or watchpoint @strong{(draft)}
@cindex @code{z} packet
@xref{insert breakpoint or watchpoint packet}.
@item @code{Z}@var{t}@code{,}@var{addr}@code{,}@var{length} --- insert break or watchpoint @strong{(draft)}
@anchor{insert breakpoint or watchpoint packet}
@cindex @code{Z} packet
@var{t} is type: @samp{0} - software breakpoint, @samp{1} - hardware
breakpoint, @samp{2} --- write watchpoint, @samp{3} - read watchpoint,
@samp{4} - access watchpoint; @var{addr} is address; @var{length} is in
bytes. For a software breakpoint, @var{length} specifies the size of
the instruction to be patched. For hardware breakpoints and watchpoints
@var{length} specifies the memory region to be monitored. To avoid
potential problems with duplicate packets, the operations should be
implemented in an idempotent way.
Reply:
@table @samp
@item E@var{NN}
for an error
@item OK
for success
@item @samp{}
If not supported.
@end table
@end table
@node Stop Reply Packets
@section Stop Reply Packets
@cindex stop reply packets
The @samp{C}, @samp{c}, @samp{S}, @samp{s} and @samp{?} packets can
receive any of the below as a reply. In the case of the @samp{C},
@samp{c}, @samp{S} and @samp{s} packets, that reply is only returned
when the target halts. In the below the exact meaning of @samp{signal
number} is poorly defined. In general one of the UNIX signal numbering
conventions is used.
@table @samp
@item S@var{AA}
@var{AA} is the signal number
@item @code{T}@var{AA}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}@var{n...}@code{:}@var{r...}@code{;}
@cindex @code{T} packet reply
@var{AA} = two hex digit signal number; @var{n...} = register number
(hex), @var{r...} = target byte ordered register contents, size defined
by @code{REGISTER_RAW_SIZE}; @var{n...} = @samp{thread}, @var{r...} =
thread process ID, this is a hex integer; @var{n...} = (@samp{watch} |
@samp{rwatch} | @samp{awatch}, @var{r...} = data address, this is a hex
integer; @var{n...} = other string not starting with valid hex digit.
@value{GDBN} should ignore this @var{n...}, @var{r...} pair and go on
to the next. This way we can extend the protocol.
@item W@var{AA}
The process exited, and @var{AA} is the exit status. This is only
applicable to certain targets.
@item X@var{AA}
The process terminated with signal @var{AA}.
@item N@var{AA};@var{t@dots{}};@var{d@dots{}};@var{b@dots{}} @strong{(obsolete)}
@var{AA} = signal number; @var{t@dots{}} = address of symbol
@code{_start}; @var{d@dots{}} = base of data section; @var{b@dots{}} =
base of bss section. @emph{Note: only used by Cisco Systems targets.
The difference between this reply and the @samp{qOffsets} query is that
the @samp{N} packet may arrive spontaneously whereas the @samp{qOffsets}
is a query initiated by the host debugger.}
@item O@var{XX@dots{}}
@var{XX@dots{}} is hex encoding of @sc{ascii} data. This can happen at
any time while the program is running and the debugger should continue
to wait for @samp{W}, @samp{T}, etc.
@end table
@node General Query Packets
@section General Query Packets
The following set and query packets have already been defined.
@table @r
@item @code{q}@code{C} --- current thread
Return the current thread id.
Reply:
@table @samp
@item @code{QC}@var{pid}
Where @var{pid} is a HEX encoded 16 bit process id.
@item *
Any other reply implies the old pid.
@end table
@item @code{q}@code{fThreadInfo} -- all thread ids
@code{q}@code{sThreadInfo}
Obtain a list of active thread ids from the target (OS). Since there
may be too many active threads to fit into one reply packet, this query
works iteratively: it may require more than one query/reply sequence to
obtain the entire list of threads. The first query of the sequence will
be the @code{qf}@code{ThreadInfo} query; subsequent queries in the
sequence will be the @code{qs}@code{ThreadInfo} query.
NOTE: replaces the @code{qL} query (see below).
Reply:
@table @samp
@item @code{m}@var{id}
A single thread id
@item @code{m}@var{id},@var{id}@dots{}
a comma-separated list of thread ids
@item @code{l}
(lower case 'el') denotes end of list.
@end table
In response to each query, the target will reply with a list of one or
more thread ids, in big-endian hex, separated by commas. @value{GDBN}
will respond to each reply with a request for more thread ids (using the
@code{qs} form of the query), until the target responds with @code{l}
(lower-case el, for @code{'last'}).
@item @code{q}@code{ThreadExtraInfo}@code{,}@var{id} --- extra thread info
Where @var{id} is a thread-id in big-endian hex. Obtain a printable
string description of a thread's attributes from the target OS. This
string may contain anything that the target OS thinks is interesting for
@value{GDBN} to tell the user about the thread. The string is displayed
in @value{GDBN}'s @samp{info threads} display. Some examples of
possible thread extra info strings are ``Runnable'', or ``Blocked on
Mutex''.
Reply:
@table @samp
@item @var{XX@dots{}}
Where @var{XX@dots{}} is a hex encoding of @sc{ascii} data, comprising
the printable string containing the extra information about the thread's
attributes.
@end table
@item @code{q}@code{L}@var{startflag}@var{threadcount}@var{nextthread} --- query @var{LIST} or @var{threadLIST} @strong{(deprecated)}
Obtain thread information from RTOS. Where: @var{startflag} (one hex
digit) is one to indicate the first query and zero to indicate a
subsequent query; @var{threadcount} (two hex digits) is the maximum
number of threads the response packet can contain; and @var{nextthread}
(eight hex digits), for subsequent queries (@var{startflag} is zero), is
returned in the response as @var{argthread}.
NOTE: this query is replaced by the @code{q}@code{fThreadInfo} query
(see above).
Reply:
@table @samp
@item @code{q}@code{M}@var{count}@var{done}@var{argthread}@var{thread@dots{}}
Where: @var{count} (two hex digits) is the number of threads being
returned; @var{done} (one hex digit) is zero to indicate more threads
and one indicates no further threads; @var{argthreadid} (eight hex
digits) is @var{nextthread} from the request packet; @var{thread@dots{}}
is a sequence of thread IDs from the target. @var{threadid} (eight hex
digits). See @code{remote.c:parse_threadlist_response()}.
@end table
@item @code{q}@code{CRC:}@var{addr}@code{,}@var{length} --- compute CRC of memory block
Reply:
@table @samp
@item @code{E}@var{NN}
An error (such as memory fault)
@item @code{C}@var{CRC32}
A 32 bit cyclic redundancy check of the specified memory region.
@end table
@item @code{q}@code{Offsets} --- query sect offs
Get section offsets that the target used when re-locating the downloaded
image. @emph{Note: while a @code{Bss} offset is included in the
response, @value{GDBN} ignores this and instead applies the @code{Data}
offset to the @code{Bss} section.}
Reply:
@table @samp
@item @code{Text=}@var{xxx}@code{;Data=}@var{yyy}@code{;Bss=}@var{zzz}
@end table
@item @code{q}@code{P}@var{mode}@var{threadid} --- thread info request
Returns information on @var{threadid}. Where: @var{mode} is a hex
encoded 32 bit mode; @var{threadid} is a hex encoded 64 bit thread ID.
Reply:
@table @samp
@item *
@end table
See @code{remote.c:remote_unpack_thread_info_response()}.
@item @code{q}@code{Rcmd,}@var{command} --- remote command
@var{command} (hex encoded) is passed to the local interpreter for
execution. Invalid commands should be reported using the output string.
Before the final result packet, the target may also respond with a
number of intermediate @code{O}@var{output} console output packets.
@emph{Implementors should note that providing access to a stubs's
interpreter may have security implications}.
Reply:
@table @samp
@item OK
A command response with no output.
@item @var{OUTPUT}
A command response with the hex encoded output string @var{OUTPUT}.
@item @code{E}@var{NN}
Indicate a badly formed request.
@item @samp{}
When @samp{q}@samp{Rcmd} is not recognized.
@end table
@item @code{qSymbol::} --- symbol lookup
Notify the target that @value{GDBN} is prepared to serve symbol lookup
requests. Accept requests from the target for the values of symbols.
Reply:
@table @samp
@item @code{OK}
The target does not need to look up any (more) symbols.
@item @code{qSymbol:}@var{sym_name}
The target requests the value of symbol @var{sym_name} (hex encoded).
@value{GDBN} may provide the value by using the
@code{qSymbol:}@var{sym_value}:@var{sym_name} message, described below.
@end table
@item @code{qSymbol:}@var{sym_value}:@var{sym_name} --- symbol value
Set the value of @var{sym_name} to @var{sym_value}.
@var{sym_name} (hex encoded) is the name of a symbol whose value the
target has previously requested.
@var{sym_value} (hex) is the value for symbol @var{sym_name}. If
@value{GDBN} cannot supply a value for @var{sym_name}, then this field
will be empty.
Reply:
@table @samp
@item @code{OK}
The target does not need to look up any (more) symbols.
@item @code{qSymbol:}@var{sym_name}
The target requests the value of a new symbol @var{sym_name} (hex
encoded). @value{GDBN} will continue to supply the values of symbols
(if available), until the target ceases to request them.
@end table
@end table
@node Register Packet Format
@section Register Packet Format
The following @samp{g}/@samp{G} packets have previously been defined.
In the below, some thirty-two bit registers are transferred as
sixty-four bits. Those registers should be zero/sign extended (which?)
to fill the space allocated. Register bytes are transfered in target
byte order. The two nibbles within a register byte are transfered
most-significant - least-significant.
@table @r
@item MIPS32
All registers are transfered as thirty-two bit quantities in the order:
32 general-purpose; sr; lo; hi; bad; cause; pc; 32 floating-point
registers; fsr; fir; fp.
@item MIPS64
All registers are transfered as sixty-four bit quantities (including
thirty-two bit registers such as @code{sr}). The ordering is the same
as @code{MIPS32}.
@end table
@node Examples
@section Examples
Example sequence of a target being re-started. Notice how the restart
does not get any direct output:
@smallexample
-> @code{R00}
<- @code{+}
@emph{target restarts}
-> @code{?}
<- @code{+}
<- @code{T001:1234123412341234}
-> @code{+}
@end smallexample
Example sequence of a target being stepped by a single instruction:
@smallexample
-> @code{G1445@dots{}}
<- @code{+}
-> @code{s}
<- @code{+}
@emph{time passes}
<- @code{T001:1234123412341234}
-> @code{+}
-> @code{g}
<- @code{+}
<- @code{1455@dots{}}
-> @code{+}
@end smallexample
@include gpl.texi
@include fdl.texi
@node Index
@unnumbered Index
@printindex cp
@tex
% I think something like @colophon should be in texinfo. In the
% meantime:
\long\def\colophon{\hbox to0pt{}\vfill
\centerline{The body of this manual is set in}
\centerline{\fontname\tenrm,}
\centerline{with headings in {\bf\fontname\tenbf}}
\centerline{and examples in {\tt\fontname\tentt}.}
\centerline{{\it\fontname\tenit\/},}
\centerline{{\bf\fontname\tenbf}, and}
\centerline{{\sl\fontname\tensl\/}}
\centerline{are used for emphasis.}\vfill}
\page\colophon
% Blame: doc@cygnus.com, 1991.
@end tex
@bye
|