Re: The return address of strtok is out of bounds in gdb

Zhang Zhen <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>
On 2015/3/17 19:26, Andreas Schwab wrote:
> Yao Qi <[email protected]> writes:
> 
>> In your case, I suspect GDB prepares the incorrect arguments for
>> function strtok due to lack of debugging information, so you'll see
>> the error.
> 
> Probably just the unknown return type, which defaults to int, so you get
> truncation to 32 bits.
> 
>> You can get your libc debug info installed, or wrap up strktok like
>> this in your program,
I have tried install libc6-dbg, but the error still exist.

root@sandybridge:/tmp# ls /lib64/.debug/
ld-2.18.so		 libm-2.18.so		libnss_nis-2.18.so
libBrokenLocale-2.18.so  libmemusage.so		libnss_nisplus-2.18.so
libSegFault.so		 libnsl-2.18.so		libpcprofile.so
libanl-2.18.so		 libnss_compat-2.18.so	libpthread-2.18.so
libc-2.18.so		 libnss_db-2.18.so	libresolv-2.18.so
libcidn-2.18.so		 libnss_dns-2.18.so	librt-2.18.so
libcrypt-2.18.so	 libnss_files-2.18.so	libthread_db-1.0.so
libdl-2.18.so		 libnss_hesiod-2.18.so	libutil-2.18.so

>>
>> char *
>> my_strtok(char *str, const char *delim)
>> {
>>   return strtok (str, delim);
>> }
>>
>> and in gdb,
>>
>> (gdb) p p1 = my_strtok(a0, se)
> 
> Or add a cast to the expected type:
> 
> (gdb) p p1 = ((char *(*)())strtok)(a0, se)
> 
Yeah, i tried to wrap up strktok and add a cast.
They both work well.
But i want to know how can i get the correct return type of strtok in gdb.

Thanks for your and Yao Qi's reply.
> Andreas.
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.