Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add line numbers to MSVC backtrace #28242

Merged
merged 1 commit into from Sep 5, 2015

Conversation

Projects
None yet
5 participants
@Diggsey
Copy link
Contributor

Diggsey commented Sep 4, 2015

Currently LLVM does not generate the debug info required to get complete backtraces even when functions are inlined, so that part of the run-pass/backtrace-debuginfo.rs test is disabled when targetting MSVC. At worst this results in missing stack frames where functions have been inlined.

@rust-highfive

This comment has been minimized.

Copy link
Collaborator

rust-highfive commented Sep 4, 2015

r? @aturon

(rust_highfive has picked a reviewer for you, use r? to override)

@@ -15,7 +15,8 @@ pub fn callback<F>(f: F) where F: FnOnce((&'static str, u32)) {
f((file!(), line!()))
}

#[inline(always)]
#[cfg_attr(not(target_env = "msvc"), inline(always))]
#[cfg_attr(target_env = "msvc", inline(never))]

This comment has been minimized.

@alexcrichton

alexcrichton Sep 4, 2015

Member

Could you add a comment explaining what's going on here?

let basename = file.split(&['/', '\\'][..]).last().unwrap();
println!("{}:{}", basename, line);
}
}

This comment has been minimized.

@alexcrichton

alexcrichton Sep 4, 2015

Member

Instead of duplicating the function, could this do something like:

// explanatory comment
let skip = if cfg!(target_env = "msvc") {1} else {0};
for &(file, line) in filelines.iter().rev().skip(skip) {
    // ...
}
fn inner_inlined(counter: &mut i32, main_pos: Pos, outer_pos: Pos) {
check!(counter; main_pos, outer_pos);
check!(counter; main_pos, outer_pos);

#[inline(always)]
#[cfg_attr(not(target_env = "msvc"), inline(always))]
#[cfg_attr(target_env = "msvc", inline(never))]

This comment has been minimized.

@alexcrichton

alexcrichton Sep 4, 2015

Member

Like the above one, could you add explanatory comments here for the #[cfg]? It's fine for all of them to point to just one comment

unsafe { CStr::from_ptr(line.Filename).to_bytes() },
line.LineNumber as libc::c_int,
false
)

This comment has been minimized.

@alexcrichton

alexcrichton Sep 4, 2015

Member

Could you format this like:

output_fileline(w,
                unsafe { CStr::from_ptr(line.Filename).to_bytes() },
                line.LineNumber as libc::c_int,
                false)
@alexcrichton

This comment has been minimized.

Copy link
Member

alexcrichton commented Sep 4, 2015

Awesome, thanks @Diggsey! I had implemented this in backtrace-rs but apparently forgot to port it over!

@alexcrichton alexcrichton assigned alexcrichton and unassigned aturon Sep 4, 2015

@Diggsey Diggsey force-pushed the Diggsey:msvc-backtrace branch from f0279e7 to 9a83842 Sep 4, 2015

@Diggsey

This comment has been minimized.

Copy link
Contributor Author

Diggsey commented Sep 4, 2015

All done!

@alexcrichton

This comment has been minimized.

Copy link
Member

alexcrichton commented Sep 4, 2015

@bors

This comment has been minimized.

Copy link
Contributor

bors commented Sep 5, 2015

⌛️ Testing commit 9a83842 with merge 6b36e92...

bors added a commit that referenced this pull request Sep 5, 2015

Auto merge of #28242 - Diggsey:msvc-backtrace, r=alexcrichton
Currently LLVM does not generate the debug info required to get complete backtraces even when functions are inlined, so that part of the `run-pass/backtrace-debuginfo.rs` test is disabled when targetting MSVC. At worst this results in missing stack frames where functions have been inlined.

@bors bors merged commit 9a83842 into rust-lang:master Sep 5, 2015

2 checks passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
homu Test successful
Details
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.