lldb fun

Adva vagyon ez a két sor:


   78  		int s_ret = stat(_name, &s);
   79  	printf("%d\n", s_ret);

Ebből terminálon ez látszik:


-1

A 3.4-es lldb-ben, közvetlenül a printf utáni breakpointon pedig:


(lldb) p s_ret
(int) $1 = 65535
(lldb) 

Köszi.

Hozzászólások

Itt mit kellene nezni? signed int [−32767,+32767]

A debugger miert mutat unsigned erteket?

A signed int az bizony [–2,147,483,648, 2,147,483,647] es nem [−32767,+32767] (ami valojaban -32768). Szimplan, mivel negativ a szam es ezert kettes komplementer a tarolas modja, az also 16 bitet vagja az arcodba, elojel nelkul.

Igy:


Gillian ~/$ cat | clang35 -o main && ./main
#include <stdio.h>
int main(void)
{
	int i = -1;
	printf(" ! %d %u %u\n", i, i, i & 0xffff);
	return 0;
}
 ! -1 4294967295 65535
Gillian ~/$ 

---
pontscho / fresh!mindworkz

Sehol sem emlitettem, h 64 bit lenne. :)

Amugy meg:


Gillian ~/Code/build/Darwin$ clang35 -o main main.c && ./main
main.c:1:18: warning: implicitly declaring library function 'printf' with type 'int (const char *, ...)'
int main(void) { printf("%zu\n", sizeof(int)); return 0; }
                 ^
main.c:1:18: note: include the header <stdio.h> or explicitly provide a declaration for 'printf'
1 warning generated.
4
Gillian ~/Code/build/Darwin$ file main
main: Mach-O 64-bit executable x86_64
Gillian ~/Code/build/Darwin$ 

---
pontscho / fresh!mindworkz