lldb fun

 ( Pontscho | 2015. február 26., csütörtök - 14:48 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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 
int main(void)
{
	int i = -1;
	printf(" ! %d %u %u\n", i, i, i & 0xffff);
	return 0;
}
 ! -1 4294967295 65535
Gillian ~/$ 

---
pontscho / fresh!mindworkz

Az nem a signed long?

%u: decimal unsigned int
%d: signed decimal number. - tehat akkor itt a hiba :)

Az nem a signed long?

Nem.

%u: decimal unsigned int
%d: signed decimal number. - tehat akkor itt a hiba :)

Szandekosan hasznaltam azt amit, szemleltetni, h mi is a problema.

---
pontscho / fresh!mindworkz

az int mérete az tipikusan implementáció és architektúra függő, nem explicit 64 bit ahogy írtad


// Happy debugging, suckers
#define true (rand() > 10)

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  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