|
From: Nick O. <ni...@as...> - 2013-01-20 22:16:03
|
Howdy! I have a nice stacktrace from some memory error in valgrind, and it fails to print the source file + line number somewhere. Here's the trace: ==63113== Conditional jump or move depends on uninitialised value(s) ==63113== at 0x52FBA8: __vfprintf (in /usr/lib/system/libsystem_c.dylib) ==63113== by 0x52F18D: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) ==63113== by 0x538D99: fprintf (in /usr/lib/system/libsystem_c.dylib) ==63113== by 0x100046718: write_regfit(char*, Regfit*) (clsf_io.cc:505) ==63113== by 0x1000466B5: write_regfit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Regfit*) (clsf_io.cc:492) ==63113== by 0x10002F7AC: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:335) ==63113== by 0x10002D2C5: run_study(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:266) ==63113== by 0x10002B83B: run_case(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:222) ==63113== by 0x100029748: main (stage1.cc:173) ==63113== Uninitialised value was created by a stack allocation ==63113== at 0x10002D7D4: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in /Users/nick/Documents/Code/diag/REPO/BIN/stage1) As you can see, it doesn't say what source file + line number is where the uninitialized was created, but when I pass these values into atos (addr2line for BSD, basically): nick@Nicks-MacBook-Pro:~/Documents/Code/diag/REPO/BIN$ atos -o stage1 0x10002D7D4 run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in stage1) (stage1.cc:284) This is on my Mac, running OSX 10.7, running valgrind 3.8.1 I was wondering why atos can give me source + line number and valgrind can't. Thanks in advance! |
|
From: Julian S. <js...@ac...> - 2013-01-21 11:11:17
|
Did you use --dsymutil=yes ? J On 01/20/2013 10:50 PM, Nick Overdijk wrote: > Howdy! > > I have a nice stacktrace from some memory error in valgrind, and it fails to print the source file + line number somewhere. Here's the trace: > > ==63113== Conditional jump or move depends on uninitialised value(s) > ==63113== at 0x52FBA8: __vfprintf (in /usr/lib/system/libsystem_c.dylib) > ==63113== by 0x52F18D: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) > ==63113== by 0x538D99: fprintf (in /usr/lib/system/libsystem_c.dylib) > ==63113== by 0x100046718: write_regfit(char*, Regfit*) (clsf_io.cc:505) > ==63113== by 0x1000466B5: write_regfit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Regfit*) (clsf_io.cc:492) > ==63113== by 0x10002F7AC: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:335) > ==63113== by 0x10002D2C5: run_study(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:266) > ==63113== by 0x10002B83B: run_case(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:222) > ==63113== by 0x100029748: main (stage1.cc:173) > ==63113== Uninitialised value was created by a stack allocation > ==63113== at 0x10002D7D4: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in /Users/nick/Documents/Code/diag/REPO/BIN/stage1) > > > As you can see, it doesn't say what source file + line number is where the uninitialized was created, but when I pass these values into atos (addr2line for BSD, basically): > > nick@Nicks-MacBook-Pro:~/Documents/Code/diag/REPO/BIN$ atos -o stage1 0x10002D7D4 > run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in stage1) (stage1.cc:284) > > This is on my Mac, running OSX 10.7, running valgrind 3.8.1 > > I was wondering why atos can give me source + line number and valgrind can't. > > Thanks in advance! > ------------------------------------------------------------------------------ > Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, > MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current > with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft > MVPs and experts. ON SALE this month only -- learn more at: > http://p.sf.net/sfu/learnmore_123012 > _______________________________________________ > Valgrind-users mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-users > |
|
From: Nick O. <ni...@as...> - 2013-01-21 12:38:41
|
Ah of course. I didn't do that, I ran it myself manually on stage1. such as: dsymutil stage1 && valgrind stage1 That's because the call to valgrind is a bit hidden in some scripts that are also used on linux. Should my way work? On 2013-21-01, at 12:10:28 , Julian Seward wrote: > > Did you use --dsymutil=yes ? > > J > > On 01/20/2013 10:50 PM, Nick Overdijk wrote: >> Howdy! >> >> I have a nice stacktrace from some memory error in valgrind, and it fails to print the source file + line number somewhere. Here's the trace: >> >> ==63113== Conditional jump or move depends on uninitialised value(s) >> ==63113== at 0x52FBA8: __vfprintf (in /usr/lib/system/libsystem_c.dylib) >> ==63113== by 0x52F18D: vfprintf_l (in /usr/lib/system/libsystem_c.dylib) >> ==63113== by 0x538D99: fprintf (in /usr/lib/system/libsystem_c.dylib) >> ==63113== by 0x100046718: write_regfit(char*, Regfit*) (clsf_io.cc:505) >> ==63113== by 0x1000466B5: write_regfit(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, Regfit*) (clsf_io.cc:492) >> ==63113== by 0x10002F7AC: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:335) >> ==63113== by 0x10002D2C5: run_study(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:266) >> ==63113== by 0x10002B83B: run_case(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (stage1.cc:222) >> ==63113== by 0x100029748: main (stage1.cc:173) >> ==63113== Uninitialised value was created by a stack allocation >> ==63113== at 0x10002D7D4: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in /Users/nick/Documents/Code/diag/REPO/BIN/stage1) >> >> >> As you can see, it doesn't say what source file + line number is where the uninitialized was created, but when I pass these values into atos (addr2line for BSD, basically): >> >> nick@Nicks-MacBook-Pro:~/Documents/Code/diag/REPO/BIN$ atos -o stage1 0x10002D7D4 >> run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in stage1) (stage1.cc:284) >> >> This is on my Mac, running OSX 10.7, running valgrind 3.8.1 >> >> I was wondering why atos can give me source + line number and valgrind can't. >> >> Thanks in advance! >> ------------------------------------------------------------------------------ >> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, >> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current >> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft >> MVPs and experts. ON SALE this month only -- learn more at: >> http://p.sf.net/sfu/learnmore_123012 >> _______________________________________________ >> Valgrind-users mailing list >> Val...@li... >> https://lists.sourceforge.net/lists/listinfo/valgrind-users >> > |
|
From: Julian S. <js...@ac...> - 2013-01-23 08:31:36
|
On 01/21/2013 01:38 PM, Nick Overdijk wrote: > Ah of course. I didn't do that, I ran it myself manually on stage1. such as: > > dsymutil stage1 && valgrind stage1 > > That's because the call to valgrind is a bit hidden in some scripts that > are also used on linux. Should my way work? I think it should; not sure why it doesn't. But anyway, does -dsymutil=yes help? J |
|
From: Dave G. <go...@mc...> - 2013-01-23 15:34:12
|
On Jan 20, 2013, at 3:50 PM CST, Nick Overdijk wrote: > I have a nice stacktrace from some memory error in valgrind, and it fails to print the source file + line number somewhere. Here's the trace: > > ==63113== Conditional jump or move depends on uninitialised value(s) […] > ==63113== Uninitialised value was created by a stack allocation > ==63113== at 0x10002D7D4: run_image(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_ostream<char, std::__1::char_traits<char> >&) (in /Users/nick/Documents/Code/diag/REPO/BIN/stage1) […] > This is on my Mac, running OSX 10.7, running valgrind 3.8.1 > > I was wondering why atos can give me source + line number and valgrind can't. How exactly are you building the source file that contains this particular line? I've encountered some weirdness if I do a direct ".c"-->"a.out" build without first creating ".o" files. That is: ----8<---- gcc foo.c dsymutil a.out ----8<---- will NOT show file/line info in valgrind, but: ----8<---- gcc -c foo.c gcc foo.o dsymutil a.out ----8<---- will. This sometimes happens even if gdb can show me the correct debug info. I never thought too much of it and assumed it was Darwin's fault, since the ".dSYM" system is such a bad idea for other reasons. I suppose that it could be a Valgrind issue though... -Dave |