I wanted to display some internal state as an IBM-1141 codepage, but didn’t know the name to use. I knew that EBCDIC-US could be used for IBM-1047, but gdb didn’t like ibm-1147:
(gdb) set target-charset EBCDIC-US (gdb) p (char *)0x7ffbb7b58088 $2 = 0x7ffbb7b58088 "{Jim ;012}", ' ' <repeats 104 times> (gdb) set target-charset ibm-1141 Undefined item: "ibm-1141".
I’d either didn’t know or had forgotten that we can get a list of the supported codepages. The help shows this:
(gdb) help set target-charset Set the target character set. The `target character set' is the one used by the program being debugged. GDB translates characters and strings between the host and target character sets as needed. To see a list of the character sets GDB supports, type `set target-charset'<TAB>
I had to hit tab twice, but after doing so, I see:
(gdb) set target-charset Display all 200 possibilities? (y or n) 1026 866 ARABIC7 CP-HU CP1129 CP1158 CP1371 CP4517 CP856 CP903 1046 866NAV ARMSCII-8 CP037 CP1130 CP1160 CP1388 CP4899 CP857 CP904 1047 869 ASCII CP038 CP1132 CP1161 CP1390 CP4909 CP860 CP905 10646-1:1993 874 ASMO-708 CP1004 CP1133 CP1162 CP1399 CP4971 CP861 CP912 10646-1:1993/UCS4 8859_1 ASMO_449 CP1008 CP1137 CP1163 CP273 CP500 CP862 CP915 437 8859_2 BALTIC CP1025 CP1140 CP1164 CP274 CP5347 CP863 CP916 500 8859_3 BIG-5 CP1026 CP1141 CP1166 CP275 CP737 CP864 CP918 500V1 8859_4 BIG-FIVE CP1046 CP1142 CP1167 CP278 CP770 CP865 CP920 850 8859_5 BIG5 CP1047 CP1143 CP1250 CP280 CP771 CP866 CP921 851 8859_6 BIG5-HKSCS CP1070 CP1144 CP1251 CP281 CP772 CP866NAV CP922 852 8859_7 BIG5HKSCS CP1079 CP1145 CP1252 CP282 CP773 CP868 CP930 855 8859_8 BIGFIVE CP1081 CP1146 CP1253 CP284 CP774 CP869 CP932 856 8859_9 BRF CP1084 CP1147 CP1254 CP285 CP775 CP870 CP933 857 904 BS_4730 CP1089 CP1148 CP1255 CP290 CP803 CP871 CP935 860 ANSI_X3.110 CA CP1097 CP1149 CP1256 CP297 CP813 CP874 CP936 861 ANSI_X3.110-1983 CN CP1112 CP1153 CP1257 CP367 CP819 CP875 CP937 862 ANSI_X3.4 CN-BIG5 CP1122 CP1154 CP1258 CP420 CP850 CP880 CP939 863 ANSI_X3.4-1968 CN-GB CP1123 CP1155 CP1282 CP423 CP851 CP891 CP949 864 ANSI_X3.4-1986 CP-AR CP1124 CP1156 CP1361 CP424 CP852 CP901 CP950 865 ARABIC CP-GR CP1125 CP1157 CP1364 CP437 CP855 CP902 auto *** List may be truncated, max-completions reached. ***
There’s my ibm-1141 in there, but masquerading as CP1141, so I’m able to view my data in that codepage, and lookup the value of characters of interest in 1141:
(gdb) set target-charset CP1141 (gdb) p (char *)0x7ffbb7b58088 $3 = 0x7ffbb7b58088 "äJim ;012ü", ' ' <repeats 104 times> (gdb) p /x '{' $4 = 0x43 (gdb) p /x '} Unmatched single quote. (gdb) p /x '}' $5 = 0xdc (gdb) p /x *(char *)0x7ffbb7b58088 $6 = 0xc0
I’m able to conclude that the buffer in question appears to be in CP1047, not CP1141 (the first character, which is supposed to be ‘{‘ doesn’t have the CP1141 value of ‘{‘).