summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-24 13:39:16 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-24 13:39:16 +0000
commit8d1689508d8b9b45decd4dd0507d46ba12dfce2e (patch)
treebbde4d45221afc4cc4e3203e805cb688a4c79269
parent155149109a9c6d6ae79bf40398cb51e8883dad26 (diff)
* error.c, vm_dump.c: change message by rb_bug().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--error.c7
-rw-r--r--vm_dump.c26
3 files changed, 31 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 141eaee793..4269f71def 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Dec 24 22:36:06 2008 Koichi Sasada <ko1@atdot.net>
+
+ * error.c, vm_dump.c: change message by rb_bug().
+
Wed Dec 24 21:57:39 2008 Koichi Sasada <ko1@atdot.net>
* compile.c (iseq_peephole_optimize): fix typo.
diff --git a/error.c b/error.c
index b6ab8c4959..df4b0cc671 100644
--- a/error.c
+++ b/error.c
@@ -207,10 +207,17 @@ report_bug(const char *file, int line, const char *fmt, va_list args)
if (fwrite(buf, 1, len, out) == len ||
fwrite(buf, 1, len, (out = stdout)) == len) {
+
fputs("[BUG] ", out);
vfprintf(out, fmt, args);
fprintf(out, "\n%s\n\n", ruby_description);
+
rb_vm_bugreport();
+
+ fprintf(out,
+ "[NOTE]\n"
+ "You may encounter a bug of Ruby interpreter. Bug reports are welcome.\n"
+ "For details: http://www.ruby-lang.org/bugreport.html\n\n");
}
}
diff --git a/vm_dump.c b/vm_dump.c
index d922b5beab..2098f129dd 100644
--- a/vm_dump.c
+++ b/vm_dump.c
@@ -580,9 +580,16 @@ rb_vm_bugreport(void)
SDR();
bt = rb_make_backtrace();
- if (TYPE(bt) == T_ARRAY)
- for (i = 0; i < RARRAY_LEN(bt); i++) {
- dp(RARRAY_PTR(bt)[i]);
+
+ if (bt) {
+ fprintf(stderr, "-- Ruby level backtrace information"
+ "-----------------------------------------\n");
+
+ for (i = 0; i < RARRAY_LEN(bt); i++) {
+ VALUE str = RARRAY_PTR(bt)[i];
+ fprintf(stderr, "%s\n", RSTRING_PTR(str));
+ }
+ fprintf(stderr, "\n");
}
}
@@ -592,13 +599,20 @@ rb_vm_bugreport(void)
{
static void *trace[MAX_NATIVE_TRACE];
int n = backtrace(trace, MAX_NATIVE_TRACE);
+ char **syms = backtrace_symbols(trace, n);
int i;
- fprintf(stderr, "-- backtrace of native function call (Use addr2line) --\n");
+ fprintf(stderr, "-- C level backtrace information "
+ "-------------------------------------------\n");
for (i=0; i<n; i++) {
- fprintf(stderr, "%p\n", trace[i]);
+ char *info = syms ? syms[i] : "";
+ fprintf(stderr, "%p %s\n", trace[i], info);
+ }
+ fprintf(stderr, "\n");
+
+ if (syms) {
+ free(syms);
}
- fprintf(stderr, "-------------------------------------------------------\n");
}
#endif
}