 <p>On Linux, at least certain versions, <code>st_atime</code> and some other time fields in <code>struct stat</code> are inside <code>struct timespec</code> and contain proper timestamps with full nanosecond precision. On those systems <code>st_atime</code> is a define to something else. On my CentOS machine it is defined to <code>st_atim.tv_sec</code>.</p> <p>Throw your code into the preprocessor to see what it is on your system:</p> <pre><code>$ cat foo.c #include &lt;sys/stat.h&gt; void foo(void) { struct stat st; (void)st.st_atime; } $ cc -E foo.c | tail -7 void foo(void) { struct stat st; (void)st.st_atim.tv_sec; } </code></pre> <p>Gdb doesn't know about preprocessor defines, so it can't know how your code got preprocessed. It only knows about the real definition of the struct.</p>