Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[lldb/crashlog] Create artificial frames for non-crashed scripted thr…
…eads This patch pipes down the `-a|--load-all` crashlog command option to the Scripted Process initializer to load all the images used by crashed process instead of only loading the images related to the crashed thread. This allows us to recreate artificial frames also for the non-crashed scripted threads. rdar://90396265 Differential Revision: https://reviews.llvm.org/D121826 Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
- Loading branch information
1 parent
0c4e9fb
commit 0a65112
Showing
5 changed files
with
519 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
lldb/test/Shell/ScriptInterpreter/Python/Crashlog/Inputs/multithread-test.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#include <iostream> | ||
#include <mutex> | ||
#include <thread> | ||
|
||
int bar(int i) { | ||
int *j = 0; | ||
*j = 1; | ||
return i; // break here | ||
} | ||
|
||
int foo(int i) { return bar(i); } | ||
|
||
void call_and_wait(int &n) { | ||
std::cout << "waiting for computation!" << std::endl; | ||
while (n != 42 * 42) | ||
; | ||
std::cout << "finished computation!" << std::endl; | ||
} | ||
|
||
void compute_pow(int &n) { n = foo(n); } | ||
|
||
int main() { | ||
int n = 42; | ||
std::mutex mutex; | ||
std::unique_lock<std::mutex> lock(mutex); | ||
|
||
std::thread thread_1(call_and_wait, std::ref(n)); | ||
std::thread thread_2(compute_pow, std::ref(n)); | ||
lock.unlock(); | ||
|
||
thread_1.join(); | ||
thread_2.join(); | ||
|
||
return 0; | ||
} |
Oops, something went wrong.